JavaScript-beperkingen

Belangrijk

Het moderne afdrukplatform is de voorkeursmiddel van Windows om te communiceren met printers. We raden aan om de IPP inbox class driver van Microsoft te gebruiken, samen met Print Support Apps (PSA), om de afdrukervaring in Windows 10 en 11 aan te passen voor de ontwikkeling van printerapparaten.

Zie de ontwerphandleiding voor Print Support App v1 en v2 voor meer informatie.

Het v4-printerstuurprogrammamodel ondersteunt een nieuw model voor uitgebreide beperkingen en PrintTicket-verwerking dat is afgeleid van de v3-interface IPrintOemPrintTicketProvider.

In plaats van een gecompileerde configuratieinvoegtoepassing te gebruiken, gebruiken v4-printerstuurprogramma's echter JavaScript om API's met de naam JavaScript-beperkingen te implementeren en kan het printerstuurprogramma een of meer van deze indien nodig implementeren. Zie de functies in de sectie JavaScript Constraint API's aan het einde van dit onderwerp voor meer informatie.

JavaScript-beperkingen kunnen worden gebruikt voor het uitbreiden van PrintCapabilities, het valideren van PrintTickets en het verwerken van conversie van PrintTicket naar DEVMODE en vice versa. JavaScript-beperkingen hebben echter enkele beperkingen. Hier volgt een lijst met de belangrijkste beperkingen:

  • Functies en opties die zijn toegevoegd met CompletePrintCapabilities, evenals beperkingen die zijn opgegeven in validatePrintTicket, worden niet weergegeven in het venster met printervoorkeuren voor het bureaublad.

  • Functies en opties die zijn toegevoegd aan het gebruik van CompletePrintCapabilities, worden niet bewaard in de openbare DEVMODE.

  • JavaScript-beperkingen hebben geen toegang tot taalresources van bron-DLL's om toegevoegde functies en opties of parameters te lokaliseren.

Daarom raden we aan dat JavaScript-beperkingen alleen worden gebruikt indien van toepassing. Functies en opties moeten indien mogelijk worden opgegeven in gpd- of PPD-bestanden en alleen ingewikkelde beperkingen moeten worden weergegeven in JavaScript.

Fouten opsporen in JavaScript-bestanden

Syntactische basisvalidatie van JavaScript-bestanden wordt ondersteund door het JavaScript-bestand te openen in de Windows-scripthost. Hiervoor klikt u met de rechtermuisknop op het JavaScript-bestand en selecteert u Openen met en kiest u de vermelding Windows Script Host in de lijst. Als er geen fouten optreden, is het JavaScript syntactisch geldig. Anders wordt het regelnummer van het probleem aangegeven, zoals wordt weergegeven in de volgende schermopname.

Dialoogvenster JavaScript-syntaxisfout.

Openbaar beschikbare JavaScript-validatiehulpprogramma's kunnen ook waardevol zijn als hulpmiddel bij het evalueren van de stijl van JavaScript-bestanden.

Interactieve foutopsporing kan worden ingeschakeld door de volgende registersleutel te maken:

sleutelnaam: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print

Waardenaam: EnableJavaScriptDebugging

Type: DWORD

waarde: 1

Omdat PrintConfig.dll echter regelmatig wordt geladen en ontladen, is het debuggen van een app die afdrukt geen aanbevolen strategie voor testen of debuggen. In plaats daarvan raadt Microsoft aan dat fabrikanten een test-app bouwen die elk van de relevante toegangspunten voor JavaScript-beperkingen aanroept met behulp van deze openbare API's: PTGetPrintCapabilities, PTConvertDevModeToPrintTicket, PTConvertPrintTicketToDevMode en PTMergeAndValidatePrintTicket.

De test-app is alleen voldoende om foutopsporing in te schakelen, maar het is ook nuttig om eenheidstests toe te voegen om ervoor te zorgen dat het hele stuurprogramma PrintTicket, PrintCapabilities en beperkingen verwerkt zoals verwacht. Zie het volgende onderwerp voor meer informatie over het bouwen van Eenheidstests in Visual Studio:

Een walkthrough voor het testen van eenheden met Visual Studio Team Test

Nadat de registersleutel in de voorgaande tekst is gemaakt en het hostingproces opnieuw is gestart, kunt u fouten opsporen in uw JavaScript-bronbestand.

Het is belangrijk te weten dat als het bronbestand niet kan worden geparseerd, het foutopsporingsprogramma niet wordt aangeroepen en het lijkt alsof de foutopsporingsomgeving is mislukt. Als het bronbestand niet kan worden geparseerd, raadpleegt u Windows Script Host voor meer informatie over hoe u kunt doorgaan.

Als er geen fouten zijn en het bronbestand is geparseerd, kunt u als volgt fouten in het bronbestand opsporen:

  1. Microsoft Visual Studio 2012 of hoger installeren op de testmachine

  2. Een afdrukwachtrij maken met behulp van het stuurprogramma met de beperkingen javaScript-code

  3. Stel deze afdrukwachtrij in als de standaardinstelling.

  4. Start uw test-app of een app die kan printen en start een scenario waardoor JavaScript-beperkingen worden aangeroepen. De app moet de PrintTicket/PrintCapabilities-API's aanroepen om binnen de beperkingen van JavaScript te opereren; oudere apps zoals Kladblok roepen deze API's niet aan, maar de XPS Viewer-app wel. Microsoft raadt u aan hier een test-app te gebruiken, omdat de scenario's gemakkelijker kunnen worden geïsoleerd en gereproduceerd.

  5. Op dit moment verschijnt 'Visual Studio Just-In-Time Debugger' met de tekst 'Er is een niet-verwerkte uitzondering opgetreden in <uw app>'

  6. Een nieuw exemplaar van Visual Studio 2012 of hoger starten

  7. Kies Debuggen en koppel dan aan proces

  8. Zorg ervoor dat koppelen aan: is ingesteld op Scriptcode in het dialoogvenster Bijvoegen aan proces

  9. Kies nu de test-app of het afdrukken van de app en kies ten slotte Bijvoegen

  10. Klik op Alles verbreken

  11. Ga nu terug naar het dialoogvenster 'Visual Studio Just-In-Time Foutopsporingsprogramma' en klik op Nee

  12. Visual Studio zal inbreken in de debugger op de locatie die door de huidige test wordt aangeroepen. U kunt nu normaal gesproken fouten opsporen in de code.

JavaScript-beperkingen-API's

In deze sectie worden de functies opgegeven die fungeren als API-toegangspunten voor gebruik in het JavaScript-beperkingsbestand. Dit zijn de functies:

  • validatePrintTicket

  • volledige printmogelijkheden

  • convertDevModeToPrintTicket

  • convertPrintTicketToDevMode

validatePrintTicket functie

Deze API wordt aangeroepen om te valideren dat een PrintTicket-object geldig is voor een bepaalde printer. Dit is vergelijkbaar met de IPrintOemPrintTicketProvider::ValidatePrintTicket-API .

validatePrintTicket-syntaxis

function validatePrintTicket(printTicket, scriptContext)

validatePrintTicket-parameters

  • printTicket

    Invoer/uitvoer: Het IPrintSchemaTicket-object dat gevalideerd moet worden.

  • scriptContext

    [in] Het IPrinterScriptContext-object dat toegang biedt tot de eigenschappentas van het stuurprogramma, de wachtrijeigenschappentas en de gebruikerseigenschappentas.

valideerPrintTicket retourwaarde

Retourwaarde Beschrijving
0 Geeft aan dat de parameter printTicket ongeldig is en niet kan worden gecorrigeerd. Gelijk aan E_PRINTTICKET_FORMAT.
1 Geeft aan dat de parameter printTicket een geldig PrintTicket is voor deze printer. Gelijk aan S_PT_NO_CONFLICT.
2 Geeft aan dat de parameter printTicket is gewijzigd om deze geldig te maken. Gelijk aan S_PT_CONFLICT_RESOLVED.

De functie "completePrintCapabilities"

Deze API wordt aangeroepen om toe te staan dat het PrintCapabilities-object kan worden gewijzigd. Dit moet worden gebruikt voor voorwaardelijke functies (bijvoorbeeld randloos wordt alleen ondersteund op fotopapier) of om functies weer te geven die anders niet kunnen worden gegenereerd door een GPD- of PPD-bestand (bijvoorbeeld geneste functiedefinities). Dit is vergelijkbaar met de IPrintOemPrintTicketProvider::CompletePrintCapabilities-API .

syntaxis van completePrintCapabilities

function completePrintCapabilities(printTicket, scriptContext, printCapabilities)

completePrintCapabilities-parameters

  • printTicket

    [in] Het IPrintSchemaTicket-object dat als invoer wordt gebruikt om het gegenereerde PrintCapabilities-document te beperken tot.

  • scriptContext

    [in] Het IPrinterScriptContext-object dat toegang biedt tot de eigenschappentas van het stuurprogramma, de wachtrijeigenschappentas en de gebruikerseigenschappentas.

  • afdrukmogelijkheden

    [in][uit] Het object IPrintSchemaCapabilities dat het basisobject PrintCapabilities vertegenwoordigt dat is gegenereerd door de configuratiemodule.

retourwaarde completePrintCapabilities

Geen.

de functie convertDevModeToPrintTicket

Deze API wordt aangeroepen om waarden van de DEVMODE-eigenschappenverzameling te converteren naar een PrintTicket. Dit is vergelijkbaar met de IPrintOemPrintTicketProvider::ConvertDevModeToPrintTicket-API, behalve dat deze implementatie de privésectie van de DEVMODE inkapselt in een IPrinterScriptablePropertyBag-object en geen toegang tot het openbare gedeelte van de DEVMODE toestaat.

syntaxis van convertDevModeToPrintTicket

function convertDevModeToPrintTicket(devModeProperties, scriptContext, printTicket)

convertDevModeToPrintTicket parameters

  • devModeProperties

[in] Het object IPrinterScriptablePropertyBag dat de DEVMODE Property Bag vertegenwoordigt.

  • scriptContext

    [in] Het IPrinterScriptContext-object dat toegang biedt tot de eigenschappentas van het stuurprogramma, de wachtrijeigenschappentas en de gebruikerseigenschappentas.

  • printTicket

    [in][uit] Het object IPrintSchemaTicket dat de PrintTicket vertegenwoordigt.

retourwaarde convertDevModeToPrintTicket

Geen.

de functie convertPrintTicketToDevMode

Deze API wordt aangeroepen om waarden van een PrintTicket te converteren naar de eigenschapstas DEVMODE. Dit is vergelijkbaar met de IPrintOemPrintTicketProvider::ConvertPrintTicketToDevMode-API , behalve dat deze implementatie de privésectie van de DEVMODE inkapselt in een IPrinterScriptablePropertyBag-object en geen toegang tot het openbare gedeelte van de DEVMODE toestaat.

syntaxis convertPrintTicketToDevMode

function convertPrintTicketToDevMode(printTicket, scriptContext, devModeProperties)

convertPrintTicketToDevMode-parameters

  • printTicket

    [in] Het object IPrintSchemaTicket dat de PrintTicket vertegenwoordigt die moet worden geconverteerd.

  • scriptContext

    [in] Het IPrinterScriptContext-object dat toegang biedt tot de kenmerkentas van het stuurprogramma, de wachtrijkenmerkentas en de gebruikerskenmerkentas.

  • devModeProperties

    [in][uit] Het object IPrinterScriptablePropertyBag dat de DEVMODE Property Bag vertegenwoordigt.

De retourwaarde van convertPrintTicketToDevMode

Geen.

Aanbevolen procedures voor beperkingen

Het dialoogvenster Afdrukken van Windows 8 en afdrukvoorkeuren ondersteunen alleen een subset van de naamruimte van de Print Schema Keywords. Als gevolg hiervan raadt Microsoft niet aan beperkingen te gebruiken tussen functies die worden ondersteund in het dialoogvenster Afdrukken van Windows 8 of de gebruikersinterface voor afdrukvoorkeuren en functies die zich niet in die gebruikersinterface bevinden, omdat gebruikers geen mogelijkheid hebben om dergelijke beperkingen op te lossen.

Als de optie PageMediaType met de naam Photo bijvoorbeeld beperkt is om alleen te werken met een PageResolution-waarde van 1200dpi, kunnen gebruikers nooit het type Fotomedia kiezen. In dergelijke gevallen is het beter om de intentie van de gebruiker (Fotomedia) te vinden en de instellingen aan te passen die nodig zijn om dit te laten gebeuren. Deze aanpassingen kunnen worden aangebracht in javaScript-beperkingscode.

Als een stuurprogramma geen JavaScript-beperkingen gebruikt, is er geen vereiste dat een bestand wordt opgegeven. Als een stuurprogramma javaScript-beperkingen gebruikt voor slechts een subset van de toegangspunten (bijvoorbeeld validatePrintTicket), moeten de andere toegangspunten volledig worden weggelaten uit het JavaScript-bestand.