Übersicht über das DruckenPrinting Overview

Mit Microsoft .NET Framework verfügen Anwendungsentwickler, die Windows Presentation Foundation (WPF) verwenden, über einen umfangreichen neuen Satz von Druck-und drucksystemverwaltungs-APIs.With Microsoft .NET Framework, application developers using Windows Presentation Foundation (WPF) have a rich new set of printing and print system management APIs. Mit Windows VistaWindows Vista stehen einige dieser Erweiterungen des Drucksystems auch Entwicklern zur Verfügung, die Windows FormsWindows Forms-Anwendungen erstellen, sowie Entwicklern, die nicht verwalteten Code verwenden.With Windows VistaWindows Vista, some of these print system enhancements are also available to developers creating Windows FormsWindows Forms applications and developers using unmanaged code. Im Zentrum dieser neuen Funktionen stehen das neue XML Paper Specification (XPS)XML Paper Specification (XPS)-Dateiformat und der XPSXPS-Druckpfad.At the core of this new functionality is the new XML Paper Specification (XPS)XML Paper Specification (XPS) file format and the XPSXPS print path.

Dieses Thema enthält folgende Abschnitte:This topic contains the following sections.

Info über XPSAbout XPS

XPS ist ein elektronisches Dokumentformat, ein spooldateiformat und eine Seitenbeschreibungssprache.XPS is an electronic document format, a spool file format and a page description language. Es handelt sich um ein offenes Dokumentformat XMLXML, das, Open Packaging Conventions (OPC) und andere Industriestandards verwendet, um plattformübergreifende Dokumente zu erstellen.It is an open document format that uses XMLXML, Open Packaging Conventions (OPC), and other industry standards to create cross-platform documents. XPS vereinfacht den Prozess, mit dem digitale Dokumente erstellt, freigegeben, gedruckt, angezeigt und archiviert werden.XPS simplifies the process by which digital documents are created, shared, printed, viewed, and archived. Weitere Informationen zu XPS finden Sie unter XPS-Dokumente.For additional information on XPS, see XPS Documents.

Verschiedene Techniken für das Drucken von XPS-basierten WPFWPF Inhalten mithilfe von sind in Programm gesteuertes Drucken von XPS-Dateiendargestellt.Several techniques for printing XPS-based content using WPFWPF are demonstrated in Programmatically Print XPS Files. Es kann sinnvoll sein, diese Beispiele beim Durcharbeiten der in diesem Thema enthaltenen Inhalte hinzuzuziehen.You may find it useful to reference these samples during review of content contained in this topic. (Entwicklern von nicht verwaltetem Code sollte die Dokumentation für die MXDC_ESCAPE-Funktionangezeigt werden.(Unmanaged code developers should see documentation for the MXDC_ESCAPE function. Windows Forms Entwickler müssen die API im System.Drawing.Printing -Namespace verwenden, der nicht den vollständigen XPSXPS -Druckpfad unterstützt, aber einen Hybriden GDI-zu-XPS-Druckpfad unterstützt.Windows Forms developers must use the API in the System.Drawing.Printing namespace which does not support the full XPSXPS print path, but does support a hybrid GDI-to-XPS print path. Weitere Informationen finden Sie unter Druckpfadarchitektur unten.)See Print Path Architecture below.)

XPS-DruckpfadXPS Print Path

Der XML Paper Specification (XPS)-Druckpfad ist ein neues Windows-Feature, mit dem die Behandlung von Druck Vorgängen in Windows-Anwendungen neu definiert wird.The XML Paper Specification (XPS) print path is a new Windows feature that redefines how printing is handled in Windows applications. Da XPSXPS eine Sprache für die Dokument Darstellung (z. b. RTF), ein druckerspoolerformat (z. b. WMF) und eine Seitenbeschreibungssprache (z. b. PCL oder PostScript) ersetzen kann, behält der neue Druckpfad das XPS-Format von der Anwendungs Veröffentlichung bis zum abschließende Verarbeitung im Druckertreiber oder-Gerät.Because XPSXPS can replace a document presentation language (such as RTF), a print spooler format (such as WMF), and a page description language (such as PCL or Postscript); the new print path maintains the XPS format from application publication to the final processing in the print driver or device.

Der XPS-Druckpfad basiert auf dem XPS-Druckertreiber Modell (XPSDrv), das Entwicklern verschiedene Vorteile bietet, wie „What You See Is What You Get“ (WYSIWYG)"what you see is what you get" (WYSIWYG) z. b. Drucken, verbesserte Farbunterstützung und erheblich verbesserte Druckleistung.The XPS print path is built upon the XPS printer driver model (XPSDrv), which provides several benefits for developers such as „What You See Is What You Get“ (WYSIWYG)"what you see is what you get" (WYSIWYG) printing, improved color support, and significantly improved print performance. (Weitere Informationen zu XPSDrv finden Sie in der Dokumentation zum Windows-Treiberkit.)(For more on XPSDrv, see the Windows Driver Kit documentation.)

Der Vorgang des Druck Spoolers für XPS-Dokumente entspricht im Wesentlichen dem in früheren Versionen von Windows.The operation of the print spooler for XPS documents is essentially the same as in previous versions of Windows. Es wurde jedoch verbessert, um den XPS-Druck Pfad zusätzlich zum vorhandenen GDI-Druckpfad zu unterstützen.However, it has been enhanced to support the XPS print path in addition to the existing GDI print path. Der neue Druckpfad nutzt nativ eine XPS-Spooldatei.The new print path natively consumes an XPS spool file. Obwohl für frühere Versionen von Windows geschriebene Druckertreiber für den Benutzermodus weiterhin funktionieren, ist ein XPS-Druckertreiber (XPSDrv) erforderlich, um den XPS-Druckpfad zu verwenden.While user-mode printer drivers written for previous versions of Windows will continue to work, an XPS printer driver (XPSDrv) is required in order to use the XPS print path.

Die Vorteile des XPS-Druck Pfads sind erheblich und umfassen Folgendes:The benefits of the XPS print path are significant, and include:

  • WYSIWYGWYSIWYG-Druckunterstützungprint support

  • Systemeigene Unterstützung für erweiterte Farbprofile, die auch 32 Bit pro Kanal (bpc), CMYK, benannte Farben, n-Tinten und systemeigene Unterstützung von Transparenz und Farbverläufen einschließen.Native support of advanced color profiles, which include 32 bits per channel (bpc), CMYK, named-colors, n-inks, and native support of transparency and gradients.

  • Verbesserte Druckleistung für .NET Framework und Win32Win32 die basierten Anwendungen.Improved print performance for both .NET Framework and Win32Win32 based applications.

  • Industriestandard-XPS-Format.Industry standard XPS format.

Für einfache Druck Szenarien ist eine einfache und intuitive API mit einem einzelnen Einstiegspunkt für die Benutzeroberfläche, die Konfiguration und die Auftrags Übermittlung verfügbar.For basic print scenarios, a simple and intuitive API is available with a single entry point for user interface, configuration and job submission. Für erweiterte Szenarien steht jetzt zusätzlich Unterstützung für Benutzeroberfläche (User Interface, UI)user interface (UI)-Anpassung (oder Verzicht auf die UIUI), synchronen oder asynchronen Druck und Funktionen zum Druck von Batchaufträgen zur Verfügung.For advanced scenarios, an additional support is added for Benutzeroberfläche (User Interface, UI)user interface (UI) customization (or no UIUI at all), synchronous or asynchronous printing, and batch printing capabilities. Beide Optionen bieten Druckunterstützung mit vollständigen oder eingeschränkten Vertrauensstellungen.Both options provide print support in full or partial trust mode.

XPS wurde mit Erweiterbarkeit konzipiert.XPS was designed with extensibility in mind. Mithilfe des Erweiterbarkeits Frameworks können Features und Funktionen in einer modularen Weise zu XPS hinzugefügt werden.By using the extensibility framework, features and capabilities can be added to XPS in a modular manner. Zu den Erweiterungsfunktionen gehören:Extensibility features include:

  • Druckschema.Print Schema. Das öffentliche Schema wird regelmäßig aktualisiert und ermöglicht die schnelle Erweiterung von Gerätefunktionen.The public schema is updated regularly and enables rapid extension of device capabilities. (Siehe dazu PrintTicket und PrintCapabilities unten.)(See PrintTicket and PrintCapabilities below.)

  • Erweiterbare Filterpipeline.Extensible Filter Pipeline. Die Filter Pipeline des XPS-Druckertreibers (XPSDrv) wurde entwickelt, um das direkte und skalierbare Drucken von XPS-Dokumenten zu ermöglichen.The XPS printer driver (XPSDrv) filter pipeline was designed to enable both direct and scalable printing of XPS documents. Weitere Informationen finden Sie unter XPSDrv-Druckertreiber.For more information, see XPSDrv Printer Drivers.

Zwar unter Win32Win32 stützen sowohl-als auch .NET Framework- Win32Win32 Anwendungen XPS, und Windows Forms Anwendungen verwenden eine GDI-zu-XPS-Konvertierung, um XPS-formatierten Inhalt für den XPS-Druckertreiber (XPSDrv) zu erstellen.While both Win32Win32 and .NET Framework applications support XPS, Win32Win32 and Windows Forms applications use a GDI to XPS conversion in order to create XPS formatted content for the XPS printer driver (XPSDrv). Diese Anwendungen sind nicht erforderlich, um den XPS-Druckpfad zu verwenden, und können den erweiterten Metafile (EMF)-basierten Druck weiterhin verwenden.These applications are not required to use the XPS print path, and can continue to use Enhanced Metafile (EMF) based printing. Die meisten XPS-Features und-Erweiterungen sind jedoch nur für Anwendungen verfügbar, die auf den XPS-Druckpfad abzielen.However, most XPS features and enhancements are only available to applications that target the XPS print path.

Um die Verwendung von XPSDrv-basierten Druckern durch Win32Win32 und Windows Forms-Anwendungen zu ermöglichen, unterstützt der XPS-Druckertreiber (XPSDrv) die Konvertierung von GDI in das XPS-Format.To enable the use of XPSDrv-based printers by Win32Win32 and Windows Forms applications, the XPS printer driver (XPSDrv) supports conversion of GDI to XPS format. Das XPSDrv-Modell bietet auch einen Konverter für das XPS-zu-GDI-Format XPSXPS , Win32Win32 damit Anwendungen Dokumente drucken können.The XPSDrv model also provides a converter for XPS to GDI format so that Win32Win32 applications can print XPSXPS Documents. Bei WPFWPF -Anwendungen erfolgt die Konvertierung von XPS in das GDI-Format automatisch Write durch WriteAsync die-Methode XpsDocumentWriter und die-Methode der-Klasse, wenn die Ziel Druck Warteschlange des Schreibvorgangs keinen XPSDrv-Treiber enthält.For WPFWPF applications, conversion of XPS to GDI format is done automatically by the Write and WriteAsync methods of the XpsDocumentWriter class whenever the target print queue of the write operation does not have an XPSDrv driver. (Windows Forms Anwendungen können keine XPSXPS Dokumente drucken.)(Windows Forms applications cannot print XPSXPS Documents.)

In der folgenden Abbildung ist das Druck Subsystem dargestellt und die von Microsoft bereitgestellten Teile sowie die von Software-und Hardwareanbietern definierten Teile definiert:The following illustration depicts the print subsystem and defines the portions provided by Microsoft, and the portions defined by software and hardware vendors:

Screenshot zeigt das XPS-Drucksystem.

Einfacher XPS-DruckBasic XPS Printing

WPFWPFdefiniert sowohl eine einfache als auch eine erweiterte API.defines both a basic and advanced API. Für Anwendungen, für die keine umfangreiche Druckanpassung oder der vollständige Zugriff auf die vollständige XPS-Funktion erforderlich ist, ist die grundlegende Druckunterstützung verfügbar.For those applications that do not require extensive print customization or access to the complete XPS feature set, basic print support is available. Die einfache Druckunterstützung wird über ein Druckdialogfeld-Steuerelement verfügbar gemacht, das nur minimale Konfiguration erfordert und eine vertraute UIUI bietet.Basic print support is exposed through a print dialog control that requires minimal configuration and features a familiar UIUI. Viele XPS-Features sind mit diesem vereinfachten Druck Modell verfügbar.Many XPS features are available using this simplified print model.

PrintDialogPrintDialog

Das System.Windows.Controls.PrintDialog -Steuerelement stellt einen einzelnen Einstiegs UIUIPunkt für die-,-Konfigurations-und XPS-Auftrags Übermittlung bereit.The System.Windows.Controls.PrintDialog control provides a single entry point for UIUI, configuration, and XPS job submission. Informationen zum Instanziieren und Verwenden des Steuerelements finden Sie unter Aufrufen eines Druckdialogfelds.For information about how to instantiate and use the control, see Invoke a Print Dialog.

Erweiterter XPS-DruckAdvanced XPS Printing

Für den Zugriff auf den vollständigen Satz von XPS-Funktionen muss die erweiterte Druck-API verwendet werden.To access the complete set of XPS features, the advanced print API must be used. Einige relevante APIs werden im folgenden ausführlicher beschrieben.Several relevant API are described in greater detail below. Eine vollständige Liste der XPS-Druckpfad-APIs finden System.Windows.Xps Sie System.Printing unter den-und-Namespace verweisen.For a complete list of XPS print path APIs, see the System.Windows.Xps and System.Printing namespace references.

PrintTicket und PrintCapabilitiesPrintTicket and PrintCapabilities

Die PrintTicket - PrintCapabilities Klasse und die-Klasse sind die Grundlage der erweiterten XPS-Funktionen.The PrintTicket and PrintCapabilities classes are the foundation of the advanced XPS features. Beide Objekttypen sind Strukturen druckorientierter Funktionen, wie etwa Sortierung, doppelseitiger Druck, Heftung usw. im XMLXML-Format. Diese Strukturen sind durch das Druckschema definiert.Both types of objects are XMLXML formatted structures of print-oriented features such as collation, two-sided printing, stapling, etc. These structures are defined by the print schema. Ein PrintTicket weist einen Drucker an, wie ein Druckauftrag verarbeitet werden muss.A PrintTicket instructs a printer how to process a print job. Die PrintCapabilities -Klasse definiert die Fähigkeiten eines Druckers.The PrintCapabilities class defines the capabilities of a printer. Durch Abfragen der Funktionen eines Druckers kann ein PrintTicket erstellt werden, das die von einem Drucker unterstützten Funktionen in vollem Umfang nutzt.By querying the capabilities of a printer, a PrintTicket can be created that takes full advantage of a printer's supported features. Analog dazu können nicht unterstützte Funktionen vermieden werden.Similarly, unsupported features can be avoided.

Im folgenden Beispiel wird das Abfragen der PrintCapabilities eines Druckers und das Erstellen eines PrintTicket mithilfe von Code gezeigt.The following example demonstrates how to query the PrintCapabilities of a printer and create a PrintTicket using code.

// ---------------------- GetPrintTicketFromPrinter -----------------------
/// <summary>
///   Returns a PrintTicket based on the current default printer.</summary>
/// <returns>
///   A PrintTicket for the current local default printer.</returns>
PrintTicket^ GetPrintTicketFromPrinter () 
{
   PrintQueue^ printQueue = nullptr;

   LocalPrintServer^ localPrintServer = gcnew LocalPrintServer();

   // Retrieving collection of local printer on user machine
   PrintQueueCollection^ localPrinterCollection = localPrintServer->GetPrintQueues();

   System::Collections::IEnumerator^ localPrinterEnumerator = localPrinterCollection->GetEnumerator();

   if (localPrinterEnumerator->MoveNext())
   {
      // Get PrintQueue from first available printer
      printQueue = ((PrintQueue^)localPrinterEnumerator->Current);
   } else
   {
      return nullptr;
   }
   // Get default PrintTicket from printer
   PrintTicket^ printTicket = printQueue->DefaultPrintTicket;

   PrintCapabilities^ printCapabilites = printQueue->GetPrintCapabilities();

   // Modify PrintTicket
   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;
   }
   return printTicket;
};// end:GetPrintTicketFromPrinter()
// ---------------------- GetPrintTicketFromPrinter -----------------------
/// <summary>
///   Returns a PrintTicket based on the current default printer.</summary>
/// <returns>
///   A PrintTicket for the current local default printer.</returns>
private PrintTicket GetPrintTicketFromPrinter()
{
    PrintQueue printQueue = null;

    LocalPrintServer localPrintServer = new LocalPrintServer();

    // Retrieving collection of local printer on user machine
    PrintQueueCollection localPrinterCollection =
        localPrintServer.GetPrintQueues();

    System.Collections.IEnumerator localPrinterEnumerator =
        localPrinterCollection.GetEnumerator();

    if (localPrinterEnumerator.MoveNext())
    {
        // Get PrintQueue from first available printer
        printQueue = (PrintQueue)localPrinterEnumerator.Current;
    }
    else
    {
        // No printer exist, return null PrintTicket
        return null;
    }

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

    PrintCapabilities printCapabilites = printQueue.GetPrintCapabilities();

    // Modify PrintTicket
    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;
    }

    return printTicket;
}// end:GetPrintTicketFromPrinter()
' ---------------------- GetPrintTicketFromPrinter -----------------------
''' <summary>
'''   Returns a PrintTicket based on the current default printer.</summary>
''' <returns>
'''   A PrintTicket for the current local default printer.</returns>
Private Function GetPrintTicketFromPrinter() As PrintTicket
    Dim printQueue As PrintQueue = Nothing

    Dim localPrintServer As New LocalPrintServer()

    ' Retrieving collection of local printer on user machine
    Dim localPrinterCollection As PrintQueueCollection = localPrintServer.GetPrintQueues()

    Dim localPrinterEnumerator As System.Collections.IEnumerator = localPrinterCollection.GetEnumerator()

    If localPrinterEnumerator.MoveNext() Then
        ' Get PrintQueue from first available printer
        printQueue = CType(localPrinterEnumerator.Current, PrintQueue)
    Else
        ' No printer exist, return null PrintTicket
        Return Nothing
    End If

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

    Dim printCapabilites As PrintCapabilities = printQueue.GetPrintCapabilities()

    ' Modify PrintTicket
    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

    Return printTicket
End Function ' end:GetPrintTicketFromPrinter()

PrintServer und PrintQueuePrintServer and PrintQueue

Die PrintServer-Klasse stellt einen Netzwerkdruckerserver und die PrintQueue-Klasse einen Drucker mit zugeordneter Auftragswarteschlange dar.The PrintServer class represents a network print server and the PrintQueue class represents a printer and the output job queue associated with it. Diese APIs ermöglichen die Erweiterte Verwaltung der Druckaufträge eines Servers.Together, these APIs allow advanced management of a server's print jobs. Ein PrintServer oder eine davon abgeleitete Klasse wird verwendet, um eine PrintQueue zu verwalten.A PrintServer, or one of its derived classes, is used to manage a PrintQueue. Die AddJob-Methode wird verwendet, um einen neuen Druckauftrag in die Warteschlange einzustellen.The AddJob method is used to insert a new print job into the queue.

Das folgende Beispiel zeigt, wie ein LocalPrintServer erstellt und mithilfe von Code auf seine Standard-PrintQueue zugegriffen wird.The following example demonstrates how to create a LocalPrintServer and access its default PrintQueue by using code.

// -------------------- GetPrintXpsDocumentWriter() -------------------
/// <summary>
///   Returns an XpsDocumentWriter for the default print queue.</summary>
/// <returns>
///   An XpsDocumentWriter for the default print queue.</returns>
private XpsDocumentWriter GetPrintXpsDocumentWriter()
{
    // Create a local print server
    LocalPrintServer ps = new LocalPrintServer();

    // Get the default print queue
    PrintQueue pq = ps.DefaultPrintQueue;

    // Get an XpsDocumentWriter for the default print queue
    XpsDocumentWriter xpsdw = PrintQueue.CreateXpsDocumentWriter(pq);
    return xpsdw;
}// end:GetPrintXpsDocumentWriter()
' -------------------- GetPrintXpsDocumentWriter() -------------------
''' <summary>
'''   Returns an XpsDocumentWriter for the default print queue.</summary>
''' <returns>
'''   An XpsDocumentWriter for the default print queue.</returns>
Private Function GetPrintXpsDocumentWriter() As XpsDocumentWriter
    ' Create a local print server
    Dim ps As New LocalPrintServer()

    ' Get the default print queue
    Dim pq As PrintQueue = ps.DefaultPrintQueue

    ' Get an XpsDocumentWriter for the default print queue
    Dim xpsdw As XpsDocumentWriter = PrintQueue.CreateXpsDocumentWriter(pq)
    Return xpsdw
End Function ' end:GetPrintXpsDocumentWriter()

XpsDocumentWriterXpsDocumentWriter

Ein XpsDocumentWritermit den Write vielen-und- WriteAsync Methoden, mit denen XPS-Dokumente in ein PrintQueuegeschrieben werden.An XpsDocumentWriter, with its many the Write and WriteAsync methods, is used to write XPS documents to a PrintQueue. Beispielsweise wird die Write(FixedPage, PrintTicket) -Methode verwendet, um ein XPS-Dokument PrintTicket und synchron auszugeben.For example, the Write(FixedPage, PrintTicket) method is used to output an XPS document and PrintTicket synchronously. Die WriteAsync(FixedDocument, PrintTicket) -Methode wird verwendet, um ein XPS- PrintTicket Dokument und asynchron auszugeben.The WriteAsync(FixedDocument, PrintTicket) method is used to output an XPS document and PrintTicket asynchronously.

Im folgenden Beispiel wird veranschaulicht, wie ein XpsDocumentWriter mithilfe von Code erstellt wird.The following example demonstrates how to create an XpsDocumentWriter using code.

// -------------------- GetPrintXpsDocumentWriter() -------------------
/// <summary>
///   Returns an XpsDocumentWriter for the default print queue.</summary>
/// <returns>
///   An XpsDocumentWriter for the default print queue.</returns>
private XpsDocumentWriter GetPrintXpsDocumentWriter()
{
    // Create a local print server
    LocalPrintServer ps = new LocalPrintServer();

    // Get the default print queue
    PrintQueue pq = ps.DefaultPrintQueue;

    // Get an XpsDocumentWriter for the default print queue
    XpsDocumentWriter xpsdw = PrintQueue.CreateXpsDocumentWriter(pq);
    return xpsdw;
}// end:GetPrintXpsDocumentWriter()
' -------------------- GetPrintXpsDocumentWriter() -------------------
''' <summary>
'''   Returns an XpsDocumentWriter for the default print queue.</summary>
''' <returns>
'''   An XpsDocumentWriter for the default print queue.</returns>
Private Function GetPrintXpsDocumentWriter() As XpsDocumentWriter
    ' Create a local print server
    Dim ps As New LocalPrintServer()

    ' Get the default print queue
    Dim pq As PrintQueue = ps.DefaultPrintQueue

    ' Get an XpsDocumentWriter for the default print queue
    Dim xpsdw As XpsDocumentWriter = PrintQueue.CreateXpsDocumentWriter(pq)
    Return xpsdw
End Function ' end:GetPrintXpsDocumentWriter()

Die AddJob-Methoden stellen ebenfalls Druckmöglichkeiten bereit.The AddJob methods also provide ways to print. Weitere Informationen finden Sie unter Programmgesteuertes Drucken von XPS-Dateien.See Programmatically Print XPS Files. .for details.

GDI-DruckpfadGDI Print Path

Während WPFWPF Anwendungen den XPS-Druckpfad nativ unter Win32Win32 stützen, können auch Windows Forms Anwendungen einige XPS-Funktionen nutzen.While WPFWPF applications natively support the XPS print path, Win32Win32 and Windows Forms applications can also take advantage of some XPS features. Der XPS-Druckertreiber (XPSDrv) kann eine GDI-basierte Ausgabe in das XPS-Format konvertieren.The XPS printer driver (XPSDrv) can convert GDI based output to XPS format. Für erweiterte Szenarien wird die benutzerdefinierte Konvertierung von Inhalten mithilfe von Microsoft XPS Document Converter (mxdc)unterstützt.For advanced scenarios, custom conversion of content is supported using the Microsoft XPS Document Converter (MXDC). Ebenso können WPFWPF Anwendungen auch an den GDI-Druck Pfad ausgeben, indem Sie eine Write der- WriteAsync oder-Methoden XpsDocumentWriter der-Klasse aufrufen und einen nicht-XPSDrv-Drucker als Ziel Drucker Warteschlange festlegen.Similarly, WPFWPF applications can also output to the GDI print path by calling one of the Write or WriteAsync methods of the XpsDocumentWriter class and designating a non-XpsDrv printer as the target print queue.

Bei Anwendungen, für die keine XPS-Funktionalität oder-Unterstützung erforderlich ist, bleibt der aktuelle GDI-Druckpfad unverändert.For applications that do not require XPS functionality or support, the current GDI print path remains unchanged.

XPSDrv-TreibermodellXPSDrv Driver Model

Der XPS-Druckpfad verbessert die Effizienz des Spoolers durch die Verwendung von XPS als System eigenes druckspoolformat beim Drucken auf einen XPS-fähigen Drucker oder Treiber.The XPS print path improves spooler efficiency by using XPS as the native print spool format when printing to an XPS -enabled printer or driver. Durch den vereinfachten Spoolvorgang entfällt die Notwendigkeit, eine zwischenspooldatei (z. b. eine EMF-Datendatei) zu generieren, bevor das Dokument gespoolert wird.The simplified spooling process eliminates the need to generate an intermediate spool file, such as an EMF data file, before the document is spooled. Durch kleinere Spooldateien kann der XPS-Druckpfad den Netzwerkverkehr verringern und die Druckleistung verbessern.Through smaller spool file sizes, the XPS print path can reduce network traffic and improve print performance.

EMF ist ein geschlossenes Format, das die Anwendungs Ausgabe als eine Reihe von Aufrufen an GDI für Renderingdienste darstellt.EMF is a closed format that represents application output as a series of calls into GDI for rendering services. Anders als EMF stellt das XPS-Spoolformat das tatsächliche Dokument dar, ohne dass eine weitere Interpretation erforderlich ist, wenn es an einen XPS-basierten Druckertreiber (XPSDrv) ausgegeben wird.Unlike EMF, the XPS spool format represents the actual document without requiring further interpretation when output to an XPS-based printer driver (XPSDrv). Die Treiber können direkt mit den Daten im vorliegenden Format arbeiten.The drivers can operate directly on the data in the format. Durch diese Funktion werden die Daten-und Farb Raum Konvertierungen vermieden, die bei der Verwendung von EMF-Dateien und GDI-basierten Druckertreibern erforderlich sind.This capability eliminates the data and color space conversions required when you use EMF files and GDI-based print drivers.

Spooldateigrößen werden normalerweise reduziert, wenn Sie XPS-Dokumente verwenden, die auf einen XPS-Druckertreiber (XPSDrv) abzielen, verglichen mit den EMF-Entsprechungen Allerdings gibt es Ausnahmen:Spool file sizes are usually reduced when you use XPS Documents that target an XPS printer driver (XPSDrv) compared with their EMF equivalents; however, there are exceptions:

  • Eine Vektorgrafik, die sehr komplex ist, viele Ebenen aufweist oder ineffizient geschrieben wurde, kann größer als die Bitmapversion der gleichen Grafik sein.A vector graphic that is very complex, multi-layered, or inefficiently written can be larger than a bitmapped version of the same graphic.

  • Zum Zweck der Anzeige am Bildschirm werden in XPS-Dateien Geräteschriftarten sowie computerbasierte Schriftarten eingebettet, während in GDI-Spooldateien keine Geräteschriftarten eingebettet sind.For screen display purposes, XPS files embed device fonts as well as computer-based fonts; whereas GDI spool files do not embed device fonts. Beide Schriftarten sind jedoch in Teilmengen gegliedert (siehe unten), und Druckertreiber können die Geräteschriftarten vor der Übertragung der Datei an den Drucker entfernen.But both kinds of fonts are subsetted (see below) and printer drivers can remove the device fonts before transmitting the file to the printer.

Die Reduzierung der Spoolgröße erfolgt mithilfe mehrerer Mechanismen:Spool size reduction is performed through several mechanisms:

  • Unterklassen von Schriftarten.Font subsetting. Nur Zeichen, die innerhalb des eigentlichen Dokuments verwendet werden, werden in der XPS-Datei gespeichert.Only characters used within the actual document are stored in the XPS file.

  • Erweiterte Grafikunterstützung.Advanced Graphics Support. Durch die systemeigene Unterstützung von Transparenz und Farbverlaufsprimitiven wird die Rasterung von Inhalten im XPSXPS-Dokument vermieden.Native support for transparency and gradient primitives avoids rasterization of content in the XPSXPS Document.

  • Erkennung gemeinsamer Ressourcen.Identification of common resources. Ressourcen, die mehrfach verwendet werden (wie etwa ein Bild, das ein Firmenlogo darstellt) werden als freigegebene Ressourcen behandelt und nur einmal geladen.Resources that are used multiple times (such as an image that represents a corporate logo) are treated as shared resources and are loaded only once.

  • ZIP-Komprimierung.ZIP compression. Alle XPS-Dokumente verwenden die ZIP-Komprimierung.All XPS documents use ZIP compression.

Siehe auchSee also