Bagikan melalui


Merender tugas cetak

Penting

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.

Tugas cetak dirender saat dibuat, atau ditulis ke file penampung sebagai rekaman EMF. Dalam kasus rekaman EMF, penyajian terjadi ketika prosesor cetak EMF (localspl.dll) memutar kembali rekaman. Penyajian terdiri dari serangkaian panggilan ke fungsi gambar GDI mode pengguna, dimulai dengan CreateDC. Panggilan ke CreateDC adalah yang pertama dalam serangkaian panggilan aplikasi yang mengarah pada rantai tindakan yang melibatkan mesin penyajian grafis (GRE, juga dikenal sebagai GDI mode kernel), dan DLL grafis printer.

Gambar berikut menunjukkan interaksi antara GDI mode kernel dan DLL grafis printer setelah CreateDC dipanggil.

diagram yang mengilustrasikan interaksi antara gdi mode kernel dan dll grafis printer setelah dibuat dipanggil.

  1. Ketika aplikasi memanggil fungsi CreateDC untuk membuat konteks perangkat printer, GDI memeriksa untuk melihat apakah DLL grafis printer yang sesuai dimuat. Jika tidak, GDI memuat DLL dan memanggil fungsi DrvEnableDriver di DLL. Fungsi ini tidak dipanggil lagi kecuali driver dimuat ulang.

  2. Selanjutnya, GDI memanggil fungsi DrvEnablePDEV grafis printer DLL sehingga driver dapat membuat instans perangkat fisik dan mengembalikan karakteristik perangkat. GDI menggunakan informasi yang dikembalikan untuk membuat deskripsi internal instans perangkat.

  3. GDI kemudian memanggil fungsi DrvCompletePDEV DLL grafis untuk menyediakan handel GDI ke instans perangkat. DLL grafis harus menggunakan handel ini sebagai input ke beberapa panggilan balik berawalan Eng yang disediakan oleh mesin gambar GDI (lihat Layanan Dukungan GDI).

  4. Setelah GDI menerima handel instans perangkat, GDI kemudian melakukan panggilan ke fungsi DrvEnableSurface DLL grafis, yang mengatur permukaan untuk menggambar, dan mengaitkannya dengan instans perangkat fisik.

  5. Driver dapat membuat permukaan gambar untuk instans perangkat dengan memanggil EngCreateBitmap. Atau, jika permukaan gambar dikelola perangkat, driver dapat memanggil EngCreateDeviceSurface.

  6. Jika EngCreateBitmap tidak dapat menyediakan bitmap yang cukup besar untuk berisi seluruh halaman fisik, dan jika driver mendukung pita halaman, EngMarkBandingSurface dapat dipanggil untuk memberi tahu GDI bahwa banding akan digunakan.

  7. Akhirnya, EngAssociateSurface harus dipanggil untuk memungkinkan GDI mengaitkan permukaan yang dibuat dengan instans perangkat tertentu, dan untuk memberi tahu GDI fungsi gambar DDI grafis yang disediakan driver mana (jika ada) yang harus dipanggil ketika menarik permukaan khusus ini.

Pada titik ini, permukaan gambar telah dibuat dan penyajian dapat dimulai. Fungsi yang dipanggil GDI bergantung pada apakah pita berlaku.

Pemalsutan yang digunakan

Agar setiap dokumen dirender saat pita digunakan, GDI memanggil fungsi berikut dalam DLL grafik printer:

DrvStartDoc

Untuk setiap halaman fisik

DrvStartPage

DrvStartBanding

Untuk setiap lulus banding pada halaman fisik

DrvQueryPerBandInfo

Operasi penyajian

DrvNextBand // Kirim data raster untuk band ini, lalu bersihkan permukaan untuk digunakan kembali dengan band berikutnya

DrvEndDoc

Pita tidak digunakan

Agar setiap dokumen dirender saat pita tidak digunakan, GDI memanggil fungsi berikut dalam DLL grafik printer:

DrvStartDoc

Untuk setiap halaman fisik

DrvStartPage

Operasi penyajian

DrvSendPage // Kirim data raster untuk halaman

DrvEndDoc

Dengan pengecualian DrvQueryPerBandInfo, fungsi-fungsi ini dimaksudkan untuk memungkinkan DLL grafis printer mengirim urutan kontrol ke perangkat keras printer (dengan memanggil EngWritePrinter), dan untuk melakukan operasi internal apa pun yang diperlukan untuk menginisialisasi atau menyelesaikan pemrosesan dokumen, halaman, atau pita.

DLL grafis printer bertanggung jawab untuk mengirim gambar yang dirender (yaitu, isi permukaan gambar) ke printer pada waktu yang tepat (dengan memanggil EngWritePrinter), sebagai berikut:

  • Untuk permukaan bitmap yang dikelola GDI atau dikelola perangkat

    Permukaan gambar adalah bitmap yang disediakan GDI atau yang disediakan driver. DLL grafis printer mungkin mengaitkan beberapa fungsi gambar (lihat Negosiasi permukaan). Jika pemetaan halaman sedang digunakan, fungsi DrvNextBand harus mengirim konten permukaan gambar. Jika pita tidak digunakan, fungsi DrvSendPage harus mengirim konten permukaan gambar.

  • Untuk permukaan vektor yang dikelola perangkat

    Permukaan gambar ada di dalam perangkat. DLL grafis printer menghubungkan semua fungsi gambar (lihat Surface Negotiation), dan fungsi-fungsi ini mengirim data gambar ke printer selama operasi penyajian. Pita halaman tidak digunakan.

Jika Anda mengantisipasi bahwa setiap fungsi DDI grafis yang disediakan oleh DLL grafis printer berpotensi membutuhkan waktu lebih dari lima detik untuk dieksekusi, Anda harus menyertakan kode yang memanggil EngCheckAbort setidaknya setiap lima detik untuk melihat apakah pekerjaan cetak harus dihentikan.

Setelah GDI memanggil DrvEndDoc untuk menunjukkan bahwa dokumen telah dirender sepenuhnya, dokumen memanggil DrvDisableSurface. Jika DrvEnableSurface disebut EngCreateBitmap, maka DrvDisableSurface harus memanggil EngDeleteSurface.

GDI memanggil fungsi DrvDisablePDEV grafik printer DLL saat aplikasi memanggil DeleteDC.

Jika aplikasi memanggil fungsi ResetDC selama pencetakan dokumen, GDI membuat konteks perangkat baru dan memanggil fungsi DrvEnablePDEV grafis printer DLL untuk konteks baru. Kemudian GDI memanggil fungsi DrvResetPDEV , sehingga DLL grafis dapat memperbarui konteks baru dengan informasi dari yang lama. Selanjutnya, DrvDisableSurface dan DrvDisablePDEV dipanggil untuk konteks lama, diikuti oleh DrvEnableSurface untuk konteks baru. Terakhir, GDI memanggil DrvStartDoc dan merender dilanjutkan di halaman baru.

GDI memanggil DrvDisableDriver sebelum membongkar DLL grafis printer.

Jika perangkat keras printer mendukung operasi menggambar yang tidak didukung oleh fungsi gambar GDI, DLL grafis printer dapat menyediakan fungsi DrvDrawEscape .

DLL grafis printer dapat menyediakan fungsi DrvEscape jika perlu untuk mendukung operasi menggambar atau non-penggalian yang tidak tersedia melalui fungsi GDI. Misalnya, driver printer Microsoft PostScript menggunakan escape untuk mendukung titik injeksi PostScript. Atau, aplikasi mungkin perlu mendapatkan nomor telepon mesin faks. Fungsi DrvEscape juga digunakan untuk menunjukkan operasi yang didukung oleh fungsi DrvDrawEscape .