Übersicht über das DruckenPrinting Overview

Mit Microsoft .NET Framework steht Anwendungsentwicklern, die Windows Presentation Foundation (WPF)Windows Presentation Foundation (WPF) verwenden, eine umfassende neue Druckreihen- und eine Drucksystemverwaltung APIsAPIs zur Verfügung.With Microsoft .NET Framework, application developers using Windows Presentation Foundation (WPF)Windows Presentation Foundation (WPF) have a rich new set of printing and print system management APIsAPIs. 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

XPSXPS ist ein Format für elektronische Dokumente, ein Format für Spooldateien und eine Seitenbeschreibungssprache. is an electronic document format, a spool file format and a page description language. Es handelt sich um ein offenes Dokumentformat, das XMLXML, Open Packaging-Konventionen (Open Packaging Conventions, OPC)Open Packaging Conventions (OPC) und andere Branchenstandards verwendet, um plattformübergreifend nutzbare Dokumente zu erstellen.It is an open document format that uses XMLXML, Open Packaging-Konventionen (Open Packaging Conventions, OPC)Open Packaging Conventions (OPC), and other industry standards to create cross-platform documents. XPSXPS vereinfacht die Vorgänge beim Erstellen, Teilen, Drucken, Anzeigen und Archivieren von digitalen Dokumenten. simplifies the process by which digital documents are created, shared, printed, viewed, and archived. Weitere Informationen zu XPSXPS, finden Sie unter der XPS-Website.For additional information on XPSXPS, see the XPS Web Site.

Verschiedene Techniken für das Drucken von XPSXPS-basierten Inhalten mithilfe von WPFWPF sind in Programmgesteuertes Drucken von XPS-Dateien dargestellt.Several techniques for printing XPSXPS 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. (Nicht verwaltetem Code Entwickler sollten finden Sie in der Dokumentation für die MXDC_ESCAPE Funktion.(Unmanaged code developers should see documentation for the MXDC_ESCAPE function. Windows FormsWindows Forms-Entwickler müssen die APIAPI im System.Drawing.Printing-Namespace verwenden, die nicht den vollständigen XPSXPS-Druckpfad, wohl aber einen hybriden GDI-nach-XPS-Druckpfad unterstützt. developers must use the APIAPI 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)XML Paper Specification (XPS)-Druckpfad ist ein neues WindowsWindows-Feature, das die Druckverarbeitung in WindowsWindows-Anwendungen neu definiert.The XML Paper Specification (XPS)XML Paper Specification (XPS) print path is a new WindowsWindows feature that redefines how printing is handled in WindowsWindows applications. Da XPSXPS eine Sprache zur Dokumentdarstellung (wie etwa RTF), ein Druckerspoolerformat (wie etwa WMF) und eine Seitenbeschreibungssprache (wie etwa PCL oder Postscript) ersetzen kann, bleibt im neuen Druckpfad das XPSXPS-Format von der Veröffentlichung der Anwendung bis zur abschließenden Verarbeitung im Druckertreiber oder -gerät erhalten.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 XPSXPS format from application publication to the final processing in the print driver or device.

Der XPSXPS-Druckpfad baut auf dem XPSXPS-Druckermodell (XPSDrv) auf, das für Entwickler eine Reihe von Vorzügen bereithält, wie etwa „What You See Is What You Get“ (WYSIWYG)"what you see is what you get" (WYSIWYG)-Druck, verbesserte Farbunterstützung und erheblich gesteigerte Druckleistung.The XPSXPS print path is built upon the XPSXPS 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 unter Windows-Treiberentwicklungskit.)(For more on XPSDrv, see the Windows Driver Development Kit.)

Der Betrieb des Druckerspoolers ist für XPSXPS-Dokumente im Wesentlichen gegenüber früheren Versionen von WindowsWindows unverändert.The operation of the print spooler for XPSXPS documents is essentially the same as in previous versions of WindowsWindows. Er wurde jedoch verbessert und unterstützt nun über den vorhandenen XPSXPS-Druckpfad hinaus auch den GDIGDI-Druckpfad.However, it has been enhanced to support the XPSXPS print path in addition to the existing GDIGDI print path. Der neue Druckpfad nutzt systemeigen eine XPSXPS-Spooldatei.The new print path natively consumes an XPSXPS spool file. Zwar funktionieren für frühere Versionen von WindowsWindows erstellte Druckertreiber für den Benutzermodus weiterhin, für den XPSXPS-Druckpfad ist jedoch ein XPSXPS-Druckertreiber (XPSDrv) erforderlich.While user-mode printer drivers written for previous versions of WindowsWindows will continue to work, an XPSXPS printer driver (XPSDrv) is required in order to use the XPSXPS print path.

Die Vorzüge des XPSXPS-Druckpfads sind erheblich und umfassen u.a.:The benefits of the XPSXPS print path are significant, and include:

  • WYSIWYGWYSIWYG-Druckunterstützung 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.NET Framework- und Win32Win32-basierte Anwendungen.Improved print performance for both .NET Framework.NET Framework and Win32Win32 based applications.

  • XPSXPS-Branchenstandardformat.Industry standard XPSXPS format.

Für einfache Druckszenarien ist eine einfache und intuitiv bedienbare APIAPI mit einem einzelnen Einstiegspunkt für Benutzeroberfläche, Konfiguration und Auftragsübergabe verfügbar.For basic print scenarios, a simple and intuitive APIAPI 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.

XPSXPS wurde im Hinblick auf Erweiterbarkeit entwickelt. was designed with extensibility in mind. Mithilfe des Extensibility Frameworks können XPSXPS auf modulare Weise Features und Funktionen hinzugefügt werden.By using the extensibility framework, features and capabilities can be added to XPSXPS 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 Filterpipeline des XPSXPS-Druckertreibers (XPSDrv) wurde dafür ausgelegt, sowohl direkten als auch skalierbaren Druck von XPSXPS-Dokumenten zu ermöglichen.The XPSXPS printer driver (XPSDrv) filter pipeline was designed to enable both direct and scalable printing of XPSXPS documents. (Suche "XPSDrv" in der Windows-Treiberkit.)(Lookup "XPSDrv" in the Windows Driver Kit.)

Zwar unterstützen sowohl Win32Win32- als auch .NET Framework.NET Framework-Anwendungen XPSXPS, doch verwenden Win32Win32- und Windows FormsWindows Forms-Anwendungen eine Konvertierung von GDIGDI nach XPSXPS, um Inhalte im XPSXPS-Format für den XPSXPS-Druckertreiber (XPSDrv) zu erstellen.While both Win32Win32 and .NET Framework.NET Framework applications support XPSXPS, Win32Win32 and Windows FormsWindows Forms applications use a GDIGDI to XPSXPS conversion in order to create XPSXPS formatted content for the XPSXPS printer driver (XPSDrv). Diese Anwendungen müssen den XPSXPS-Druckpfad nicht zwangsläufig verwenden und können weiterhin den Erweiterte Metadatei (Enhanced Metafile, EMF)Enhanced Metafile (EMF)-basierten Druck verwenden.These applications are not required to use the XPSXPS print path, and can continue to use Erweiterte Metadatei (Enhanced Metafile, EMF)Enhanced Metafile (EMF) based printing. Die meisten Features und Verbesserungen von XPSXPS sind jedoch nur für Anwendungen verfügbar, die den XPSXPS-Druckpfad zum Ziel haben.However, most XPSXPS features and enhancements are only available to applications that target the XPSXPS print path.

Um die Verwendung von XPSDrv-basierten Druckern durch Win32Win32- und Windows FormsWindows Forms-Anwendungen zu ermöglichen, unterstützt der XPSXPS-Druckertreiber (XPSDrv) die Konvertierung von GDIGDI in das XPSXPS-Format.To enable the use of XPSDrv-based printers by Win32Win32 and Windows FormsWindows Forms applications, the XPSXPS printer driver (XPSDrv) supports conversion of GDIGDI to XPSXPS format. Das XPSDrv-Modell umfasst außerdem einen Konverter für das XPSXPS-Format nach GDIGDI, sodass Win32Win32-Anwendungen XPSXPS-Dokumente drucken können.The XPSDrv model also provides a converter for XPSXPS to GDIGDI format so that Win32Win32 applications can print XPSXPS Documents. Für WPFWPF Anwendungen, Konvertierung von XPSXPS auf GDIGDI Format erfolgt automatisch durch die Write und WriteAsync Methoden die XpsDocumentWriter -Klasse auf, wenn die Ziel-Druckerwarteschlange des Schreibvorgangs nicht verfügt ein XPSDrv-Treiber.For WPFWPF applications, conversion of XPSXPS to GDIGDI 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 FormsWindows Forms-Anwendungen können keine XPSXPS-Dokumente drucken.)(Windows FormsWindows Forms applications cannot print XPSXPS Documents.)

Die folgende Abbildung stellt das Drucksubsystem dar und definiert die von MicrosoftMicrosoft bereitgestellten sowie die von Software- und Hardwareherstellern definierten Anteile.The following illustration depicts the print subsystem and defines the portions provided by MicrosoftMicrosoft, and the portions defined by software and hardware vendors.

Das XPS-DrucksystemThe XPS Print System

Einfacher XPS-DruckBasic XPS Printing

WPFWPF definiert sowohl eine einfache als auch eine erweiterte APIAPI. defines both a basic and advanced APIAPI. Für Anwendungen, die keine umfangreichen Druckanpassungen oder Zugriff auf die Gesamtmenge der XPSXPS-Funktionen erfordern, ist eine Unterstützung für einfachen Druck verfügbar.For those applications that do not require extensive print customization or access to the complete XPSXPS 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 XPSXPS-Funktionen sind in diesem vereinfachten Druckmodell verfügbar.Many XPSXPS features are available using this simplified print model.

PrintDialogPrintDialog

Das System.Windows.Controls.PrintDialog-Steuerelement stellt einen einheitlichen Einstiegspunkt für UIUI, Konfiguration und XPSXPS-Auftragsübermittlung bereit.The System.Windows.Controls.PrintDialog control provides a single entry point for UIUI, configuration, and XPSXPS 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 die Gesamtmenge der XPSXPS-Funktionen muss die erweiterte Druck-APIAPI verwendet werden.To access the complete set of XPSXPS features, the advanced print APIAPI must be used. Mehrere relevante APIAPI sind ausführlicher unten beschrieben.Several relevant APIAPI are described in greater detail below. Eine vollständige Liste der XPSXPS Druckpfad APIsAPIs, finden Sie unter der System.Windows.Xps und System.Printing Namespaceverweise.For a complete list of XPSXPS print path APIsAPIs, see the System.Windows.Xps and System.Printing namespace references.

PrintTicket und PrintCapabilitiesPrintTicket and PrintCapabilities

Die PrintTicket und PrintCapabilities Klassen bilden die Grundlage der erweiterten XPSXPS Funktionen.The PrintTicket and PrintCapabilities classes are the foundation of the advanced XPSXPS 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. In Kombination ermöglichen diese APIsAPIs die erweiterte Verwaltung der Druckaufträge von Servern.Together, these APIsAPIs 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 XpsDocumentWriter mit seinen vielen Write- und WriteAsync-Methoden, wird zum Schreiben von XPSXPS-Dokumenten in eine PrintQueue verwendet.An XpsDocumentWriter, with its many the Write and WriteAsync methods, is used to write XPSXPS documents to a PrintQueue. So wird z. B. die Methode Write(FixedPage, PrintTicket) verwendet, um ein XPSXPS-Dokument und ein PrintTicket synchron auszugeben.For example, the Write(FixedPage, PrintTicket) method is used to output an XPSXPS document and PrintTicket synchronously. Die Methode WriteAsync(FixedDocument, PrintTicket) wird verwendet, um ein XPSXPS-Dokument und ein PrintTicket asynchron auszugeben.The WriteAsync(FixedDocument, PrintTicket) method is used to output an XPSXPS 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 XPSXPS-Druckpfad nativ unterstützen, können Win32Win32- und Windows FormsWindows Forms-Anwendungen ebenfalls einige der XPSXPS-Funktionen nutzen.While WPFWPF applications natively support the XPSXPS print path, Win32Win32 and Windows FormsWindows Forms applications can also take advantage of some XPSXPS features. Der XPSXPS-Druckertreiber (XPSDrv) kann GDIGDI-basierte Ausgaben in das XPSXPS-Format konvertieren.The XPSXPS printer driver (XPSDrv) can convert GDIGDI based output to XPSXPS format. Für erweiterte Szenarien wird benutzerdefinierte Konvertierung des Inhalts unterstützt, mit der Microsoft XPS Document Konverter (MXDC).For advanced scenarios, custom conversion of content is supported using the Microsoft XPS Document Converter (MXDC). Auf ähnliche Weise WPFWPF Anwendungen können auch ausgegeben werden die GDIGDI Druckpfad durch einen Aufruf der der Write oder WriteAsync Methoden die XpsDocumentWriter Klasse und zum Festlegen eines XpsDrv-Druckers als Ziel der Druckerwarteschlange.Similarly, WPFWPF applications can also output to the GDIGDI 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.

Für Anwendungen, die keine XPSXPS-Funktion oder -Unterstützung benötigen, bleibt der aktuelle GDIGDI-Druckpfad unverändert.For applications that do not require XPSXPS functionality or support, the current GDIGDI print path remains unchanged.

XPSDrv-TreibermodellXPSDrv Driver Model

Der XPSXPS-Druckpfad verbessert die Effizienz des Spoolings durch Verwendung von XPSXPS als systemeigenem Druckerspoolerformat beim Drucken auf XPSXPS-fähigen Druckern oder Treibern.The XPSXPS print path improves spooler efficiency by using XPSXPS as the native print spool format when printing to an XPSXPS -enabled printer or driver. Das vereinfachte Spooling beseitigt die Notwendigkeit, vor dem Spoolen des Dokuments eine temporäre Spoolingdatei, wie etwa eine EMFEMF-Datendatei, zu generieren.The simplified spooling process eliminates the need to generate an intermediate spool file, such as an EMFEMF data file, before the document is spooled. Durch geringere Größe der Spooldateien kann der XPSXPS-Druckpfad den Netzwerkverkehr verringern und die Druckleistung verbessern.Through smaller spool file sizes, the XPSXPS print path can reduce network traffic and improve print performance.

EMFEMF ist ein geschlossenes Format, das Anwendungsausgaben als Abfolge von Aufrufen an GDIGDI für Renderdienste darstellt. is a closed format that represents application output as a series of calls into GDIGDI for rendering services. Im Gegensatz zu EMFEMF stellt das XPSXPS-Spoolingformat das tatsächliche Dokument dar, ohne bei der Ausgabe an einen XPSXPS-basierten Druckertreiber (XPSDrv) weitere Interpretation zu erfordern.Unlike EMFEMF, the XPSXPS spool format represents the actual document without requiring further interpretation when output to an XPSXPS-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 Fähigkeit entfallen die Daten- und Farbraumkonvertierungen, die bei der Verwendung von EMFEMF-Dateien und GDIGDI-basierten Druckertreibern erforderlich sind.This capability eliminates the data and color space conversions required when you use EMFEMF files and GDIGDI-based print drivers.

Normalerweise verringert sich die Größe von Spooldateien, wenn XPSXPS-Dokumente verwendet werden, die einen XPSXPS-Druckertreiber (XPSDrv) zum Ziel haben, gegenüber ihren EMFEMF-Entsprechungen; allerdings gibt es Ausnahmen:Spool file sizes are usually reduced when you use XPSXPS Documents that target an XPSXPS printer driver (XPSDrv) compared with their EMFEMF 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 Dokument verwendet werden, werden in der XPSXPS-Datei gespeichert.Only characters used within the actual document are stored in the XPSXPS 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 XPSXPS-Dokumente verwenden ZIP-Komprimierung.All XPSXPS documents use ZIP compression.

Siehe auchSee Also

PrintDialog
XpsDocumentWriter
XpsDocument
PrintTicket
PrintCapabilities
PrintServer
PrintQueue
Themen zu VorgehensweisenHow-to Topics
Dokumente in WPFDocuments in WPF
XPSXPS
Serialisierung und Speicherung von DokumentenDocument Serialization and Storage
Microsoft XPS-Dokument Konverter (MXDC)Microsoft XPS Document Converter (MXDC)