Bagikan melalui


Gambaran umum dokumen pencetakan (WPF .NET)

Dengan Microsoft .NET, pengembang aplikasi yang menggunakan Windows Presentation Foundation (WPF) memiliki serangkaian API manajemen sistem pencetakan dan pencetakan yang kaya. Inti dari fungsi ini adalah format file Spesifikasi Kertas XML (XPS) dan jalur cetak XPS.

Tentang XPS

XPS adalah format dokumen elektronik, format file penampung, dan bahasa deskripsi halaman. Ini adalah format dokumen terbuka yang menggunakan XML, Konvensi Kemasan Terbuka, dan standar industri lainnya untuk membuat dokumen lintas platform. XPS menyederhanakan proses di mana dokumen digital dibuat, dibagikan, dicetak, dilihat, dan diarsipkan. Untuk informasi selengkapnya tentang XPS, lihat Dokumen XPS.

Jalur cetak XPS

Jalur cetak XPS adalah fitur Windows yang menentukan ulang cara pencetakan ditangani di aplikasi Windows. Jalur cetak XPS dapat menggantikan:

  • Bahasa presentasi dokumen, seperti Format Teks Kaya atau Format Dokumen Portabel.
  • Cetak format penampung, seperti Metafile Windows atau Metafile Yang Ditingkatkan (EMF).
  • Bahasa deskripsi halaman, seperti Bahasa Perintah Printer atau PostScript.

Akibatnya, jalur cetak XPS mempertahankan format XPS dari publikasi aplikasi hingga pemrosesan akhir di driver atau perangkat printer.

Penampung cetak untuk dokumen XPS mendukung jalur cetak XPS dan jalur cetak GDI. Jalur cetak XPS secara asli menggunakan file spool XPS dan memerlukan driver printer XPS. Jalur cetak XPS dibangun pada model driver printer XPS (XPSDrv).

Manfaat jalur cetak XPS meliputi:

  • Dukungan cetak WYSIWYG.
  • Dukungan asli profil warna tingkat lanjut, seperti 32 bit per saluran, model warna CMYK, warna bernama, n-ink, dan transparansi dan gradien.
  • Peningkatan performa cetak—Fitur dan penyempurnaan XPS hanya tersedia untuk aplikasi yang menargetkan jalur cetak XPS.
  • Format XPS standar industri.

Untuk skenario cetak dasar, API sederhana dan intuitif tersedia dengan UI standar untuk konfigurasi cetak dan pengiriman pekerjaan. Untuk skenario lanjutan, API mendukung kustomisasi UI atau tidak ada UI sama sekali, pencetakan sinkron atau asinkron, dan kemampuan pencetakan batch. Opsi sederhana dan tingkat lanjut menyediakan dukungan cetak dalam mode kepercayaan penuh atau parsial.

XPS dirancang dengan anggapan ekstensibilitas, sehingga fitur dan kemampuan dapat ditambahkan ke XPS secara modular. Fitur ekstensibilitas meliputi:

  • Skema cetak yang mendukung ekstensi kemampuan perangkat yang cepat. Bagian publik skema diperbarui secara teratur untuk menambahkan kemampuan perangkat yang diinginkan. Untuk informasi selengkapnya, lihat Arsitektur yang dapat diperluas.
  • Alur filter yang dapat diperluas yang digunakan driver XPSDrv untuk mendukung pencetakan langsung dan terukur dokumen XPS. Untuk informasi selengkapnya, lihat Driver printer XPSDrv.

Aplikasi WPF secara asli mendukung jalur cetak XPS, dan dapat menggunakan API cetak XPS untuk mencetak langsung ke driver XPSDrv. Jika antrean cetak target operasi tulis tidak memiliki driver XPSDrv, maka Write metode XpsDocumentWriter dan WriteAsync kelas akan secara otomatis mengonversi konten dari format XPS ke GDI, untuk jalur cetak GDI.

Ilustrasi berikut menunjukkan subsistem cetak dan menentukan bagian yang disediakan oleh Microsoft dan vendor perangkat lunak dan perangkat keras independen.

Screenshot showing the XPS print system.

Pencetakan XPS dasar

WPF memiliki API pencetakan yang mendukung fitur pencetakan dasar dan tingkat lanjut. Untuk aplikasi yang tidak memerlukan kustomisasi cetak yang luas atau akses ke set fitur XPS lengkap, dukungan cetak dasar mungkin sudah cukup. Dukungan cetak dasar disediakan melalui kontrol PrintDialog yang memerlukan konfigurasi minimal, memiliki UI yang familier, dan mendukung banyak fitur XPS.

PrintDialog

Kontrol ini System.Windows.Controls.PrintDialog menyediakan satu titik masuk untuk pengiriman pekerjaan UI, konfigurasi, dan XPS. Untuk mempelajari cara membuat instans dan menggunakan kontrol, lihat Cara menampilkan dialog cetak.

Pencetakan XPS tingkat lanjut

Untuk mengakses set lengkap fitur XPS, gunakan API pencetakan tingkat lanjut. Beberapa API yang relevan dijelaskan di bagian ini, termasuk PrintTicket, PrintCapabilities, PrintServer, PrintQueue, dan XpsDocumentWriter. Untuk daftar lengkap API jalur cetak XPS, lihat System.Windows.Xps namespace layanan dan System.Printing .

PrintTicket dan PrintCapabilities

Kelas PrintTicket dan PrintCapabilities adalah fondasi fitur XPS tingkat lanjut. Kedua objek berisi struktur berformat XML dari fitur berorientasi cetak yang ditentukan oleh skema cetak. Fitur-fiturnya termasuk dupleksing, kolaterasi, pencetakan dua sisi, dan stapling. Menginstruksikan PrintTicket printer cara memproses pekerjaan cetak. Kelas PrintCapabilities menentukan kemampuan printer. Dengan mengkueri kemampuan printer, PrintTicket dapat dibuat yang memanfaatkan sepenuhnya fitur yang didukung printer. Demikian pula, fitur yang tidak didukung dapat dihindari.

Contoh berikut mengkueri PrintCapabilities printer dan membuat PrintTicket menggunakan kode.

/// <summary>
/// Returns a print ticket, which is a set of instructions telling a printer how
/// to set its various features, such as duplexing, collating, and stapling.
/// </summary>
/// <param name="printQueue">The print queue to print to.</param>
/// <returns>A print ticket.</returns>
public static PrintTicket GetPrintTicket(PrintQueue printQueue)
{
    PrintCapabilities printCapabilites = printQueue.GetPrintCapabilities();

    // Get a default print ticket from printer.
    PrintTicket printTicket = printQueue.DefaultPrintTicket;

    // Modify the print ticket.
    if (printCapabilites.CollationCapability.Contains(Collation.Collated))
        printTicket.Collation = Collation.Collated;
    if (printCapabilites.DuplexingCapability.Contains(Duplexing.TwoSidedLongEdge))
        printTicket.Duplexing = Duplexing.TwoSidedLongEdge;
    if (printCapabilites.StaplingCapability.Contains(Stapling.StapleDualLeft))
        printTicket.Stapling = Stapling.StapleDualLeft;

    // Returns a print ticket, which is a set of instructions telling a printer how
    // to set its various features, such as duplexing, collating, and stapling.
    return printTicket;
}
''' <summary>
''' Returns a print ticket, which is a set of instructions telling a printer how
''' to set its various features, such as duplexing, collating, and stapling.
''' </summary>
''' <param name="printQueue">The print queue to print to.</param>
''' <returns>A print ticket.</returns>
Public Shared Function GetPrintTicket(printQueue As PrintQueue) As PrintTicket

    Dim printCapabilites As PrintCapabilities = printQueue.GetPrintCapabilities()

    ' Get a default print ticket from printer.
    Dim printTicket As PrintTicket = printQueue.DefaultPrintTicket

    ' Modify the print ticket.
    If printCapabilites.CollationCapability.Contains(Collation.Collated) Then
        printTicket.Collation = Collation.Collated
    End If
    If printCapabilites.DuplexingCapability.Contains(Duplexing.TwoSidedLongEdge) Then
        printTicket.Duplexing = Duplexing.TwoSidedLongEdge
    End If
    If printCapabilites.StaplingCapability.Contains(Stapling.StapleDualLeft) Then
        printTicket.Stapling = Stapling.StapleDualLeft
    End If

    ' Returns a print ticket, which is a set of instructions telling a printer how
    ' to set its various features, such as duplexing, collating, and stapling.
    Return printTicket

End Function

PrintServer dan PrintQueue

Kelas PrintServer mewakili server cetak jaringan, dan PrintQueue kelas mewakili printer dan antrean pekerjaan output yang terkait dengannya. Bersama-sama, API ini mendukung manajemen lanjutan pekerjaan cetak untuk server. , PrintServeratau salah satu kelas turunannya, digunakan untuk mengelola PrintQueue.

Contoh berikut membuat LocalPrintServer dan mengakses komputer PrintQueueCollection lokal menggunakan kode.

/// <summary>
/// Return a collection of print queues, which individually hold the features or states
/// of a printer as well as common properties for all print queues.
/// </summary>
/// <returns>A collection of print queues.</returns>
public static PrintQueueCollection GetPrintQueues()
{
    // Create a LocalPrintServer instance, which represents 
    // the print server for the local computer.
    LocalPrintServer localPrintServer = new();

    // Get the default print queue on the local computer.
    //PrintQueue printQueue = localPrintServer.DefaultPrintQueue;

    // Get all print queues on the local computer.
    PrintQueueCollection printQueueCollection = localPrintServer.GetPrintQueues();

    // Return a collection of print queues, which individually hold the features or states
    // of a printer as well as common properties for all print queues.
    return printQueueCollection;
}
''' <summary>
''' Return a collection of print queues, which individually hold the features or states
''' of a printer as well as common properties for all print queues.
''' </summary>
''' <returns>A collection of print queues.</returns>
Public Shared Function GetPrintQueues() As PrintQueueCollection

    ' Create a LocalPrintServer instance, which represents 
    ' the print server for the local computer.
    Dim localPrintServer As LocalPrintServer = New LocalPrintServer()

    ' Get the default print queue on the local computer.
    'Dim  printQueue As PrintQueue = localPrintServer.DefaultPrintQueue

    ' Get all print queues on the local computer.
    Dim printQueueCollection As PrintQueueCollection = localPrintServer.GetPrintQueues()

    ' Return a collection of print queues, which individually hold the features or states
    ' of a printer as well as common properties for all print queues.
    Return printQueueCollection

End Function

XpsDocumentWriter

XpsDocumentWriter, dengan banyak Write metode dan WriteAsync , digunakan untuk menambahkan dokumen XPS ke PrintQueue. Misalnya, Write(FixedDocumentSequence, PrintTicket) metode ini digunakan untuk menambahkan dokumen XPS secara sinkron dengan tiket cetak ke antrean. Metode WriteAsync(FixedDocumentSequence, PrintTicket) ini digunakan untuk menambahkan dokumen XPS secara asinkron dengan tiket cetak ke antrean.

Contoh berikut membuat XpsDocumentWriter dan menambahkan dokumen XPS, baik secara sinkron maupun asinkron, ke PrintQueue menggunakan kode.

/// <summary>
/// Asynchronously, add the XPS document together with a print ticket to the print queue.
/// </summary>
/// <param name="xpsFilePath">Path to source XPS file.</param>
/// <param name="printQueue">The print queue to print to.</param>
/// <param name="printTicket">The print ticket for the selected print queue.</param>
public static void PrintXpsDocumentAsync(string xpsFilePath, PrintQueue printQueue, PrintTicket printTicket)
{
    // Create an XpsDocumentWriter object for the print queue.
    XpsDocumentWriter xpsDocumentWriter = PrintQueue.CreateXpsDocumentWriter(printQueue);

    // Open the selected document.
    XpsDocument xpsDocument = new(xpsFilePath, FileAccess.Read);

    // Get a fixed document sequence for the selected document.
    FixedDocumentSequence fixedDocSeq = xpsDocument.GetFixedDocumentSequence();

    // Asynchronously, add the XPS document together with a print ticket to the print queue.
    xpsDocumentWriter.WriteAsync(fixedDocSeq, printTicket);
}

/// <summary>
/// Synchronously, add the XPS document together with a print ticket to the print queue.
/// </summary>
/// <param name="xpsFilePath">Path to source XPS file.</param>
/// <param name="printQueue">The print queue to print to.</param>
/// <param name="printTicket">The print ticket for the selected print queue.</param>
public static void PrintXpsDocument(string xpsFilePath, PrintQueue printQueue, PrintTicket printTicket)
{
    // Create an XpsDocumentWriter object for the print queue.
    XpsDocumentWriter xpsDocumentWriter = PrintQueue.CreateXpsDocumentWriter(printQueue);

    // Open the selected document.
    XpsDocument xpsDocument = new(xpsFilePath, FileAccess.Read);

    // Get a fixed document sequence for the selected document.
    FixedDocumentSequence fixedDocSeq = xpsDocument.GetFixedDocumentSequence();

    // Synchronously, add the XPS document together with a print ticket to the print queue.
    xpsDocumentWriter.Write(fixedDocSeq, printTicket);
}
''' <summary>
''' Asynchronously, add the XPS document together with a print ticket to the print queue.
''' </summary>
''' <param name="xpsFilePath">Path to source XPS file.</param>
''' <param name="printQueue">The print queue to print to.</param>
''' <param name="printTicket">The print ticket for the selected print queue.</param>
Public Shared Sub PrintXpsDocumentAsync(xpsFilePath As String, printQueue As PrintQueue, printTicket As PrintTicket)

    ' Create an XpsDocumentWriter object for the print queue.
    Dim xpsDocumentWriter As XpsDocumentWriter = PrintQueue.CreateXpsDocumentWriter(printQueue)

    ' Open the selected document.
    Dim xpsDocument As XpsDocument = New XpsDocument(xpsFilePath, FileAccess.Read)

    ' Get a fixed document sequence for the selected document.
    Dim fixedDocSeq As FixedDocumentSequence = xpsDocument.GetFixedDocumentSequence()

    ' Asynchronously, add the XPS document together with a print ticket to the print queue.
    xpsDocumentWriter.WriteAsync(fixedDocSeq, printTicket)

End Sub

''' <summary>
''' Synchronously, add the XPS document together with a print ticket to the print queue.
''' </summary>
''' <param name="xpsFilePath">Path to source XPS file.</param>
''' <param name="printQueue">The print queue to print to.</param>
''' <param name="printTicket">The print ticket for the selected print queue.</param>
Public Shared Sub PrintXpsDocument(xpsFilePath As String, printQueue As PrintQueue, printTicket As PrintTicket)

    ' Create an XpsDocumentWriter object for the print queue.
    Dim xpsDocumentWriter As XpsDocumentWriter = PrintQueue.CreateXpsDocumentWriter(printQueue)

    ' Open the selected document.
    Dim xpsDocument As XpsDocument = New XpsDocument(xpsFilePath, FileAccess.Read)

    ' Get a fixed document sequence for the selected document.
    Dim fixedDocSeq As FixedDocumentSequence = xpsDocument.GetFixedDocumentSequence()

    ' Synchronously, add the XPS document together with a print ticket to the print queue.
    xpsDocumentWriter.Write(fixedDocSeq, printTicket)

End Sub

Jalur cetak GDI

Meskipun aplikasi WPF secara asli mendukung jalur cetak XPS, aplikasi juga dapat menghasilkan jalur cetak GDI dengan memanggil salah Write satu metode XpsDocumentWriter atau WriteAsync kelas dan memilih antrean cetak untuk printer non-XpsDrv.

Untuk aplikasi yang tidak memerlukan fungsionalitas atau dukungan XPS, jalur cetak GDI saat ini tetap tidak berubah. Untuk informasi selengkapnya tentang jalur cetak GDI dan berbagai opsi konversi XPS, lihat pengonversi dokumen Microsoft XPS (MXDC) dan driver printer XPSDrv.

Model driver XPSDrv

Jalur cetak XPS meningkatkan efisiensi penampung dengan menggunakan XPS sebagai format spool cetak asli saat mencetak ke printer atau driver berkemampuan XPS. Tidak seperti EMF, yang mewakili output aplikasi sebagai serangkaian panggilan ke GDI untuk layanan penyajian, format spool XPS mewakili dokumen. Jadi, ketika file penampung XPS dihasilkan ke driver printer berbasis XPS, file tersebut tidak memerlukan interpretasi lebih lanjut karena driver beroperasi langsung pada data dalam format tersebut. Kemampuan ini menghilangkan konversi data dan ruang warna yang diperlukan untuk file EMF dan driver cetak berbasis GDI.

Proses penampungan yang disederhanakan menghilangkan kebutuhan untuk menghasilkan file penampung menengah, seperti file data EMF, sebelum dokumen ditampung. Dengan ukuran file spool yang lebih kecil, jalur cetak XPS dapat mengurangi lalu lintas jaringan dan meningkatkan performa cetak. Dibandingkan dengan ekuivalen EMF mereka, ukuran file spool XPS biasanya berkurang saat menggunakan jalur cetak XPS. Pengurangan ukuran file spool dilakukan melalui beberapa mekanisme:

  • Subset font, yang hanya menyimpan karakter yang digunakan dalam dokumen dalam file XPS.
  • Dukungan grafis tingkat lanjut, yang secara asli mendukung transparansi dan primitif gradien untuk menghindari rasterisasi konten XPS.
  • Identifikasi sumber daya umum, seperti gambar logo perusahaan yang digunakan beberapa kali dalam dokumen. Sumber daya umum diperlakukan sebagai sumber daya bersama dan hanya dimuat sekali.
  • Pemadatan ZIP, yang digunakan pada semua dokumen XPS.

Ukuran file penampung XPS mungkin tidak berkurang jika grafik vektor sangat kompleks, multilapis, atau ditulis secara tidak efisien. Tidak seperti file penampung GDI, file XPS menyematkan font perangkat dan font berbasis komputer untuk tujuan tampilan layar, meskipun kedua jenis font disubset dan driver printer dapat menghapus font perangkat sebelum mengirimkan file ke printer.

Tip

Anda juga dapat mencetak file XPS dengan menggunakan PrintQueue.AddJob metode . Untuk informasi selengkapnya, lihat Cara mencetak file XPS.

Baca juga