JavaScript-begränsningar

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.

dialogrutan med javascript-syntaxfel.

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:

  1. Installera Microsoft Visual Studio 2012 eller senare på testdatorn

  2. Skapa en utskriftskö med hjälp av drivrutinen som har JavaScript-kod för begränsningar.

  3. Ställ in den här utskriftskön som standard.

  4. 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.

  5. För närvarande visas "Visual Studio Just-In-Time Debugger" med texten "Ett ohanterat undantag inträffade i <din app>"

  6. Starta en ny instans av Visual Studio 2012 eller senare

  7. Välj Felsökning och sedan Koppla till process

  8. I dialogrutan Bifoga till process kontrollerar du att Koppla till: är inställt på Skriptkod

  9. Välj nu testappen eller apputskriften och välj slutligen Bifoga

  10. Klicka på "Bryt alla"

  11. Gå nu tillbaka till dialogrutan "Visual Studio Just-In-Time Debugger" och klicka på "Nej"

  12. 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.