印刷の概要Printing Overview

Windows Presentation Foundation (WPF) を使用するアプリケーション開発者がシステムの印刷と印刷の管理の豊富な新しいセットを持つ Microsoft .NET Framework でAPIAPIsです。With Microsoft .NET Framework, application developers using Windows Presentation Foundation (WPF) have a rich new set of printing and print system management APIAPIs. また、Windows VistaWindows Vista によって、Windows フォームWindows Forms アプリケーションを作成する開発者と、アンマネージ コードを使用する開発者も、これらの印刷システム拡張機能の一部を使用できます。With Windows VistaWindows Vista, some of these print system enhancements are also available to developers creating Windows フォームWindows Forms applications and developers using unmanaged code. この新しい機能の中核となるのが、新しい XML Paper Specification (XPS)XML Paper Specification (XPS) ファイル形式と XPSXPS 印刷パスです。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.

このトピックは、次のセクションで構成されています。This topic contains the following sections.

XPS についてAbout XPS

XPSXPS は、電子ドキュメント形式、スプール ファイル形式、およびページ記述言語です。 is an electronic document format, a spool file format and a page description language. XMLXMLOpen Packaging Conventions (OPC)Open Packaging Conventions (OPC)、その他の業界標を使用してクロス プラットフォームのドキュメントを作成する OpenDocument 形式の 1 つです。It is an open document format that uses XMLXML, Open Packaging Conventions (OPC)Open Packaging Conventions (OPC), and other industry standards to create cross-platform documents. XPSXPS は、デジタル ドキュメントの作成、共有、印刷、表示、アーカイブを行うプロセスを簡略化します。 simplifies the process by which digital documents are created, shared, printed, viewed, and archived. XPSXPS の追加情報については、XPS Web サイトに関するページをご覧ください。For additional information on XPSXPS, see the XPS Web Site.

WPFWPF を使用した XPSXPS ベースのコンテンツの印刷手法のいくつかは、プログラムによる XPS ファイルの印刷に関するページで説明されています。Several techniques for printing XPSXPS based content using WPFWPF are demonstrated in Programmatically Print XPS Files. このトピックに含まれるコンテンツの確認中にこれらのサンプルを参照すると、役に立つ場合があります。You may find it useful to reference these samples during review of content contained in this topic. (アンマネージ コードの開発者は、ドキュメントを参照してください、 MXDC_ESCAPE 関数です。(Unmanaged code developers should see documentation for the MXDC_ESCAPE function. Windows フォームの開発者が使用する必要があります、APIAPIで、System.Drawing.Printing完全でサポートされていない名前空間XPSXPS印刷のパスではサポート ハイブリッド GDI-XPS 印刷パス。Windows Forms 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. 以下の印刷パスのアーキテクチャをご覧ください。)See Print Path Architecture below.)

XPS 印刷パスXPS Print Path

XML Paper Specification (XPS)XML Paper Specification (XPS)印刷パスは、新しいWindowsWindows印刷を Windows アプリケーションで処理する方法を再定義する機能。The XML Paper Specification (XPS)XML Paper Specification (XPS) print path is a new WindowsWindows feature that redefines how printing is handled in Windows applications. XPSXPS は、ドキュメントのプレゼンテーション言語 (RTF など)、印刷スプーラの形式 (WMF など)、ページ記述言語 (PCL や Postscript など) に置き換えることができるため、新しい印刷パスは、アプリケーションの公開から印刷ドライバーまたはデバイスでの最終処理まで、XPSXPS 形式を維持します。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.

XPSXPS 印刷パスは、XPSXPS のプリンター ドライバー モデル (XPSDrv) 上に構築されています。XPSDrv により、開発者は "What You See Is What You Get" (WYSIWYG)"what you see is what you get" (WYSIWYG) の印刷、色のサポートの向上、および印刷のパフォーマンスの大幅な向上など、いくつかの利点を得られます。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. (XPSDrv の詳細については、「Windows Driver Kit (WDK)」をご覧ください。)(For more on XPSDrv, see the Windows Driver Development Kit.)

操作用の印刷スプーラーのXPSXPSドキュメントには基本的には、Windows の以前のバージョンと同じです。The operation of the print spooler for XPSXPS documents is essentially the same as in previous versions of Windows. ただし、既存の XPSXPS 印刷パスに加えて GDIGDI 印刷パスをサポートするように強化されました。However, it has been enhanced to support the XPSXPS print path in addition to the existing GDIGDI print path. 新しい印刷パスは、ネイティブに XPSXPS スプール ファイルを使用します。The new print path natively consumes an XPSXPS spool file. WindowsWindows の以前のバージョン向けに記述されたユーザー モードのプリンター ドライバーは引き続き機能しますが、XPSXPS 印刷パスを使用するためには、XPSXPS プリンター ドライバー (XPSDrv) が必要になります。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.

XPSXPS 印刷パスには大きな利点があります。それは次のとおりです。The benefits of the XPSXPS print path are significant, and include:

  • WYSIWYGWYSIWYG の印刷のサポート。 print support

  • 高度なカラー プロファイルのネイティブ サポート (1 チャンネルあたり 32 ビット (bpc)、CMYK、名前付きの色、n インクなど)、および透明度とグラデーションのネイティブ サポート。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.

  • 印刷のパフォーマンス向上の両方の .NET Framework とWin32Win32ベースのアプリケーションです。Improved print performance for both .NET Framework and Win32Win32 based applications.

  • 業界標準の XPSXPS 形式。Industry standard XPSXPS format.

基本的な印刷シナリオでは、ユーザー インターフェイス、構成、およびジョブの送信用の 1 つのエントリ ポイントで、簡単かつ直感的な APIAPI を使用できます。For basic print scenarios, a simple and intuitive APIAPI is available with a single entry point for user interface, configuration and job submission. 高度なシナリオ用に、ユーザー インターフェイス (UI)user interface (UI) のカスタマイズ (または UIUI がまったくない)、同期または非同期の印刷、および一括印刷の機能のサポートが追加されました。For advanced scenarios, an additional support is added for ユーザー インターフェイス (UI)user interface (UI) customization (or no UIUI at all), synchronous or asynchronous printing, and batch printing capabilities. いずれのオプションでも、完全または部分的な信頼モードでの印刷のサポートを提供します。Both options provide print support in full or partial trust mode.

XPSXPS は、拡張性を考慮して設計されています。 was designed with extensibility in mind. 機能拡張フレームワークを使用して、機能を XPSXPS にモジュール形式で追加できます。By using the extensibility framework, features and capabilities can be added to XPSXPS in a modular manner. 拡張機能は、次のとおりです。Extensibility features include:

  • 印刷スキーマ。Print Schema. パブリックのスキーマは定期的に更新され、デバイスの機能を迅速に拡張することができます。The public schema is updated regularly and enables rapid extension of device capabilities. (下記の「PrintTicket と PrintCapabilities」をご覧ください。)(See PrintTicket and PrintCapabilities below.)

  • 拡張可能なフィルター パイプライン。Extensible Filter Pipeline. XPSXPS プリンター ドライバー (XPSDrv) フィルター パイプラインは、XPSXPS ドキュメントの直接的および拡張性の高い印刷を可能にするように作られています。The XPSXPS printer driver (XPSDrv) filter pipeline was designed to enable both direct and scalable printing of XPSXPS documents. (参照"XPSDrv"で、 Windows Driver Kit)。(Lookup "XPSDrv" in the Windows Driver Kit.)

両方Win32Win32と .NET Framework アプリケーションのサポートXPSXPSWin32Win32 Windows フォーム アプリケーションを使用して、GDIGDIXPSXPS変換を作成するためにXPSXPS書式設定されたコンテンツ、のXPSXPSプリンター ドライバー (XPSDrv)。While both Win32Win32 and .NET Framework applications support XPSXPS, Win32Win32 and Windows Forms applications use a GDIGDI to XPSXPS conversion in order to create XPSXPS formatted content for the XPSXPS printer driver (XPSDrv). これらのアプリケーションでは、XPSXPS 印刷パスを使用する必要はなく、拡張メタファイル (EMF)Enhanced Metafile (EMF) ベースの印刷を引き続き使用できます。These applications are not required to use the XPSXPS print path, and can continue to use 拡張メタファイル (EMF)Enhanced Metafile (EMF) based printing. ただし、XPSXPS の機能と拡張機能のほとんどは、XPSXPS 印刷パスを対象としたアプリケーション以外では使用できません。However, most XPSXPS features and enhancements are only available to applications that target the XPSXPS print path.

によって XPSDrv ベースのプリンターの使用を有効にするWin32Win32や Windows フォーム アプリケーション、XPSXPSプリンター ドライバー (XPSDrv) への変換をサポートしているGDIGDIXPSXPS形式です。To enable the use of XPSDrv-based printers by Win32Win32 and Windows Forms applications, the XPSXPS printer driver (XPSDrv) supports conversion of GDIGDI to XPSXPS format. XPSDrv モデルには、XPSXPS 形式から GDIGDI 形式へのコンバーターも備えられています。これにより、Win32Win32 アプリケーションは XPSXPS ドキュメントを印刷できます。The XPSDrv model also provides a converter for XPSXPS to GDIGDI format so that Win32Win32 applications can print XPSXPS Documents. WPFWPFアプリケーションへの変換XPSXPSGDIGDI形式はによって自動的に行われます、WriteWriteAsyncのメソッド、XpsDocumentWriter書き込み操作のターゲットの印刷キューがないときにクラスXPSDrv ドライバーの場合です。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 フォーム アプリケーションで印刷できないXPSXPSドキュメントです)。(Windows Forms applications cannot print XPSXPS Documents.)

次の図は、印刷サブシステムを示すとともに、MicrosoftMicrosoft が提供する部分、およびソフトウェアとハードウェアのベンダーが定義する部分を定義しています。The following illustration depicts the print subsystem and defines the portions provided by MicrosoftMicrosoft, and the portions defined by software and hardware vendors.

XPS 印刷システムThe XPS Print System

XPS の基本的な印刷Basic XPS Printing

WPFWPF は、基本的および高度な APIAPI の両方を定義します。 defines both a basic and advanced APIAPI. 広範な印刷のカスタマイズや完全な XPSXPS の機能セットへのアクセスを必要としないアプリケーションでは、基本的な印刷サポートを使用できます。For those applications that do not require extensive print customization or access to the complete XPSXPS feature set, basic print support is available. 基本的な印刷サポートは、最小構成を必要とし、使い慣れた UIUI を特長とする印刷ダイアログ コントロールを介して公開されます。Basic print support is exposed through a print dialog control that requires minimal configuration and features a familiar UIUI. XPSXPS の機能の多くは、この簡略化された印刷モデルによって使用できます。Many XPSXPS features are available using this simplified print model.

PrintDialogPrintDialog

System.Windows.Controls.PrintDialog コントロールには、UIUI、構成、および XPSXPS ジョブの送信用の 1 つのエントリ ポイントが用意されています。The System.Windows.Controls.PrintDialog control provides a single entry point for UIUI, configuration, and XPSXPS job submission. コントロールのインスタンス化と使用方法については、「方法 : 印刷ダイアログ ボックスを呼び出す」をご覧ください。For information about how to instantiate and use the control, see Invoke a Print Dialog.

高度な XPS の印刷Advanced XPS Printing

XPSXPS 機能の完全なセットにアクセスするには、高度な印刷の APIAPI を使用する必要があります。To access the complete set of XPSXPS features, the advanced print APIAPI must be used. いくつかの関連する APIAPI について、以下で詳しく説明します。Several relevant APIAPI are described in greater detail below. 完全な一覧についてはXPSXPS印刷パスAPIAPIsを参照してください、System.Windows.XpsSystem.Printing名前空間の参照。For a complete list of XPSXPS print path APIAPIs, see the System.Windows.Xps and System.Printing namespace references.

PrintTicket と PrintCapabilitiesPrintTicket and PrintCapabilities

PrintTicketPrintCapabilitiesクラスは、詳細 foundationXPSXPS機能します。The PrintTicket and PrintCapabilities classes are the foundation of the advanced XPSXPS features. いずれの種類のオブジェクトも、照合順序、両面印刷、ホチキス止めなど、XMLXML 形式の印刷向け機能の構造になっています。これらの構造は、印刷スキーマによって定義されます。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. PrintTicket は、プリンターに印刷ジョブの処理方法を指示します。A PrintTicket instructs a printer how to process a print job. PrintCapabilities クラスは、プリンターの機能を定義します。The PrintCapabilities class defines the capabilities of a printer. プリンターの機能のクエリを実行すると、プリンターのサポート機能を最大限に活用する PrintTicket を作成できます。By querying the capabilities of a printer, a PrintTicket can be created that takes full advantage of a printer's supported features. 同様に、サポートされていない機能を回避できます。Similarly, unsupported features can be avoided.

次の例は、プリンターの PrintCapabilities でクエリを実行する方法と、コードを使用した PrintTicket の作成方法を示しています。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 と PrintQueuePrintServer and PrintQueue

PrintServer クラスはネットワーク プリント サーバーを表し、PrintQueue クラスはプリンターとそれに関連付けられた出力ジョブのキューを表します。The PrintServer class represents a network print server and the PrintQueue class represents a printer and the output job queue associated with it. これらの APIAPIs を併用すると、サーバーの印刷ジョブを高度に管理できます。Together, these APIAPIs allow advanced management of a server's print jobs. PrintServer、またはその派生クラスのいずれかを使用すると、PrintQueue を管理できます。A PrintServer, or one of its derived classes, is used to manage a PrintQueue. 新しい印刷ジョブをキューに挿入するには、AddJob メソッドを使用します。The AddJob method is used to insert a new print job into the queue.

次の例は、コードを使用して LocalPrintServer を作成し、既定の PrintQueue にアクセスする方法を示しています。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

XpsDocumentWriter を (その多くの Write メソッドおよび WriteAsync メソッドと共に) 使用すると、XPSXPS ドキュメントを PrintQueue に書き込むことができます。An XpsDocumentWriter, with its many the Write and WriteAsync methods, is used to write XPSXPS documents to a PrintQueue. たとえば、Write(FixedPage, PrintTicket) メソッドを使用すると、XPSXPS ドキュメントと PrintTicket を同期的に出力できます。For example, the Write(FixedPage, PrintTicket) method is used to output an XPSXPS document and PrintTicket synchronously. WriteAsync(FixedDocument, PrintTicket) メソッドを使用すると、XPSXPS ドキュメントと PrintTicket を非同期的に出力できます。The WriteAsync(FixedDocument, PrintTicket) method is used to output an XPSXPS document and PrintTicket asynchronously.

次の例は、コードを使用して XpsDocumentWriter を作成する方法を示しています。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()

さらに AddJob メソッドは印刷方法を提供します。The AddJob methods also provide ways to print. 方法 : XPS ファイルをプログラムにより印刷する」をご覧ください。See Programmatically Print XPS Files. 詳細について。for details.

GDI 印刷パスGDI Print Path

中にWPFWPFアプリケーションでネイティブ サポート、XPSXPS印刷パスは、Win32Win32し、Windows フォーム アプリケーションも利用できるいくつかのXPSXPS機能します。While WPFWPF applications natively support the XPSXPS print path, Win32Win32 and Windows Forms applications can also take advantage of some XPSXPS features. XPSXPS プリンター ドライバー (XPSDrv) は、GDIGDI ベースの出力を XPSXPS 形式に変換できます。The XPSXPS printer driver (XPSDrv) can convert GDIGDI based output to XPSXPS format. 使用して高度なシナリオは、コンテンツのカスタムの変換はサポートされて、 Microsoft XPS ドキュメント コンバーター (MXDC)です。For advanced scenarios, custom conversion of content is supported using the Microsoft XPS Document Converter (MXDC). 同様に、WPFWPFに出力アプリケーションすることも、GDIGDI印刷パスのいずれかを呼び出すことによって、WriteまたはWriteAsyncのメソッド、XpsDocumentWriter印刷キューのクラス、ターゲットとして XpsDrv 以外のプリンターを指定するとします。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.

XPSXPS の機能またはサポートを必要としないアプリケーションでは、現在の GDIGDI 印刷パスは変更されません。For applications that do not require XPSXPS functionality or support, the current GDIGDI print path remains unchanged.

XPSDrv ドライバー モデルXPSDrv Driver Model

XPSXPS 印刷パスでは、XPSXPS 対応のプリンターまたはドライバーに出力する場合に、ネイティブの印刷スプール形式として XPSXPS を使用すると、スプーラの効率性が高まります。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. スプール処理の簡略化により、ドキュメントをスプールする前に、EMFEMF データ ファイルなどの中間スプール ファイルを生成する必要がなくなります。The simplified spooling process eliminates the need to generate an intermediate spool file, such as an EMFEMF data file, before the document is spooled. スプール ファイルのサイズを小さくすると、XPSXPS 印刷パスのネットワーク トラフィックが減少し、印刷のパフォーマンスが向上します。Through smaller spool file sizes, the XPSXPS print path can reduce network traffic and improve print performance.

EMFEMF は、サービスのレンダリングのために、アプリケーションの出力を GDIGDI に対する一連の呼び出しとして表すクローズ形式です。 is a closed format that represents application output as a series of calls into GDIGDI for rendering services. EMFEMF と異なり、XPSXPS スプール形式では、XPSXPS ベースのプリンター ドライバー (XPSDrv) に出力する際、さらに解釈する必要なく、実際のドキュメントを表します。Unlike EMFEMF, the XPSXPS spool format represents the actual document without requiring further interpretation when output to an XPSXPS-based printer driver (XPSDrv). ドライバーは、その形式のデータを直接操作できます。The drivers can operate directly on the data in the format. この機能により、EMFEMF ファイルと GDIGDI ベースの印刷ドライバーを使用する際の、データと色空間の変換が必要なくなります。This capability eliminates the data and color space conversions required when you use EMFEMF files and GDIGDI-based print drivers.

同等の XPSXPS と比較すると、XPSXPS プリンター ドライバー (XPSDrv) を対象とする EMFEMF ドキュメントを使用する際、通常はスプール ファイルのサイズが減少します。ただし、例外もあります。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:

  • ベクター グラフィックが非常に複雑で、複数の階層があるか、非効率的に記述されている場合、同じグラフィックスのビットマップ形式のバージョンよりもサイズが大きくなることがあります。A vector graphic that is very complex, multi-layered, or inefficiently written can be larger than a bitmapped version of the same graphic.

  • 画面表示の目的で、XPS ファイルにはデバイス フォントおよびコンピューター ベースのフォントが埋め込まれます。一方、GDI のスプール ファイルにはデバイス フォントは埋め込まれません。For screen display purposes, XPS files embed device fonts as well as computer-based fonts; whereas GDI spool files do not embed device fonts. しかし、両方の種類のフォントがサブセット化されているため (下記参照)、プリンター ドライバーは、ファイルをプリンターに送信する前にデバイス フォントを削除することができます。But both kinds of fonts are subsetted (see below) and printer drivers can remove the device fonts before transmitting the file to the printer.

スプール サイズの削減は、いくつかのメカニズムを通じて行われます。Spool size reduction is performed through several mechanisms:

  • フォントのサブセット化Font subsetting. 実際のドキュメント内で使用される文字のみが XPSXPS ファイルに格納されます。Only characters used within the actual document are stored in the XPSXPS file.

  • 高度なグラフィックスのサポートAdvanced Graphics Support. 透過性とグラデーションのプリミティブのネイティブ サポートにより、XPSXPS ドキュメントの内容のラスタライズを回避できます。Native support for transparency and gradient primitives avoids rasterization of content in the XPSXPS Document.

  • 共通リソースの識別Identification of common resources. 複数回使用するリソース (会社のロゴを表す画像など) は共有リソースとして扱われ、一度だけ読み込まれます。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 圧縮ZIP compression. すべての XPSXPS ドキュメントで ZIP 圧縮を使用します。All XPSXPS documents use ZIP compression.

関連項目See Also

PrintDialog
XpsDocumentWriter
XpsDocument
PrintTicket
PrintCapabilities
PrintServer
PrintQueue
方法トピックHow-to Topics
WPF のドキュメントDocuments in WPF
XPSXPS
ドキュメントのシリアル化および保存Document Serialization and Storage
Microsoft XPS ドキュメント コンバーター (MXDC)Microsoft XPS Document Converter (MXDC)