OpenXPS のドライバー サポート
重要
Windows でプリンターとの通信手段として推奨されるのは、最新の印刷プラットフォームです。 プリンターデバイス開発におけるWindows 10および11での印刷体験をカスタマイズするために、MicrosoftのIPPインボックスクラスドライバーとPrint Support Apps (PSA)の使用を推奨します。
詳細については、最新の印刷プラットフォームに関する記事および「印刷サポート アプリの設計ガイド」を参照してください 。
OpenXPS はドキュメントの Open XML Paper Specification 形式であり、Ecma の国際標準仕様に基づいています。
この仕様の最新情報については、「オープン XML ペーパースペック」を参照してください。
Windows 8 では、OpenXPS が完全にサポートされ、既存の Microsoft XPS 形式が引き続きサポートされます。 このトピックでは、v4 ドライバー モデルを使用した OpenXPS のサポートについて説明します。 Windows アプリケーション開発者に関連する OpenXPS のサポートについては、「OpenXPS 印刷のアプリ サポート」を参照してください。
サポートされている OpenXPS シナリオ
Windows の印刷パスは、送信された XPS 形式が対象の印刷ドライバーのサポートされている形式と一致し、必要に応じて形式を変換するように開発されています。 Windows には、アプリケーションが互換性のある要素を提供し、印刷システム内で追加の変換を回避できるように、印刷ドライバーのクエリを実行する API も用意されています。
印刷ドライバーは、マニフェストを使用して、Microsoft XPS、Open XPS、またはその両方の形式をサポートしているかどうかを示すことができます。 Microsoft XPS または OpenXPS は、既存のストリームおよびオブジェクト モデル (OM) インターフェイスを使用して、印刷フィルター パイプライン内のフィルターに表示できます。OpenXPS をサポートするためにドライバーで新しいインターフェイスは必要ありません。 フィルターに表示される形式は、ドライバーでサポートされている形式、またはアプリケーションによって提供される形式によって異なります。
Microsoft XPS ドキュメント ライター (MXDW) が更新され、MXDW が任意の Windows デスクトップ アプリケーションから Microsoft XPS または OpenXPS を出力できるようになりました。 同様に、Windows 8 の Microsoft XPS ビューアーとリーダー アプリでは、両方の XPS 形式を開くことができます。 必要に応じて、ユーザーは形式を変換するために XPS ビューアーから MXDW に印刷できます。
サポートされていない OpenXPS シナリオ
一部のレガシ機能はサポートされていないか、OpenXPS で使用するとダウングレードされたエクスペリエンスを提供します。
サポートなし: OpenXPS ファイルをスプーラーに直接送信する (XPS 印刷 API をバイパスする) シナリオはサポートされていません。 これを行うと、次の機能の問題が発生します:
スプーラーに直接送信された XPS スプール ファイルは MSXPS として扱われ、それに応じて処理されます。
OpenXPS ファイルをスプーラーに直接送信した結果は未定義であり、印刷ジョブが失敗する可能性があります。
注: このシナリオのサポートを提供する予定はありません。
非推奨: アプリケーションから XPS Print API に直接 OpenXPS ストリームを送信することは推奨されません。 たとえば、OpenXPS ストリームを StartXPSPrintJob メソッドに直接送信しないでください。 これを行うと、XPS のフレーバーからストリームとしての別のフレーバーへの変換が、パフォーマンスに非常に高くなる可能性があります。
代わりに、パフォーマンスの低下を回避するために、IPrintDocumentPackageTarget を使用して XPS OM として印刷ジョブを送信する必要があります。
非推奨: XPS スプール ファイルをスプーラーへの直接送信 この操作を行うと、印刷パス API によって追加された必要なメタデータが印刷システムで検出されず、形式が MSXPS であると想定され、OpenXPS への変換が試行されます。 スプーラーに直接送信されたスプール ファイルが OpenXPS 形式のファイルであった場合、印刷フィルター パイプラインが OpenXPS に '変換' しようとすると、未定義の結果になります。 スプーラーに送信されたファイルが MSXPS 形式のファイルであり、ドライバーが OpenXPS 専用ドライバーである場合、印刷フィルター パイプラインによる OpenXPS への変換は成功します。 しかし、この後期変換により、印刷システムのパフォーマンスが大幅に低下します。
アプリ開発者への影響
OpenXPS の Windows 8 サポートに関するアプリ開発者への影響については、「OpenXPS 印刷のアプリ サポート」を参照してください。
ドライバー開発者への影響
v4 印刷ドライバーで OpenXPS を有効にする基本的な手順を次に示します。
ドライバー マニフェスト: [ドライバー のレンダリング] セクションに "OpenXPS" を追加します。
ドライバー マニフェスト: 該当する場合は、FileSave セクションに "oxps" を追加します。
フィルター パイプライン: OpenXPS 要素を処理するように印刷フィルターを更新します。
特定のストリームおよび適切なオブジェクト インターフェイスでは、クライアントは OpenXPS 形式を使用して、印刷フィルター パイプライン内のフィルターにデータを転送できます。 データ ストリームを転送するために、クライアントはIID_IPrintReadStreamインターフェイスとIID_IPrintWriteStream インターフェイスを使用します。 OM コンポーネントにデータを転送するために、クライアントは IID_IXpsDocumentProvider インターフェイスと IID_IXpsDocumentConsumer インターフェイスを使用します。 OpenXPS のサポートを宣言するドライバーは、パイプライン マネージャーからこの形式を受け取ったときに、指定された印刷フィルターが OpenXPS 形式を正しく処理できることを確認する必要があります。
ドライバー マニフェスト: DriverRender セクション。 ドライバーのインストール中に、セットアップ プロセスによってマニフェストの DriverRender セクションがチェックされ、XpsFormat エントリに OpenXPS が含まれているかどうかを確認します。 XpsFormat エントリには、XPS (Microsoft XPS の場合) と OpenXPS の両方を含めて、デュアル サポートを示すことができます。 XpsFormat エントリに表示される 2 つの形式の順序によって、ドライバーの優先形式が決まります。
DriverRender セクションを更新する方法の例をいくつか次に示します。
OpenXPS のみのサポートを示す:
[DriverRender]
XpsFormat = OpenXPS
MSXPS のみのサポートを示す:
[DriverRender]
XpsFormat = XPS
OpenXPS の優先設定を使用して、両方の形式のサポートを示します:
[DriverRender]
XpsFormat = OpenXPS,XPS
MSXPS の優先設定を使用して、両方の形式のサポートを示します:
[DriverRender]
XpsFormat = XPS,OpenXPS
ドライバー開発者は、V4 印刷ドライバーの優先形式を決定します。この決定は、ドライバーが提供するように設計された機能に基づいています。 たとえば、高忠実度の画像に JPEG XR サポートを提供する印刷ドライバーを開発できます。
印刷システムは、マニフェスト内の DriverRender 情報に基づいてさまざまな決定を行います。 それらの決定の一部の例を次に示します。
v4 ドライバーに送信される GDI ベースの印刷ジョブ
Microsoft XPS ドキュメントコンバーター (MXDC) は GDI 印刷ジョブ入力を受け取り、ジョブを XPS スプール ファイルに変換します。 そのスプール ファイルの形式は、マニフェストの DriverRender セクションに示されている優先 XPS 形式と一致します。
XPS 印刷 API 形式の変換
XPS Print API は、ターゲット ドライバーでサポートされている XPS 形式に対してクエリを実行します。 ドライバーが両方の形式をサポートしている場合、XPS 印刷 API は XPS 印刷ジョブをアプリケーションによって送信されたスプーラーに渡します。 変換は実行されません。
ターゲット ドライバーがどちらか一方の形式のみをサポートしている場合、ジョブはスプールする前に正しい形式に変換されます。
マニフェストに XpsFormat が指定されていない場合、動作は既定で MSXPS のみに設定されます。 OpenXPS 入力は MSXPS に変換されます。 この動作により、ドライバーの下位互換性が最も強力になります。
スプーラーに直接送信された XPS ファイル
スプーラーに直接送信される XPS ファイルは、既定では MSXPS です。 スプーラーへの OpenXPS ダイレクトの送信はサポートされていません。 ただし、4.5 以降より前の .NET では、独自の MSXPS がシリアル化され、ジョブがスプーラーに直接送信されました。 この動作は、XPS Print API (xpsprint.dll) の導入前に実装されました。
これらの .NET アプリケーションの下位互換性を提供するために、印刷フィルター パイプライン マネージャーはスプール ファイルをチェックして、直接スプーラーを受信したかどうかを判断します。 その場合は、MSXPS と見なされます。 印刷フィルター パイプライン マネージャーは、その時点でドライバーの XPS 形式に対してクエリを実行します。 ドライバーが MSXPS をサポートしている場合、変換は実行されません。 ドライバーが OpenXPS のみをサポートしている場合、印刷フィルター パイプライン マネージャーはファイルの変換を実行します。 ジョブのこの時点での変換はパフォーマンスが高くなります。ただし、従来の .NET アプリは新しい v4 OpenXPS ドライバーに印刷できるようになります。
ドライバー マニフェスト: FileSave セクション。 v4 印刷ドライバー マニフェストの FileSave セクションには、PORTPROMPT: ポートで使用される [ファイルの保存] ダイアログの拡張機能が用意されています。 (PORTPROMPT: WINDOWS 8.1 では、アプリケーションが低権限モードで実行されている場合でも、権限を持つすべてのファイルの場所にユーザーがアクセスできるようになるため、WINDOWS 8.1 では FILE の代わりに PORTPROMPT: を使用する必要があります)。FileSave セクションのエントリは、インデックスによって DriverRender セクションのエントリに関連付けられます。
例:
[FileSave]
xps=0
oxps=0
[DriverRender]
XpsFormat=XPS,OpenXPS
これにより、ユーザーがこのドライバーに印刷ジョブを送信し、ポートが PORTPROMPT: に設定されている場合、 [ファイルの保存] ダイアログにファイルの種類のオプションとして XPS と OpenXPS が表示され、ファイル拡張子として .xps または .oxps がそれぞれ適用されます。
マニフェストの [ファイルの保存] セクションの他のオプションの詳細については、「V4 ドライバー マニフェスト」を参照してください。