Aracılığıyla paylaş


Belgeleri yazdırmaya genel bakış (WPF .NET)

Microsoft .NET ile, Windows Presentation Foundation (WPF) kullanan uygulama geliştiricilerin zengin bir yazdırma ve yazdırma sistemi yönetim API'leri kümesi vardır. Bu işlevin temeli XML Kağıt Belirtimi (XPS) dosya biçimi ve XPS yazdırma yoludur.

XPS hakkında

XPS elektronik belge biçimi, biriktirici dosya biçimi ve sayfa açıklama dilidir. Platformlar arası belgeler oluşturmak için XML, Open Packaging Conventions ve diğer sektör standartlarını kullanan açık bir belge biçimidir. XPS dijital belgelerin oluşturulduğu, paylaşıldığı, yazdırıldığı, görüntülendiği ve arşivlendiği süreci basitleştirir. XPS hakkında daha fazla bilgi için bkz . XPS Belgeleri.

XPS yazdırma yolu

XPS yazdırma yolu, Yazdırmanın Windows uygulamalarında nasıl işleneceğini yeniden tanımlayan bir Windows özelliğidir. XPS yazdırma yolu şunun yerini alabilir:

  • Zengin Metin Biçimi veya Taşınabilir Belge Biçimi gibi belge sunu dilleri.
  • Windows Meta Dosyası veya Gelişmiş Meta Dosyası (EMF) gibi yazdırma biriktiricisi biçimleri.
  • Yazıcı Komut Dili veya PostScript gibi sayfa açıklaması dilleri.

Sonuç olarak, XPS yazdırma yolu, uygulama yayınından yazıcı sürücüsünde veya cihazda son işlemeye kadar XPS biçimini korur.

XPS belgeleri için yazdırma biriktiricisi hem XPS yazdırma yolunu hem de GDI yazdırma yolunu destekler. XPS yazdırma yolu yerel olarak bir XPS biriktirici dosyası tüketir ve bir XPS yazıcı sürücüsü gerektirir. XPS yazdırma yolu, XPS yazıcı sürücüsü (XPSDrv) modelini temel alır.

XPS yazdırma yolunun avantajları şunlardır:

  • WYSIWYG yazdırma desteği.
  • Kanal başına 32 bit, CMYK renk modeli, adlandırılmış renkler, n mürekkepler, saydamlıklar ve gradyanlar gibi gelişmiş renk profillerinin yerel desteği.
  • Geliştirilmiş yazdırma performansı— XPS özellikleri ve geliştirmeleri yalnızca XPS yazdırma yolunu hedefleyen uygulamalar tarafından kullanılabilir.
  • Endüstri standardı XPS biçimi.

Temel yazdırma senaryoları için, yazdırma yapılandırması ve iş gönderimi için standart bir kullanıcı arabirimiyle basit ve sezgisel bir API kullanılabilir. Gelişmiş senaryolar için API, kullanıcı arabirimi özelleştirmesini destekler veya kullanıcı arabirimini hiç desteklemez, zaman uyumlu veya zaman uyumsuz yazdırma ve toplu yazdırma özelliklerini destekler. Hem basit hem de gelişmiş seçenekler, tam veya kısmi güven modlarında yazdırma desteği sağlar.

XPS, genişletilebilirlik göz önünde bulundurularak tasarlanmıştır, bu nedenle özellikler ve özellikler XPS'ye modüler bir şekilde eklenebilir. Genişletilebilirlik özellikleri şunlardır:

  • Cihaz özelliklerinin hızlı uzantısını destekleyen bir yazdırma şeması. Şemanın genel bölümü, istenen cihaz özelliklerini eklemek için düzenli olarak güncelleştirilir. Daha fazla bilgi için bkz . Genişletilebilir mimari.
  • XPSDrv sürücülerinin, XPS belgelerinin hem doğrudan hem de ölçeklenebilir yazdırmasını desteklemek için kullandığı genişletilebilir bir filtre işlem hattı. Daha fazla bilgi için bkz . XPSDrv yazıcı sürücüleri.

WPF uygulamaları XPS yazdırma yolunu yerel olarak destekler ve DOĞRUDAN XPSDrv sürücüsüne yazdırmak için XPS yazdırma API'lerini kullanabilir. Yazma işleminin hedef yazdırma kuyruğu bir XPSDrv sürücüsüne sahip değilse, sınıfın WriteXpsDocumentWriter ve WriteAsync yöntemleri içeriği GDI yazdırma yolu için XPS'den GDI biçimine otomatik olarak dönüştürür.

Aşağıdaki çizim, yazdırma alt sistemini gösterir ve Microsoft ile bağımsız yazılım ve donanım satıcıları tarafından sağlanan bölümleri tanımlar.

Screenshot showing the XPS print system.

Temel XPS yazdırma

WPF'de hem temel hem de gelişmiş yazdırma özelliklerini destekleyen bir yazdırma API'si vardır. Kapsamlı yazdırma özelleştirmesi veya eksiksiz XPS özellik kümesine erişim gerektirmeyen uygulamalar için temel yazdırma desteği yeterli olabilir. Temel yazdırma desteği, minimum yapılandırma gerektiren, tanıdık bir kullanıcı arabirimine sahip olan ve birçok XPS özelliğini destekleyen bir PrintDialog denetimi aracılığıyla sağlanır.

PrintDialog

Denetim kullanıcı System.Windows.Controls.PrintDialog arabirimi, yapılandırma ve XPS iş gönderimi için tek bir giriş noktası sağlar. Denetimin örneğini oluşturmayı ve kullanmayı öğrenmek için bkz . Yazdırma iletişim kutusunu görüntüleme.

Gelişmiş XPS yazdırma

EKSIKSIZ XPS özellikleri kümesine erişmek için gelişmiş yazdırma API'sini kullanın. Bu bölümde PrintTicket, PrintCapabilities, PrintServer, PrintQueue ve XpsDocumentWriter gibi çeşitli ilgili API'ler açıklanmıştır. XPS yazdırma yolu API'lerinin tam listesi için ve System.Printing ad alanlarına bakınSystem.Windows.Xps.

PrintTicket ve PrintCapabilities

PrintTicket ve PrintCapabilities sınıfları, gelişmiş XPS özelliklerinin temelini oluşturur. Her iki nesne de yazdırma şeması tarafından tanımlanan yazdırma odaklı özelliklerin XML biçimli yapılarını içerir. Bu özellikler arasında çift yönlü, harmanlama, iki taraflı yazdırma ve zımbalama yer alır. bir PrintTicket yazıcıya yazdırma işinin nasıl işlendiği hakkında bilgi sağlar. sınıfı bir PrintCapabilities yazıcının özelliklerini tanımlar. Bir yazıcının özelliklerini sorgulayarak, PrintTicket yazıcının desteklenen özelliklerinden tam olarak yararlanan bir oluşturulabilir. Benzer şekilde, desteklenmeyen özellikler önlenebilir.

Aşağıdaki örnek, bir yazıcının sorgularını PrintCapabilities sorgular ve kullanarak kod PrintTicket oluşturur.

/// <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 ve PrintQueue

PrintServer sınıfı bir ağ yazdırma sunucusunu, sınıfı ise bir yazıcıyı PrintQueue ve onunla ilişkilendirilmiş çıkış işi sırasını temsil eder. Bu API'ler birlikte bir sunucu için yazdırma işlerinin gelişmiş yönetimini destekler. bir PrintServeröğesini yönetmek PrintQueueiçin bir veya türetilmiş sınıflarından biri kullanılır.

Aşağıdaki örnek bir LocalPrintServer oluşturur ve yerel bilgisayarın PrintQueueCollection koduna erişir.

/// <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, birçok Write ve WriteAsync yöntemiyle xps belgelerini bir PrintQueueöğesine eklemek için kullanılır. Örneğin yöntemi, Write(FixedDocumentSequence, PrintTicket) bir yazdırma bileti içeren bir XPS belgesini zaman uyumlu bir şekilde kuyruğa eklemek için kullanılır. WriteAsync(FixedDocumentSequence, PrintTicket) yöntemi, yazdırma bileti içeren bir XPS belgesini zaman uyumsuz olarak kuyruğa eklemek için kullanılır.

Aşağıdaki örnek bir XpsDocumentWriter oluşturur ve hem zaman uyumlu hem de zaman uyumsuz xps belgelerini kullanarak koda PrintQueue ekler.

/// <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

GDI yazdırma yolu

WPF uygulamaları XPS yazdırma yolunu yerel olarak desteklese de, sınıfın veya WriteAsync yöntemlerinden XpsDocumentWriter birini Write çağırarak ve XpsDrv olmayan bir yazıcı için yazdırma kuyruğu seçerek GDI yazdırma yoluna da çıkış yapabilir.

XPS işlevselliği veya desteği gerektirmeyen uygulamalar için geçerli GDI yazdırma yolu değişmeden kalır. GDI yazdırma yolu ve çeşitli XPS dönüştürme seçenekleri hakkında daha fazla bilgi için bkz . Microsoft XPS belge dönüştürücüsü (MXDC) ve XPSDrv yazıcı sürücüleri.

XPSDrv sürücü modeli

XPS yazdırma yolu, XPS özellikli bir yazıcıya veya sürücüye yazdırırken yerel yazdırma havuzu biçimi olarak XPS kullanarak biriktirici verimliliğini artırır. Uygulama çıkışını, işleme hizmetleri için GDI'ya çağrı dizisi olarak temsil eden EMF'nin aksine, XPS biriktirici biçimi belgeyi temsil eder. Bu nedenle, XPS biriktiricisi dosyaları XPS tabanlı bir yazıcı sürücüsüne çıktı olduğunda, sürücüler doğrudan bu biçimdeki veriler üzerinde çalıştığından daha fazla yoruma gerek duymazlar. Bu özellik, EMF dosyaları ve GDI tabanlı yazdırma sürücüleri için gereken veri ve renk alanı dönüştürmelerini ortadan kaldırır.

Basitleştirilmiş biriktirme işlemi, belge biriktirilmeden önce EMF veri dosyası gibi bir ara biriktirici dosyası oluşturma gereksinimini ortadan kaldırır. Daha küçük biriktirici dosya boyutlarıyla XPS yazdırma yolu ağ trafiğini azaltabilir ve yazdırma performansını artırabilir. EMF eşdeğerleriyle karşılaştırıldığında, XPS yazdırma yolu kullanılırken XPS biriktirici dosya boyutları genellikle azalır. Biriktirici dosya boyutunu küçültme işlemi çeşitli mekanizmalar aracılığıyla yapılır:

  • Bir belge içinde kullanılan karakterleri yalnızca XPS dosyasında depolayan yazı tipi alt ayarı.
  • XPS içeriğinin rasterleştirilmesini önlemek için saydamlığı ve gradyan temel öğelerini yerel olarak destekleyen gelişmiş grafik desteği.
  • Belgede birden çok kez kullanılan bir şirket logosunun resmi gibi yaygın kaynakların belirlenmesi. Ortak kaynaklar paylaşılan kaynaklar olarak kabul edilir ve yalnızca bir kez yüklenir.
  • Tüm XPS belgelerinde kullanılan ZIP sıkıştırması.

Vektör grafiği son derece karmaşık, çok katmanlı veya verimsiz yazılmışsa XPS biriktirici dosya boyutu azaltılamayabilir. GDI biriktirici dosyalarının aksine, XPS dosyaları ekran görüntüleme amacıyla cihaz yazı tiplerini ve bilgisayar tabanlı yazı tiplerini ekler, ancak her iki tür yazı tipi de alt kümelenir ve yazıcı sürücüleri dosyayı yazıcıya iletmeden önce cihaz yazı tiplerini kaldırabilir.

Bahşiş

Ayrıca, yöntemleri kullanarak PrintQueue.AddJob XPS dosyalarını yazdırabilirsiniz. Daha fazla bilgi için bkz . XPS dosyalarını yazdırma.

Ayrıca bkz.