XPS フィルター
重要
Windows でプリンターとの通信手段として推奨されるのは、最新の印刷プラットフォームです。 プリンターデバイス開発におけるWindows 10および11での印刷体験をカスタマイズするために、MicrosoftのIPPインボックスクラスドライバーとPrint Support Apps (PSA)の使用を推奨します。
詳細については、最新の印刷プラットフォームに関する記事および「印刷サポート アプリの設計ガイド」を参照してください。
XPS 印刷パスの場合、ドライバーがプリンターの印刷データを準備する主な方法はフィルターです。 Windows Vista 以前のバージョンの Microsoft Windows オペレーティング システムでは、印刷プロセッサとレンダリング モジュールがフィルターの処理を行っていました。
XPS フィルターは、DllGetClassObject 関数と DllCanUnloadNow 関数をエクスポートする DLL です。 フィルター パイプライン マネージャーは、XPS フィルター DLL を読み込んでアンロードするときに、これらの関数を呼び出します。 フィルター DLL を読み込んだ後、フィルター パイプライン マネージャーは次の処理を行います。
DllGetClassObject を呼び出して、フィルター オブジェクトの IClassFactory インターフェイスへの参照を取得します。
IClassFactory::CreateInstance メソッドを呼び出して、フィルター オブジェクトの IPrintPipelineFilter インターフェイスへの参照を取得します。
IPrintPipelineFilter::InitializeFilter メソッドを呼び出して、フィルター オブジェクトを初期化します。
フィルター DLL をアンロードする前に、フィルター パイプライン マネージャーは DllCanUnloadNow を呼び出します。
一部の古い XPS フィルターでは、DllGetClassObject 関数は、IClassFactory インターフェイスではなく、フィルターの IPrintPipelineFilter インターフェイスへの参照を取得します。 下位互換性のために、Windows Vista 以降のバージョンの Windows のフィルター パイプライン マネージャーでは、引き続きこれらのフィルターがサポートされます。 ただし、新しいフィルター デザインの場合、DllGetClassObject は IClassFactory インターフェイスへの参照を取得する必要があります。
XPS フィルターは、スプーラーとは異なるプロセスで実行されるため、印刷サブシステムの堅牢性を高めます。 この "サンドボックス化" は両方とも障害から保護され、異なるセキュリティ アクセス許可でプラグインを実行できます。 XPSDrv を使用すると、プリンター ファミリ間でフィルターを再利用して、コストと開発時間を削減することもできます。
最大限の柔軟性と再利用を実現するには、各フィルターで特定の印刷処理機能を実行する必要があります。 たとえば、1 つのフィルターは透かしのみを適用し、もう 1 つのフィルターはアカウンティングのみを実行します。
フィルター パイプライン マネージャーの詳細については、「XPSDrv レンダリング モジュール」を参照してください。
フィルターの実装の詳細については、「XPS フィルターの実装」を参照してください。
印刷フィルターの非同期通知の詳細については、「印刷フィルターの非同期通知」 を参照してください。
フィルター パイプライン構成ファイルを使用してフィルターを構成する必要があります。
印刷フィルター パイプライン サービスをデバッグする方法については、「印刷フィルター パイプライン サービスへのデバッガーのアタッチ」を参照してください。
Windows 7 では、XPS フィルターで XPS ラスター化サービスを使用して、XPS ドキュメントの固定ページをビットマップに変換できます。
Windows が XPS ラスター化に GPU アクセラレーションを使用する方法については、「XPSRas GPU 使用状況デシジョン ツリー」を参照してください。