Ü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 Vista stehen einige dieser Drucksystemerweiterungen auch Entwicklern zur Verfügung, die Windows Forms-Anwendungen erstellen, und Entwicklern, die nicht verwalteten Code verwenden.With Windows Vista, some of these print system enhancements are also available to developers creating Windows Forms applications and developers using unmanaged code. Kernstück dieser neuen Funktionalität ist das neue XML Paper Specification (XPS)-Dateiformat und der XPS-Druckpfad.At the core of this new functionality is the new XML Paper Specification (XPS) file format and the XPS print path.

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

Info über XPSAbout XPS

XPS ist ein elektronisches Dokumentformat, ein Spool-Dateiformat und eine Seitenbeschreibungssprache.XPS is an electronic document format, a spool file format and a page description language. Es ist ein offenes Dokumentformat, das XML, Open Packaging Conventions (OPC) und andere Industriestandards verwendet, um plattformübergreifende Dokumente zu erstellen.It is an open document format that uses XML, 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.

In Programmatisch druckenvon XPS-Dateienwerden verschiedene Techniken zum Drucken von XPS-basierten Inhalten mithilfe von WPF demonstriert.Several techniques for printing XPS-based content using WPF 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. (Nicht verwalteter Code sollten die Dokumentation für die MXDC_ESCAPE-Funktionsehen.(Unmanaged code developers should see documentation for the MXDC_ESCAPE function. Windows Forms-Entwickler müssen die System.Drawing.Printing API im Namespace verwenden, die nicht den vollständigen XPS-Druckpfad unterstützt, aber einen Hybrid-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 XPS 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 eine neue Windows-Funktion, die neu definiert, wie das Drucken in Windows-Anwendungen behandelt wird.The XML Paper Specification (XPS) print path is a new Windows feature that redefines how printing is handled in Windows applications. Da XPS eine Dokumentpräsentationssprache (z. B. RTF), ein Druckspoolerformat (z. B. WMF) und eine Seitenbeschreibungssprache (z. B. PCL oder Postscript) ersetzen kann; Der neue Druckpfad behält das XPS-Format von der Anwendungspublikation bis zur endgültigen Verarbeitung im Druckertreiber oder Gerät bei.Because XPS 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-Druckertreibermodell (XPSDrv), das Entwicklern mehrere Vorteile bietet, wie z. B. WYSIWYG (WYSIWYG) (WYSIWYG), verbesserte Farbunterstützung und deutlich 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) printing, improved color support, and significantly improved print performance. (Weitere Informationen zu XPSDrv finden Sie in der Dokumentation zum Windows Driver Kit.)(For more on XPSDrv, see the Windows Driver Kit documentation.)

Der Betrieb des Druckspoolers für XPS-Dokumente ist im Wesentlichen derselbe wie in früheren Windows-Versionen.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-Druckpfad 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 verbraucht nativ eine XPS-Spooldatei.The new print path natively consumes an XPS spool file. Während Druckertreiber im Benutzermodus, die für frühere Windows-Versionen geschrieben wurden, 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-Druckpfads sind erheblich und umfassen:The benefits of the XPS print path are significant, and include:

  • WYSIWYG-DruckunterstützungWYSIWYG print 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 Win32-basierte Anwendungen.Improved print performance for both .NET Framework and Win32 based applications.

  • Industriestandard XPS-Format.Industry standard XPS format.

Für grundlegende Druckszenarien steht eine einfache und intuitive API mit einem einzigen Einstiegspunkt für Benutzeroberfläche, Konfiguration und Auftragsübermittlung zur Verfügung.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 unter Berücksichtigung der Erweiterbarkeit entwickelt.XPS was designed with extensibility in mind. Durch die Verwendung des Erweiterbarkeitsframeworks können XPS Funktionen und Funktionen modular 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 XPS-Filterpipeline (XPSDrv) wurde entwickelt, um sowohl das direkte als auch 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.

Während sowohl Win32- als auch .NET Framework-Anwendungen XPS unterstützen, verwenden Win32- und Windows Forms-Anwendungen eine GDI-in-XPS-Konvertierung, um XPS-formatierte Inhalte für den XPS-Druckertreiber (XPSDrv) zu erstellen.While both Win32 and .NET Framework applications support XPS, Win32 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 müssen den XPS-Druckpfad nicht verwenden und können weiterhin AUF EMF-basiertem Drucken (Enhanced Metafile) drucken.These applications are not required to use the XPS print path, and can continue to use Enhanced Metafile (EMF) based printing. Die meisten XPS-Funktionen 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 Win32- 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 Win32 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, damit Win32-Anwendungen XPS-Dokumente drucken können.The XPSDrv model also provides a converter for XPS to GDI format so that Win32 applications can print XPS Documents. Bei WPF-Anwendungen erfolgt die Konvertierung des XPS-Formats WriteAsync in XpsDocumentWriter das GDI-Format automatisch durch die Write und Methoden der Klasse, wenn die Zieldruckwarteschlange des Schreibvorgangs nicht über einen XPSDrv-Treiber verfügt.For WPF 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 XPS-Dokumente nicht drucken.)(Windows Forms applications cannot print XPS Documents.)

Die folgende Abbildung zeigt das Drucksubsystem und definiert die von Microsoft bereitgestellten Teile sowie die von Software- und Hardwareherstellern definierten Teile: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

WPF definiert sowohl eine grundlegende als auch eine erweiterte API.WPF defines both a basic and advanced API. Für Anwendungen, die keine umfassende Druckanpassung oder keinen Zugriff auf den vollständigen XPS-Funktionssatz erfordern, ist 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-Funktionen sind mit diesem vereinfachten Druckmodell verfügbar.Many XPS features are available using this simplified print model.

PrintDialogPrintDialog

Das System.Windows.Controls.PrintDialog Steuerelement stellt einen UIUIeinzelnen Einstiegspunkt für die Konfiguration und die 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

Um auf den vollständigen Satz von XPS-Funktionen zugreifen zu können, muss die erweiterte Druck-API verwendet werden.To access the complete set of XPS features, the advanced print API must be used. Im Folgenden werden mehrere relevante APIs ausführlicher beschrieben.Several relevant API are described in greater detail below. Eine vollständige Liste der XPS-Druckpfad-APIs finden Sie unter die System.Windows.Xps und System.Printing Namespace-Referenzen.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 und Klassen sind die Grundlage der erweiterten XPS-Funktionen.The PrintTicket and PrintCapabilities classes are the foundation of the advanced XPS features. Beide Objekttypen sind XML-formatierte Strukturen druckorientierter Features wie Sortierung, beidseitiges Drucken, Heften usw. Diese Strukturen werden durch das Druckschema definiert.Both types of objects are XML 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. Zusammen ermöglichen diese APIs eine 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

Eine XpsDocumentWriterwird verwendet, Write WriteAsync um XPS-Dokumente in eine PrintQueuezu schreiben.An XpsDocumentWriter, with its many the Write and WriteAsync methods, is used to write XPS documents to a PrintQueue. Die Write(FixedPage, PrintTicket) Methode wird z. B. zum PrintTicket Ausgeben eines XPS-Dokuments und synchron verwendet.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 PrintTicket ein XPS-Dokument auszugeben und asynchron.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 WPF-Anwendungen nativ den XPS-Druckpfad unterstützen, können Win32- und Windows Forms-Anwendungen auch einige XPS-Funktionen nutzen.While WPF applications natively support the XPS print path, Win32 and Windows Forms applications can also take advantage of some XPS features. Der XPS-Druckertreiber (XPSDrv) kann 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 mit dem Microsoft XPS Document Converter (MXDC)unterstützt.For advanced scenarios, custom conversion of content is supported using the Microsoft XPS Document Converter (MXDC). In ähnlicher Weise können WPF-Anwendungen auch an den Write GDI-Druckpfad ausgegeben werden, indem sie eine der oder WriteAsync Methoden der XpsDocumentWriter Klasse aufrufen und einen Nicht-XpsDrv-Drucker als Zieldruckwarteschlange bezeichnen.Similarly, WPF 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, die keine XPS-Funktionalität oder -Unterstützung benötigen, 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 Spoolereffizienz, indem XPS als natives Druckspoolformat beim Drucken auf einem XPS-fähigen Drucker oder Treiber verwendet wird.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. Der vereinfachte Spooling-Prozess macht es überflüssig, eine Zwischenspooldatei, z. B. eine EMF-Datendatei, zu generieren, bevor das Dokument gepoolt 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 Spooldateigrößen kann der XPS-Druckpfad den Netzwerkverkehr reduzieren 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 Anwendungsausgabe als eine Reihe von Aufrufen in GDI zum Rendern von Diensten darstellt.EMF is a closed format that represents application output as a series of calls into GDI for rendering services. Im Gegensatz zu EMF stellt das XPS-Spoolformat das eigentliche Dokument dar, ohne dass bei der Ausgabe an einen XPS-basierten Druckertreiber (XPSDrv) weitere Interpretationen erforderlich sind.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. Mit dieser Funktion werden die Daten- und Farbraumkonvertierungen entfernt, die erforderlich sind, wenn Sie EMF-Dateien und GDI-basierte Druckertreiber verwenden.This capability eliminates the data and color space conversions required when you use EMF files and GDI-based print drivers.

Spooldateigrößen werden in der Regel reduziert, wenn Sie XPS-Dokumente verwenden, die auf einen XPS-Druckertreiber (XPSDrv) im Vergleich zu ihren EMF-Äquivalenten abzielen. Es gibt jedoch 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 im eigentlichen Dokument 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. Die native Unterstützung für Transparenz- und Gradientenprimitive vermeidet die Rasterung von Inhalten im XPS-Dokument.Native support for transparency and gradient primitives avoids rasterization of content in the XPS 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 ZIP-Komprimierung.All XPS documents use ZIP compression.

Weitere InformationenSee also