Bagikan melalui


Filter XPS Standar

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 Platform cetak modern dan panduan desain aplikasi dukungan Cetak.

Windows menyediakan dua filter XPS (standar) untuk mendukung konversi bawaan dari XPS ke PCL6 dan PostScript tingkat 3.

Filter yang disediakan Windows tersedia untuk driver kelas cetak dan driver cetak v4 khusus model. Filter XPS ini dapat dikombinasikan dengan Filter Fitur IHV serta filter Pasca-pemrosesan IHV, sesuai kebutuhan untuk memastikan kompatibilitas dengan implementasi firmware yang ada.

Filter XPS yang disediakan Windows tidak dapat didistribusikan ulang, dan tidak tersedia untuk driver cetak v3.

File Manifes

Untuk menggunakan filter XPS yang disediakan Windows, file manifes driver v4 harus menggunakan direktif RequiredFiles di bawah bagian DriverConfig untuk menentukan filter. Ini adalah nama filter:

MSxpsPCL6.dll. Menyediakan konversi dari XPS ke PCL6. MSxpsPS.dll. Menyediakan konversi dari XPS ke PostScript tingkat 3. Tidak ada pembaruan INF yang diperlukan untuk menggunakan salah satu filter ini, dan redistribusi tidak didukung. Sebaiknya pengguna menghentikan penggunaan Filter XPS ini.

Untuk mengonfigurasi alur filter cetak untuk menggunakan filter ini, Anda harus membuat file konfigurasi seperti yang ditunjukkan dalam contoh berikut.

Contoh file konfigurasi yang menentukan konversi ke PCL6.

<?xml version="1.0" encoding="utf-8"?>
<Filters>
  <Filter dll="MSxpsPCL6.dll" clsid="{3821E518-33AF-4d17-92B3-28EB410D46B6}" name="Microsoft XPS to PCL6">
    <Input guid="{4d47a67c-66cc-4430-850e-daf466fe5bc4}" comment="IID_IPrintReadStream" />
    <Output guid="{65bb7f1b-371e-4571-8ac7-912f510c1a38}" comment="IID_IPrintWriteStream" />
  </Filter>  
</Filters>

Contoh file konfigurasi yang menentukan konversi ke PostScript.

<?xml version="1.0" encoding="utf-8"?>
<Filters>
  <Filter dll="MSxpsPS.dll" clsid="{8636D90A-5E03-4d62-9269-E06493C57473}" name="Microsoft XPS to PS">
    <Input guid="{4d47a67c-66cc-4430-850e-daf466fe5bc4}" comment="IID_IPrintReadStream" />
    <Output guid="{65bb7f1b-371e-4571-8ac7-912f510c1a38}" comment="IID_IPrintWriteStream" />
  </Filter>  
</Filters>

Fitur yang Didukung

Filter XPS standar mendukung banyak fitur umum. Semua definisi fitur menggunakan file GPD atau PPD untuk driver. Filter MSxpsPCL6.dll memerlukan penggunaan file GPD untuk konfigurasi, dan filter MSxpsPS.dll memerlukan penggunaan file PPD untuk konfigurasi. Kecuali dinyatakan lain, jika perintah PDL kustom ditentukan untuk fitur, perintah tersebut akan digunakan.

Jika string injeksi ada di bagian tertentu (ditentukan dengan perintah *Pesanan ), maka dalam kasus file GPD, filter akan membuat sejumlah asumsi tentang konten string tersebut, dan akan menghindari pengiriman perintah default. Ini karena mengirim perintah default dalam kasus ini dapat menyebabkan tabrakan perintah. Oleh karena itu pembuat file GPD harus mengikuti panduan berikut:

  • JOB_SETUP. #

    • Header Aliran Biner PCL6 (misalnya: ")<SP>HP-PCL XL;1;<CR><LF>") harus ada.

    • Operator BeginSession harus ada, termasuk semua atribut yang diperlukan.

    • Operator OpenDataSource harus ada, termasuk semua atribut yang diperlukan.

  • PAGE_SETUP. #

    • Operator BeginPage harus ada, termasuk semua atribut yang diperlukan.
  • PAGE_FINISH. #

    • Operator EndPage harus ada.
  • JOB_FINISH. #

    • Operator CloseDataSource harus ada.

    • Operator EndSession harus ada.

    • Operator EndPJLCommands harus ada.

Filter Standar XPS menghasilkan data PDL yang sesuai untuk mengatur asal halaman, berdasarkan perintah *PrintableArea, *PrintableOrigin atau *ImageableArea. Dan untuk menghindari offset tambahan dari asal yang diharapkan, file GPD tidak boleh menentukan perintah =SetPageOrigin apa pun dalam definisi string *Cmd untuk ukuran kertasnya.

Untuk informasi selengkapnya tentang fitur PrintTicket yang didukung oleh filter XPS standar, lihat Fitur PrintTicket yang Didukung.

Mengambil PrintTicket di Filter Pasca-pemrosesan

Dalam model driver v4 yang dirilis dengan Windows 8, ketika Anda menambahkan filter pasca-pemrosesan setelah salah satu filter MSxps, Anda terkadang juga harus menambahkan filter pra-pemrosesan. Menambahkan filter pra-pemrosesan diperlukan untuk mengambil tiket cetak tingkat pekerjaan. Tetapi pendekatan ini pada dasarnya menambahkan filter berbasis model objek, sebelum salah satu filter MSxps berbasis aliran, menghasilkan deserialisasi, dan kemudian serialisasi data cetak untuk hanya mengekstrak PrintTicket.

Dalam Windows 8.1, PrintTicket default pengguna digabungkan dengan PrintTicket tingkat Pekerjaan di filter MSxps, dan PrintTicket yang digabungkan kemudian ditambahkan ke tas properti Alur Filter Cetak. PrintTicket yang digabungkan ditambahkan ke tas properti Alur Filter Cetak dengan cara yang sama seperti PrintTicket Pengguna. Properti diberi nama sebagai berikut:

#define XPS_FP_JOB_LEVEL_PRINTTICKET    "JobPrintTicket"

Selama InitializeFilter, Filter MTI akan menambahkan implementasi IPrintReadStreamFactory ke dalam tas properti. Satu metode antarmuka ini, GetStream, akan memblokir hingga aliran PrintTicket tersedia. Ini menyediakan sarana untuk menyinkronkan akses ke properti.

Penting : Jika GetStream dipanggil dari InitializeFilter, itu akan menyebabkan kebuntuan.

Fitur Lainnya

Dalam kasus fitur PrintTicket yang tidak didukung oleh filter XPS standar, filter akan memeriksa semua anggota PrintTicket untuk melihat apakah mereka dirujuk dalam GPD/PPD, lalu menentukan perintah untuk menjadi output. Jika demikian, perintah yang ditentukan akan dihasilkan.

Fitur GPD dipetakan dalam urutan berikut:

  1. Nilai PrintSchemaKeywordMap ditentukan dan cocok dengan nama fitur PrintTicket.

  2. Atribut PrintSchemaPrivateNamespaceURI ditentukan, dan nama fitur GPD cocok dengan nama fitur PrintTicket. Nama fitur yang cocok tidak mudah, dan mengikuti sejumlah aturan:

    1. Jika bagian *Pesanan dari opsi pertama PAGE_SETUP atau PAGE_FINISH, dan fitur GPD tidak dimulai dengan "Halaman", maka "Halaman" diawali dengan nama fitur GPD sebelum mencoba mencocokkan.

    2. Jika bagian *Pesanan dari opsi pertama DOC_SETUP atau DOC_FINISH, dan Fitur GPD tidak dimulai dengan "Dokumen", maka "Dokumen" diawali dengan nama fitur GPD sebelum mencoba mencocokkan.

    3. Jika bagian *Pesanan dari opsi pertama JOB_SETUP atau JOB_FINISH, dan Fitur GPD tidak dimulai dengan "Pekerjaan", maka "Pekerjaan" diawali dengan nama fitur GPD sebelum mencoba mencocokkan.

    4. Karakter apa pun yang bukan [A-Z], [a-z], [0-9] atau '_' diganti dengan karakter '_' sebelum mencoba mencocokkan. Namun, jika *NoPunctuationCharSubstitute? atribut diatur ke TRUE, maka filter tidak mengganti '.' atau '-' dengan karakter '_'.

Fitur PPD dipetakan dalam urutan berikut:

  1. Nilai PrintSchemaKeywordMap ditentukan dan cocok dengan nama fitur PrintTicket.

  2. Atribut PrintSchemaPrivateNamespaceURI ditentukan, dan nama Fitur PPD cocok dengan nama fitur PrintTicket. Nama fitur yang cocok tidak mudah, dan mengikuti sejumlah aturan:

    1. Jika bagian OrderDependency adalah ExitServer, Prolog, atau JCLSetup, dan nama fitur PPD tidak dimulai dengan "Job", maka "Job" diawali dengan nama fitur PPD sebelum mencoba mencocokkan.

    2. Jika bagian OrderDependency adalah DocumentSetup, dan nama fitur PPD tidak dimulai dengan "Dokumen", maka "Dokumen" ditambahkan ke nama fitur PPD sebelum mencoba mencocokkan.

    3. Jika bagian OrderDependency adalah AnySetup, maka filter melakukan dua pemeriksaan kecocokan:

      1. Jika nama fitur PPD tidak dimulai dengan "Dokumen", maka "Dokumen" ditambahkan ke nama fitur PPD sebelum mencoba mencocokkan.

      2. Jika tidak ada kecocokan yang ditemukan, atau jika nama fitur PPD tidak dimulai dengan "Pekerjaan", maka "Pekerjaan" diawali dengan nama fitur PPD sebelum mencoba mencocokkan.

    4. Jika bagian OrderDependency adalah PageSetup, dan nama fitur PPD tidak dimulai dengan "Halaman", maka "Halaman" ditambahkan ke nama fitur PPD sebelum mencoba mencocokkan.

    5. Karakter apa pun yang bukan [A-Z], [a-z], [0-9] atau '_' diganti dengan karakter '_' sebelum mencoba mencocokkan. Namun, jika *MSNoPunctuationCharSubstitute? String diatur ke TRUE, filter tidak mengganti '.' atau '-' dengan karakter '_'.

Opsi GPD dan PPD dipetakan dalam urutan berikut:

  1. Nilai PrintSchemaKeywordMap ditentukan dan cocok dengan nama opsi PrintTicket.

  2. Atribut PrintSchemaPrivateNamespaceURI ditentukan, dan nama opsi GPD/PPD cocok dengan nama opsi PrintTicket. Nama opsi yang cocok tidak mudah, dan mengikuti sejumlah aturan:

    1. Jika nama opsi GPD/PPD dimulai dengan [0-9] atau '_', maka karakter '_' diawali ke nama opsi GPD/PPD sebelum mencoba mencocokkan. Namun, aturan tambahan berikut berlaku:

      1. Jika ini adalah opsi GPD, dan *NoPunctuationCharSubstitute? atribut diatur ke TRUE, maka filter tidak prepend '_' dengan karakter '_'.

      2. Jika ini adalah opsi PPD, dan *MSNoPunctuationCharSubstitute? string diatur ke TRUE, maka filter tidak prepend '_' dengan karakter '_'.

    2. Karakter apa pun yang bukan [A-Z], [a-z], [0-9] atau '_' diganti dengan karakter '_' sebelum mencoba mencocokkan. Namun, aturan tambahan berikut berlaku:

      1. Jika ini adalah opsi GPD, dan *NoPunctuationCharSubstitute? atribut diatur ke TRUE, maka filter tidak mengganti '.' atau '-' dengan karakter '_'.

      2. Jika ini adalah opsi PPD, dan *MSNoPunctuationCharSubstitute? string diatur ke TRUE, maka filter tidak mengganti '.' atau '-' dengan karakter '_'.

Pemetaan Formulir ke Baki

Filter XPS ke PCL6 dan XPS ke PS mendukung tabel pemetaan formulir ke baki. Jika beberapa baki mendukung ukuran media yang dipilih (misalnya, huruf), filter memutuskan dasi sebagai berikut:

  1. Jika baki default (seperti yang ditentukan dalam file GPD atau PPD) dikonfigurasi untuk menggunakan ukuran media yang ditentukan, maka baki default digunakan.

  2. Jika tidak, filter memilih baki pertama (atas ke bawah seperti yang ditentukan dalam file GPD/PPD) yang dikonfigurasi dengan ukuran media yang ditentukan.

Penekanan Halaman Backside Ekstra

Secara default, filter XPS ke PCL6 dan XPS ke PS menangani pencetakan dupleks dokumen yang berisi ukuran media campuran, jenis media, bin input atau output, dengan menyisipkan halaman kosong. Ketika filter menyisipkan halaman kosong ini, ini memaksa perangkat untuk mencetak halaman berikutnya di bagian depan media baru. Untuk perangkat yang tidak memerlukan halaman backside untuk keluaran, perilaku ini dapat ditekan dengan menambahkan kata kunci berikut ke file GPD atau PPD driver.

Jenis file Kata kunci penekanan halaman backside
GPD *SuppressExtraBacksidePages?: TRUE
PPD *MSSuppressExtraBacksidePages: True

Mengoptimalkan perintah SetPageDevice

Perilaku default perangkat PostScript yang menggunakan driver dengan MSxpsPS.dll adalah bahwa, perintah SetPageDevice dikeluarkan untuk setiap halaman, dan perintah ini menyatakan serangkaian opsi lengkap yang ditentukan untuk halaman tersebut. Perhatikan bahwa beberapa perangkat mungkin tidak berkinerja baik dengan teknik ini.

Namun, jika perangkat Anda menggunakan MSxpsPS.dll dan file PPD yang menyertainya menentukan *MSOptimizeSetPageDevice: True, maka berikut ini adalah perilaku perangkat PostScript: - Untuk setiap halaman di mana ada perubahan di bagian mana pun dari perintah SetPageDevice sejak halaman sebelumnya, perintah SetPageDevice baru dikeluarkan untuk menunjukkan kumpulan opsi yang ditentukan untuk halaman. Tetapi jika belum ada perubahan di bagian mana pun dari perintah SetPageDevice sejak halaman sebelumnya, perintah SetPageDevice tidak dikeluarkan untuk halaman tersebut.

Fitur PrintTicket yang Didukung

Penyajian Pengandar Printer V4