Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Viktig
Den moderna utskriftsplattformen är Windows bästa sätt att kommunicera med skrivare. Vi rekommenderar att du använder Microsofts IPP-drivrutin för inkorgsklass tillsammans med Print Support Apps (PSA) för att anpassa utskriftsupplevelsen i Windows 10 och 11 för enhetsutveckling av skrivare.
Mer information finns i designguiden för utskriftssupportapp v1 och v2.
V4-skrivardrivrutinsmodellen stöder en ny modell för utökad begränsning och PrintTicket-hantering som härleds från V3-IPrintOemPrintTicketProvider--gränssnittet.
I stället för att använda ett kompilerat konfigurations-plugin-program använder v4-skrivardrivrutiner JavaScript för att implementera API:er som kallas JavaScript-begränsningar, och skrivardrivrutinen kan implementera en eller flera av dem efter behov. Mer information finns i funktionerna i avsnittet JavaScript Constraint API:er i slutet av det här avsnittet.
JavaScript-begränsningar kan användas för att utöka PrintCapabilities, validera PrintTickets och hantera konvertering av PrintTicket till DEVMODE och vice versa. JavaScript-begränsningar har dock några begränsningar. Följande är en lista över de viktigaste begränsningarna:
Funktioner och alternativ som lagts till med CompletePrintCapabilities samt begränsningar som anges i validatePrintTicket visas inte i fönstret inställningar för skrivbordsskrivare.
Funktioner och alternativ som läggs till via CompletePrintCapabilities bevaras inte i det offentliga DEVMODE.
JavaScript-begränsningar kan inte komma åt språkresurser från resurs-DLL:er för att lokalisera tillagda funktioner och alternativ eller parametrar.
Därför rekommenderar vi att JavaScript-begränsningar endast används när det är lämpligt. Funktioner och alternativ bör anges i GPD- eller PPD-filerna där det är möjligt, och endast komplicerade begränsningar ska representeras i JavaScript.
Felsöka JavaScript-filer
Grundläggande syntaktisk validering av JavaScript-filer stöds genom att öppna JavaScript-filen i Windows-baserade skripthanteraren. Det gör du genom att högerklicka på JavaScript-filen och välja Öppna med, och sedan välja posten Windowsbaserad skripthanterare i listan. Om inga fel utlöses är JavaScript syntaktiskt giltigt. I annat fall kommer det att peka ut radnumret för problemet, som visas i följande skärmbild.
Offentligt tillgängliga JavaScript-valideringsverktyg kan också vara värdefulla som medhjälpare när det gäller att utvärdera formatet för JavaScript-filer.
Interaktiv felsökning kan aktiveras genom att skapa följande registernyckel:
nyckelnamn: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print
värdenamn: EnableJavaScriptDebugging
typ: DWORD
värde: 1
Men eftersom PrintConfig.dll läses in och tas bort ofta är felsökning av en app som skriver ut inte en rekommenderad strategi för testning/felsökning. I stället rekommenderar Microsoft att tillverkare skapar en testapp som anropar var och en av de relevanta startpunkterna för JavaScript-begränsningar med hjälp av dessa offentliga API:er: PTGetPrintCapabilities, PTConvertDevModeToPrintTicket, PTConvertPrintTicketToDevModeoch PTMergeAndValidatePrintTicket.
Enbart testappen räcker för att aktivera felsökning, men det är också bra att lägga till enhetstester för att säkerställa att hela drivrutinen hanterar PrintTicket, PrintCapabilities och begränsningar som förväntat. Mer information om hur du skapar enhetstester i Visual Studio finns i följande avsnitt:
Genomgång av enhetstestning med Visual Studio Team Test
När registernyckeln som visas i föregående text har skapats och värdprocessen har startats om kan du felsöka din JavaScript-källfil.
Observera att om källfilen inte parsas anropas inte felsökningsprogrammet och det verkar som om felsökningsmiljön har misslyckats. Ifall källfilen misslyckas att tolkas kan du läsa Windows Script Host för mer information om hur du fortsätter.
Om det inte finns några fel och källfilen parsas korrekt kan du felsöka källfilen på följande sätt:
Installera Microsoft Visual Studio 2012 eller senare på testdatorn
Skapa en utskriftskö med hjälp av drivrutinen som har JavaScript-kod för begränsningar.
Ställ in den här utskriftskön som standard.
Starta testappen eller en app som skriver ut och påbörja ett scenario som gör att JavaScript-begränsningar anropas. Appen måste anropa API:erna PrintTicket/PrintCapabilities för att kunna bryta sig in i JavaScript-begränsningarna. äldre appar som Anteckningar anropar inte dessa API:er, men XPS Viewer-appen gör det. Microsoft rekommenderar att du använder en testapp här, eftersom scenarierna enklare kan isoleras och återskapas.
För närvarande visas "Visual Studio Just-In-Time Debugger" med texten "Ett ohanterat undantag inträffade i <din app>"
Starta en ny instans av Visual Studio 2012 eller senare
Välj Felsökning och sedan Koppla till process
I dialogrutan Bifoga till process kontrollerar du att Koppla till: är inställt på Skriptkod
Välj nu testappen eller apputskriften och välj slutligen Bifoga
Klicka på "Bryt alla"
Gå nu tillbaka till dialogrutan "Visual Studio Just-In-Time Debugger" och klicka på "Nej"
Visual Studio bryter sig in i felsökningsprogrammet på den plats som anropas av det aktuella testet. Nu kan du felsöka koden normalt.
JavaScript-villkors-API:er
Det här avsnittet anger de funktioner som fungerar som API-startpunkter för användning i JavaScript-begränsningsfilen. Det här är funktionerna:
validatePrintTicket
fullständiga utskriftsmöjligheter
konverteraDevModeTillPrintTicket
konverteraUtskriftBiljettTillDevMode
validatePrintTicket-funktionen
Det här API:et anropas för att verifiera att ett PrintTicket-objekt är giltigt för en viss skrivare. Detta är analogt vad gäller funktion till IPrintOemPrintTicketProvider::ValidatePrintTicket API.
validatePrintTicket-syntax
function validatePrintTicket(printTicket, scriptContext)
valideraUtskriftsbiljett-parametrar
skrivUtBiljett
[i][ut] IPrintSchemaTicket objektet som ska valideras.
scriptContext
[i] IPrinterScriptContext objekt som ger åtkomst till drivrutinsegenskapsväskan, köegenskapsväskan och användaregenskapsväskan.
ValidatePrintTicket-returvärde
| Returvärde | Beskrivning |
|---|---|
| 0 | Anger att parametern printTicket var ogiltig och inte kunde korrigeras. Motsvarar E_PRINTTICKET_FORMAT. |
| 1 | Anger att parametern printTicket är en giltig PrintTicket för den här skrivaren. Motsvarar S_PT_NO_CONFLICT. |
| 2 | Anger att parametern printTicket ändrades för att göra den giltig. Motsvarar S_PT_CONFLICT_RESOLVED. |
funktionen fullständigaUtskriftsmöjligheter
Det här API:et anropas för att tillåta att PrintCapabilities-objektet ändras. Detta bör användas för villkorsstyrda funktioner (till exempel stöds kantlinjelös endast på fotopapper) eller för att representera funktioner som annars inte kunde genereras av en GPD- eller PPD-fil (till exempel kapslade funktionsdefinitioner). Detta motsvarar funktionen i IPrintOemPrintTicketProvider::CompletePrintCapabilities API.
syntax för fullständiga utskriftsfunktioner
function completePrintCapabilities(printTicket, scriptContext, printCapabilities)
komplettaUtskriftsfunktionerparametrar
skrivUtBiljett
[i] IPrintSchemaTicket objektindata för att begränsa det genererade PrintCapabilities-dokumentet till.
scriptContext
[i] IPrinterScriptContext objekt som ger åtkomst till drivrutinsegenskapsväskan, köegenskapsväskan och användaregenskapsväskan.
utskriftsmöjligheter
[i][ut] IPrintSchemaCapabilities objekt som representerar det grundläggande PrintCapabilities-objektet som genererades av konfigurationsmodulen.
completePrintCapabilities-returvärde
Ingen.
convertDevModeToPrintTicket–funktion
Det här API:et anropas för att konvertera värden från DEVMODE-egenskapspåsen till en PrintTicket. Detta motsvarar funktionen i IPrintOemPrintTicketProvider::ConvertDevModeToPrintTicket API, förutom att den här implementeringen kapslar in det privata avsnittet i DEVMODE- i ett IPrinterScriptablePropertyBag objekt och inte ger någon åtkomst till det offentliga avsnittet i DEVMODE.
Syntax för convertDevModeToPrintTicket
function convertDevModeToPrintTicket(devModeProperties, scriptContext, printTicket)
convertDevModeToPrintTicket-parametrar
- devModeProperties
[i] IPrinterScriptablePropertyBag-objekt som representerar DEVMODE-egenskapsuppsättningen.
scriptContext
[i] IPrinterScriptContext objekt som ger åtkomst till drivrutinsegenskapsväskan, köegenskapsväskan och användaregenskapsväskan.
skrivUtBiljett
[i][ut] Objektet IPrintSchemaTicket som representerar PrintTicket.
convertDevModeToPrintTicket-returvärde
Ingen.
convertPrintTicketToDevMode funktion
Det här API:et anropas för att konvertera värden från en PrintTicket till DEVMODE-egenskapspåsen. Detta motsvarar funktionen i IPrintOemPrintTicketProvider::ConvertPrintTicketToDevMode API, förutom att den här implementeringen kapslar in den privata delen av DEVMODE i ett IPrinterScriptablePropertyBag- objekt och inte ger någon åtkomst till det offentliga avsnittet i DEVMODE.
convertPrintTicketToDevMode-syntax
function convertPrintTicketToDevMode(printTicket, scriptContext, devModeProperties)
convertPrintTicketToDevMode-parametrar
skrivUtBiljett
[i] IPrintSchemaTicket objektet som representerar PrintTicket som ska konverteras.
scriptContext
[i] IPrinterScriptContext objekt som ger åtkomst till drivrutinsegenskapsväskan, köegenskapsväskan och användarens egenskapsväska.
devModeProperties
[i][ut] IPrinterScriptablePropertyBag-objekt som representerar DEVMODE-egenskapsväskan.
convertPrintTicketToDevMode-returvärde
Ingen.
Metodtips för begränsning
Utskriftsdialogrutan i Windows 8 och utskriftsinställningarna stöder endast en delmängd av namnområdet Nyckelord för utskriftsschema. Därför rekommenderar Microsoft inte att du använder begränsningar mellan funktioner som stöds i utskriftsdialogrutan i Windows 8 eller i användargränssnittet för utskriftsinställningar och funktioner som inte finns i användargränssnittet, eftersom användarna inte har möjlighet att lösa sådana begränsningar.
Om till exempel alternativet PageMediaType med namnet Foto är begränsat till att endast fungera med ett PageResolution-värde på 1200dpi, kommer användarna aldrig att kunna välja medietypen Foto. I sådana här fall är det bättre att matcha användarens avsikt (fotomedia) och justera de inställningar som krävs för att göra detta. Dessa justeringar kan göras i JavaScript-begränsningskoden.
Om en drivrutin inte använder JavaScript-begränsningar finns det inget krav på att en fil tillhandahålls. Om en drivrutin använder JavaScript-begränsningar för endast en delmängd av startpunkterna (till exempel validatePrintTicket) bör de andra startpunkterna utelämnas helt från JavaScript-filen.