Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Penting
Platform cetak modern adalah sarana komunikasi pilihan Windows dengan printer. Kami menyarankan agar Anda menggunakan driver kelas kotak masuk IPP Microsoft, bersama dengan Print Support Apps (PSA), untuk menyesuaikan pengalaman cetak di Windows 10 dan 11 untuk pengembangan perangkat printer.
Untuk informasi selengkapnya, lihat Panduan Desain Aplikasi Dukungan Cetak v1 dan v2.
Model driver printer v4 mendukung model baru untuk batasan yang diperluas dan penanganan PrintTicket yang berasal dari antarmuka v3 IPrintOemPrintTicketProvider .
Namun, alih-alih menggunakan plug-in konfigurasi yang dikompilasi, driver printer v4 menggunakan JavaScript untuk menerapkan API yang disebut batasan JavaScript, dan driver printer dapat mengimplementasikan satu atau beberapa dari mereka sesuai kebutuhan. Untuk informasi selengkapnya, lihat fungsi di bagian API Batasan JavaScript di akhir topik ini.
Batasan JavaScript dapat digunakan untuk menambah PrintCapabilities, memvalidasi PrintTickets dan menangani konversi PrintTicket ke DEVMODE dan sebaliknya. Namun, batasan JavaScript memiliki beberapa batasan. Berikut ini adalah daftar batasan utama:
Fitur dan opsi yang ditambahkan menggunakan CompletePrintCapabilities, serta batasan yang ditentukan dalam validatePrintTicket tidak ditampilkan di jendela preferensi printer desktop.
Fitur dan opsi yang ditambahkan dalam menggunakan CompletePrintCapabilities tidak bertahan ke DEVMODE publik.
Batasan JavaScript tidak dapat mengakses sumber daya bahasa dari dll sumber daya untuk melokalisasi fitur dan opsi atau parameter yang ditambahkan.
Dengan demikian, kami menyarankan agar batasan JavaScript hanya digunakan jika sesuai. Fitur dan opsi harus ditentukan dalam file GPD atau PPD jika memungkinkan, dan hanya batasan rumit yang harus diwakili dalam JavaScript.
Men-debug file JavaScript
Validasi sinonis dasar file JavaScript didukung dengan membuka file JavaScript di Host Skrip berbasis Windows. Untuk melakukan ini, klik kanan file JavaScript dan pilih Buka Dengan, dan pilih entri Host Skrip berbasis Windows dalam daftar. Jika tidak ada kesalahan yang dilemparkan, maka JavaScript valid secara sintis. Jika tidak, itu akan menunjukkan nomor baris masalah, seperti yang ditunjukkan pada cuplikan layar berikut.
dialog kesalahan sintaks javascript.
Alat validasi JavaScript yang tersedia untuk umum mungkin juga berharga sebagai ajudan dalam mengevaluasi gaya file JavaScript.
Penelusuran kesalahan interaktif dapat diaktifkan dengan membuat kunci registri berikut:
Nama Kunci: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print
Nama Nilai: EnableJavaScriptDebugging
Jenis: DWORD
Nilai: 1
Namun, karena PrintConfig.dll sering dimuat dan dibongkar, penelusuran kesalahan aplikasi yang mencetak bukanlah strategi pengujian/penelusuran kesalahan yang direkomendasikan. Sebagai gantinya, Microsoft merekomendasikan agar produsen membuat aplikasi pengujian yang memanggil setiap titik masuk yang relevan untuk batasan JavaScript menggunakan API publik ini: PTGetPrintCapabilities, PTConvertDevModeToPrintTicket, PTConvertPrintTicketToDevMode, dan PTMergeAndValidatePrintTicket.
Aplikasi pengujian saja cukup untuk mengaktifkan debugging, tetapi juga bermanfaat untuk menambahkan pengujian unit untuk memastikan bahwa seluruh driver menangani PrintTicket, PrintCapabilities dan batasan seperti yang diharapkan. Untuk informasi selengkapnya tentang cara membuat pengujian Unit di Visual Studio, lihat topik berikut:
Panduan Pengujian Unit dengan Pengujian Tim Visual Studio
Setelah kunci registri yang ditampilkan dalam teks sebelumnya dibuat, dan proses hosting telah dimulai ulang, Anda dapat men-debug file sumber JavaScript Anda.
Penting untuk dicatat bahwa jika file sumber gagal diurai, maka debugger tidak dipanggil dan tampaknya lingkungan debug telah gagal. Jika file sumber gagal diurai, lihat Host Skrip Windows untuk informasi selengkapnya tentang cara melanjutkan.
Jika tidak ada kesalahan dan file sumber Anda berhasil diurai, debug file sumber Anda sebagai berikut:
Menginstal Microsoft Visual Studio 2012 atau yang lebih baru pada mesin uji
Membuat antrean cetak menggunakan driver yang memiliki batasan kode JavaScript
Atur antrean cetak ini sebagai default.
Mulai aplikasi pengujian atau aplikasi yang mencetak dan memulai skenario yang akan menyebabkan batasan JavaScript dipanggil. Aplikasi harus memanggil API PrintTicket/PrintCapabilities untuk masuk ke batasan JavaScript; aplikasi lama seperti Notepad tidak memanggil API ini, tetapi aplikasi Penampil XPS tidak. Microsoft merekomendasikan penggunaan aplikasi pengujian di sini, karena skenarionya dapat lebih mudah diisolasi dan direproduseri.
Saat ini, "Visual Studio Just-In-Time Debugger" akan muncul dengan mengatakan "Pengecualian yang tidak tertangani terjadi di <aplikasi> Anda"
Meluncurkan instans baru Visual Studio 2012 atau yang lebih baru
Pilih Debug, lalu Lampirkan Ke Proses
Dalam dialog Lampirkan ke Proses, pastikan bahwa Lampirkan Ke: diatur ke kode Skrip
Sekarang pilih aplikasi pengujian atau pencetakan aplikasi dan akhirnya pilih Lampirkan
Klik "Break All"
Sekarang kembali ke dialog "Debugger Just-In-Time Visual Studio" dan klik "Tidak"
Visual Studio akan masuk ke debugger di lokasi yang dipanggil oleh pengujian saat ini. Anda sekarang dapat men-debug kode secara normal.
API batasan JavaScript
Bagian ini menentukan fungsi yang berfungsi sebagai titik masuk API untuk digunakan dalam file batasan JavaScript. Ini adalah fungsinya:
validatePrintTicket
completePrintCapabilities
convertDevModeToPrintTicket
convertPrintTicketToDevMode
memvalidasi fungsiPrintTicket
API ini dipanggil untuk memvalidasi bahwa objek PrintTicket valid untuk printer tertentu. Ini dianalogikan dalam fungsi ke IPrintOemPrintTicketProvider::ValidatePrintTicket API.
validatePrintTicket sintaksis
function validatePrintTicket(printTicket, scriptContext)
memvalidasi parameterPrintTicket
printTicket
[di] [out] Objek IPrintSchemaTicket yang akan divalidasi.
scriptContext
[di] Objek IPrinterScriptContext yang menyediakan akses ke tas properti driver, tas properti antrean, dan tas properti pengguna.
validatePrintTicket mengembalikan nilai
| Nilai hasil | Deskripsi |
|---|---|
| 0 | Menunjukkan bahwa parameter printTicket tidak valid dan tidak dapat diperbaiki. Setara dengan E_PRINTTICKET_FORMAT. |
| 1 | Menunjukkan bahwa parameter printTicket adalah PrintTicket yang valid untuk printer ini. Setara dengan S_PT_NO_CONFLICT. |
| 2 | Menunjukkan bahwa parameter printTicket dimodifikasi untuk membuatnya valid. Setara dengan S_PT_CONFLICT_RESOLVED. |
fungsi completePrintCapabilities
API ini dipanggil untuk memungkinkan objek PrintCapabilities dimodifikasi. Ini harus digunakan untuk fitur kondisional (misalnya, borderless hanya didukung pada kertas foto) atau untuk mewakili fitur yang tidak dapat dihasilkan oleh file GPD atau PPD (misalnya, definisi fitur berlapis). Ini dianalogikan dalam fungsi ke IPrintOemPrintTicketProvider::CompletePrintCapabilities API.
sintaks completePrintCapabilities
function completePrintCapabilities(printTicket, scriptContext, printCapabilities)
parameter completePrintCapabilities
printTicket
[di] Input objek IPrintSchemaTicket untuk membatasi dokumen PrintCapabilities yang dihasilkan.
scriptContext
[di] Objek IPrinterScriptContext yang menyediakan akses ke tas properti driver, tas properti antrean, dan tas properti pengguna.
printCapabilities
[di] [out] Objek IPrintSchemaCapabilities yang mewakili objek PrintCapabilities dasar yang dihasilkan oleh modul konfigurasi.
nilai pengembalian completePrintCapabilities
Tidak ada.
fungsi convertDevModeToPrintTicket
API ini dipanggil untuk mengonversi nilai dari tas properti DEVMODE menjadi PrintTicket. Ini dianalogikan dalam fungsi ke IPrintOemPrintTicketProvider::ConvertDevModeToPrintTicket API, kecuali bahwa implementasi ini merangkum bagian privat DEVMODE ke dalam objek IPrinterScriptablePropertyBag dan memungkinkan tidak ada akses ke bagian publik DEVMODE.
Sintaks convertDevModeToPrintTicket
function convertDevModeToPrintTicket(devModeProperties, scriptContext, printTicket)
parameter convertDevModeToPrintTicket
- devModeProperties
[di] Objek IPrinterScriptablePropertyBag yang mewakili Tas Properti DEVMODE.
scriptContext
[di] Objek IPrinterScriptContext yang menyediakan akses ke tas properti driver, tas properti antrean, dan tas properti pengguna.
printTicket
[di] [out] Objek IPrintSchemaTicket yang mewakili PrintTicket.
nilai pengembalian convertDevModeToPrintTicket
Tidak ada.
fungsi convertPrintTicketToDevMode
API ini dipanggil untuk mengonversi nilai dari PrintTicket menjadi tas properti DEVMODE. Ini dianalogikan dalam fungsi ke IPrintOemPrintTicketProvider::ConvertPrintTicketToDevMode API, kecuali bahwa implementasi ini merangkum bagian privat DEVMODE ke dalam objek IPrinterScriptablePropertyBag dan memungkinkan tidak ada akses ke bagian publik DEVMODE.
sintaks convertPrintTicketToDevMode
function convertPrintTicketToDevMode(printTicket, scriptContext, devModeProperties)
parameter convertPrintTicketToDevMode
printTicket
[di] Objek IPrintSchemaTicket yang mewakili PrintTicket yang akan dikonversi.
scriptContext
[di] Objek IPrinterScriptContext yang menyediakan akses ke tas properti driver, tas properti antrean, dan tas properti pengguna.
devModeProperties
[di] [out] Objek IPrinterScriptablePropertyBag yang mewakili Tas Properti DEVMODE.
nilai pengembalian convertPrintTicketToDevMode
Tidak ada.
Praktik terbaik batasan
Dialog cetak Windows 8 dan pengalaman preferensi cetak hanya mendukung subset namespace Kata Kunci Skema Cetak. Akibatnya, Microsoft tidak merekomendasikan penggunaan batasan antara fitur yang didukung dalam dialog cetak Windows 8 atau antarmuka pengguna preferensi cetak dan fitur yang tidak ada di UI tersebut, karena pengguna tidak akan memiliki kesempatan untuk mengatasi batasan tersebut.
Misalnya, jika opsi PageMediaType yang disebut Foto dibatasi untuk hanya berfungsi dengan nilai PageResolution 1200dpi, maka pengguna tidak akan pernah dapat memilih jenis media Foto. Dalam kasus seperti ini, lebih baik untuk mencocokkan niat pengguna (Media foto) dan menyesuaikan pengaturan apa pun yang diperlukan untuk membuat ini terjadi. Penyesuaian ini dapat dilakukan dalam kode batasan JavaScript.
Jika driver tidak menggunakan batasan JavaScript, tidak ada persyaratan bahwa file disediakan. Jika driver menggunakan batasan JavaScript hanya untuk subset titik masuk (misalnya, validatePrintTicket), titik masuk lainnya harus sepenuhnya dihilangkan dari file JavaScript.