Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Ważny
Nowoczesna platforma drukowania jest preferowanym sposobem komunikacji z drukarkami w systemie Windows. Zalecamy używanie sterownika klasy skrzynki odbiorczej IPP firmy Microsoft wraz z aplikacjami do obsługi drukowania (PSA), aby dostosować środowisko drukowania w systemie Windows 10 i 11 na potrzeby opracowywania urządzeń drukarki.
Aby uzyskać więcej informacji, zobacz Print Support App v1 and v2 design guide (Przewodnik projektowania aplikacji do obsługi wydruku w wersji 1 i 2).
Model sterownika drukarki v4 obsługuje nowy model rozszerzonej obsługi ograniczeń i PrintTicket, wywodzący się z interfejsu IPrintOemPrintTicketProvider w wersji 3.
Zamiast używać skompilowanej wtyczki konfiguracji, sterowniki drukarek w wersji 4 używają języka JavaScript do implementowania interfejsów API nazywanych ograniczeniami języka JavaScript, a sterownik drukarki może zaimplementować co najmniej jeden z nich w razie potrzeby. Aby uzyskać więcej informacji, zobacz funkcje w sekcji interfejsów API ograniczeń JavaScript na końcu tego tematu.
Ograniczenia JavaScript mogą być używane do wzbogacania PrintCapabilities, weryfikowania PrintTickets oraz obsługi konwersji PrintTicket na DEVMODE i odwrotnie. Ograniczenia języka JavaScript mają jednak kilka ograniczeń. Poniżej znajduje się lista głównych ograniczeń:
Funkcje i opcje dodane przy użyciu CompletePrintCapabilities, a także ograniczenia określone w elemencie validatePrintTicket nie są wyświetlane w oknie preferencji drukarki na pulpicie.
Funkcje i opcje dodane przy użyciu CompletePrintCapabilities nie są zapisywane w publicznej DEVMODE.
Ograniczenia w JavaScript nie mogą uzyskiwać dostępu do zasobów językowych z bibliotek DLL w celu lokalizacji dodanych funkcji, opcji lub parametrów.
W związku z tym zalecamy, aby ograniczenia języka JavaScript były używane tylko w odpowiednich przypadkach. Funkcje i opcje należy określić w plikach GPD lub PPD tam, gdzie to możliwe, i w języku JavaScript powinny być reprezentowane tylko skomplikowane ograniczenia.
Debugowanie plików JavaScript
Podstawowa walidacja składni plików JavaScript jest obsługiwana przez otwarcie pliku JavaScript na hoście skryptów systemu Windows. Aby to zrobić, kliknij prawym przyciskiem myszy plik JavaScript i wybierz Otwórz za pomocą, a następnie wybierz wpis Host skryptu systemu Windows na liście. Jeśli nie są zgłaszane żadne błędy, kod JavaScript jest składniowo prawidłowy. W przeciwnym razie wskaże numer wiersza, w którym wystąpił problem, jak pokazano na poniższym zrzucie ekranu.
Publicznie dostępne narzędzia do sprawdzania poprawności języka JavaScript mogą być również przydatne jako pomoc w ocenie stylu plików JavaScript.
Debugowanie interakcyjne można włączyć, tworząc następujący klucz rejestru:
nazwa klucza : HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print
nazwa wartości : EnableJavaScriptDebugging
Typ : DWORD
Wartość : 1
Jednakże, ponieważ PrintConfig.dll jest ładowany i rozładowywany często, debugowanie aplikacji, która drukuje, nie jest zalecaną strategią testowania/debugowania. Zamiast tego firma Microsoft zaleca producentom utworzenie aplikacji testowej, która wywołuje każde z odpowiednich punktów wejścia dla ograniczeń języka JavaScript przy użyciu tych publicznych interfejsów API: PTGetPrintCapabilities, PTConvertDevModeToPrintTicket, PTConvertPrintTicketToDevModei PTMergeAndValidatePrintTicket.
Sama aplikacja testowa jest wystarczająca do włączenia debugowania, ale korzystne jest również dodanie testów jednostkowych, aby upewnić się, że sterownik prawidłowo obsługuje PrintTicket, PrintCapabilities i związane z nimi ograniczenia zgodnie z oczekiwaniami. Aby uzyskać więcej informacji na temat kompilowania testów jednostkowych w programie Visual Studio, zobacz następujący temat:
Przewodnik po testach jednostkowych z wykorzystaniem Visual Studio Team Test
Po utworzeniu klucza rejestru pokazanego w poprzednim tekście i ponownym uruchomieniu procesu hostingu można debugować plik źródłowy JavaScript.
Należy pamiętać, że jeśli nie można przeanalizować pliku źródłowego, debuger nie jest wywoływany i wygląda na to, że środowisko debugowania nie powiodło się. Jeśli nie można przeanalizować pliku źródłowego, zobacz Host skryptów systemu Windows, aby dowiedzieć się, jak postępować dalej.
Jeśli nie ma żadnych błędów i plik źródłowy został pomyślnie przeanalizowany, debuguj plik źródłowy w następujący sposób:
Instalowanie programu Microsoft Visual Studio 2012 lub nowszego na maszynie testowej
Tworzenie kolejki wydruku przy użyciu sterownika, którego kod JavaScript zawiera ograniczenia
Ustaw tę kolejkę wydruku jako domyślną.
Uruchom aplikację testową lub aplikację, która drukuje i rozpocznie scenariusz, który spowoduje wywołanie ograniczeń języka JavaScript. Aplikacja musi wywoływać interfejsy API PrintTicket/PrintCapabilities, aby obejść ograniczenia języka JavaScript. Starsze aplikacje, takie jak Notatnik, nie wywołują tych interfejsów API, ale aplikacja XPS Viewer tak. Firma Microsoft zaleca korzystanie z aplikacji testowej w tym miejscu, ponieważ scenariusze można łatwiej izolować i odtworzyć.
W tej chwili pojawi się okno "Visual Studio Just-In-Time Debugger" z komunikatem "Wystąpił nieobsługiwany wyjątek w <aplikacji>"
Uruchom nowe wystąpienie programu Visual Studio 2012 lub nowszego
Wybierz pozycję Debuguj, a następnie dołącz do procesu
W oknie dialogowym Dołączanie do procesu upewnij się, że opcja Dołącz do: jest ustawiona na kod skryptu
Teraz wybierz aplikację testową lub aplikację do drukowania, a na koniec wybierz Dołącz.
Kliknij "Przerwij wszystko"
Teraz wróć do okna dialogowego "Visual Studio Just-In-Time Debugger" i kliknij przycisk "Nie".
Visual Studio zatrzyma debugger w miejscu wywołanym przez bieżący test. Teraz możesz debugować kod normalnie.
API ograniczeń JavaScript
Ta sekcja określa funkcje, które służą jako punkty wejścia interfejsu API do użycia w pliku ograniczenia języka JavaScript. Są to funkcje:
validatePrintTicket
pełneMożliwościDruku
convertDevModeToPrintTicket
convertPrintTicketToDevMode
funkcja validatePrintTicket
Ten interfejs API jest wywoływany w celu sprawdzenia, czy obiekt PrintTicket jest prawidłowy dla określonej drukarki. Jest to funkcjonalnie analogiczne do interfejsu API IPrintOemPrintTicketProvider::ValidatePrintTicket.
validatePrintTicket składnia syntaktyczna
function validatePrintTicket(printTicket, scriptContext)
Parametry „validatePrintTicket”
biletDruk
[in][out] Obiekt IPrintSchemaTicket, który ma zostać zweryfikowany.
kontekst skryptu
[in] Obiekt IPrinterScriptContext, który zapewnia dostęp do zestawu właściwości sterownika, zestawu właściwości kolejki oraz zestawu właściwości użytkownika.
zwracana wartość z validatePrintTicket
| Wartość zwracana | Opis |
|---|---|
| 0 | Wskazuje, że parametr printTicket był nieprawidłowy i nie można go poprawić. Odpowiednik E_PRINTTICKET_FORMAT. |
| 1 | Wskazuje, że parametr PrintTicket jest prawidłowym PrintTicket dla tej drukarki. Odpowiednik S_PT_NO_CONFLICT. |
| 2 | Wskazuje, że parametr printTicket został zmodyfikowany, aby był prawidłowy. Odpowiednik S_PT_CONFLICT_RESOLVED. |
funkcja completePrintCapabilities
Ten interfejs API jest wywoływany w celu umożliwienia modyfikacji obiektu PrintCapabilities. Powinno to być używane w przypadku funkcji warunkowych (na przykład drukowanie bez obramowania jest obsługiwane tylko na papierze fotograficznym) lub do przedstawiania funkcji, których nie można inaczej wygenerować za pomocą pliku GPD lub PPD (na przykład definicje funkcji zagnieżdżonych). Jest to analogiczne w funkcji do interfejsu API IPrintOemPrintTicketProvider::CompletePrintCapabilities.
pełneMożliwościDrukowania składnia
function completePrintCapabilities(printTicket, scriptContext, printCapabilities)
kompletne możliwości drukowania parametry
biletDruk
[in] Dane wejściowe obiektu IPrintSchemaTicket, aby ograniczyć wygenerowany dokument PrintCapabilities.
kontekst skryptu
[in] Obiekt IPrinterScriptContext, który zapewnia dostęp do zestawu właściwości sterownika, zestawu właściwości kolejki oraz zestawu właściwości użytkownika.
printCapabilities
[in][out] Obiekt IPrintSchemaCapabilities reprezentujący podstawowy obiekt PrintCapabilities wygenerowany przez moduł konfiguracji.
completePrintCapabilities zwraca wartość
Żaden.
Funkcja convertDevModeToPrintTicket
Ten interfejs API służy do przekonwertowania wartości ze zbioru właściwości DEVMODE na PrintTicket. Jest to analogiczne w funkcji do interfejsu API IPrintOemPrintTicketProvider::ConvertDevModeToPrintTicket z tą różnicą, że ta implementacja enkapsuluje prywatną sekcję DEVMODE w obiekcie IPrinterScriptablePropertyBag i nie zezwala na dostęp do publicznej sekcji DEVMODE.
convertDevModeToPrintTicket Składnia
function convertDevModeToPrintTicket(devModeProperties, scriptContext, printTicket)
convertDevModeToPrintTicket parametry
- devModeProperties
[in] Obiekt IPrinterScriptablePropertyBag reprezentujący torbę właściwości DEVMODE.
kontekst skryptu
[in] Obiekt IPrinterScriptContext, który zapewnia dostęp do zestawu właściwości sterownika, zestawu właściwości kolejki oraz zestawu właściwości użytkownika.
biletDruk
[in][out] Obiekt IPrintSchemaTicket reprezentujący printTicket.
convertDevModeToPrintTicket zwracana wartość
Żaden.
convertPrintTicketToDevMode, funkcja
Ten interfejs API jest wywoływany w celu przekonwertowania wartości z modułu PrintTicket do torby właściwości DEVMODE. Jest to analogiczne w funkcji do interfejsu API IPrintOemPrintTicketProvider::ConvertPrintTicketToDevMode, z wyjątkiem tego, że ta implementacja hermetyzuje prywatną sekcję DEVMODE w obiekcie IPrinterScriptablePropertyBag i nie zezwala na dostęp do publicznej sekcji DEVMODE.
convertPrintTicketToDevMode składnia
function convertPrintTicketToDevMode(printTicket, scriptContext, devModeProperties)
Parametry „convertPrintTicketToDevMode”
biletDruk
[in] Obiekt IPrintSchemaTicket reprezentujący obiekt PrintTicket do przekonwertowania.
kontekst skryptu
[in] Obiekt IPrinterScriptContext, który zapewnia dostęp do składnika właściwości sterownika, składnika właściwości kolejki i składnika właściwości użytkownika.
devModeProperties
[in][out] Obiekt IPrinterScriptablePropertyBag reprezentujący bagaż właściwości DEVMODE.
Funkcja convertPrintTicketToDevMode zwraca wartość
Żaden.
Najlepsze rozwiązania dotyczące ograniczeń
Okno dialogowe wydruku systemu Windows 8 i preferencje drukowania obsługują tylko podzbiór przestrzeni nazw słów kluczowych schematu wydruku. W związku z tym firma Microsoft nie zaleca używania ograniczeń między funkcjami obsługiwanymi w oknie dialogowym drukowania systemu Windows 8 lub interfejsem użytkownika preferencji drukowania oraz funkcjami, które nie znajdują się w tym interfejsie użytkownika, ponieważ użytkownicy nie będą mieli możliwości rozwiązania takich ograniczeń.
Jeśli na przykład opcja PageMediaType o nazwie Photo jest ograniczona do pracy tylko z wartością PageResolution 1200dpi, użytkownicy nigdy nie będą mogli wybrać typu Nośnik fotograficzny. W takich przypadkach lepiej jest dopasować intencję użytkownika dotyczącą mediów fotograficznych i dostosować wszelkie niezbędne ustawienia, aby to się udało. Te korekty można wprowadzić w kodzie ograniczeń języka JavaScript.
Jeśli sterownik nie korzysta z ograniczeń języka JavaScript, nie ma konieczności podania pliku. Jeśli sterownik korzysta z ograniczeń języka JavaScript tylko dla podzbioru punktów wejścia (na przykład validatePrintTicket), inne punkty wejścia powinny zostać całkowicie pominięte z pliku JavaScript.