次の方法で共有


フィルター パイプライン構成ファイルに関するページ

重要

プリンターデバイス開発におけるWindows 10および11での印刷体験をカスタマイズするために、MicrosoftのIPPインボックスクラスドライバーとPrint Support Apps (PSA)の使用を推奨します。

詳細については、プリントサポートアプリデザインガイド.

フィルター パイプライン構成ファイル は、次を定義する XML ファイルです:

  • パイプライン内のフィルターの順序。 この順序は、フィルター パイプライン構成ファイル内の XML 要素の順序によって定義されます。

  • インターフェイスをフィルタリングします。 これらのインターフェイスは、フィルター パイプライン構成ファイルの XML 属性によって定義されます。

  • 各フィルターの入力形式と出力形式。 これらの形式は、フィルター パイプライン構成ファイルの XML 要素によって定義されます。

次のコード例は、一般的なフィルター パイプライン構成ファイルを示しています。

<Filters>
    <Filter      dll="XDWMark.dll"
 clsid="{D647D658-BEF6-415f-AFAC-070D64074C5D}"
                name="Watermark filter">
        <Input  guid="{b8cf8530-5562-47c4-ab67-b1f69ecf961e}" comment="IID_IXpsDocumentProvider"/>
        <Output guid="{4368d8a2-4181-4a9f-b295-3d9a38bb9ba0}" comment="IID_IXpsDocumentConsumer"/>
    </Filter>
 <Filter dll="XDScale.dll"
 clsid="{B9B52406-92D3-4721-86E6-3CF78F6D5FC5}"
 name="Page Scaling filter">
 <Input guid="{4d47a67c-66cc-4430-850e-daf466fe5bc4}" comment="IID_IPrintReadStream"/>
 <Output guid="{65bb7f1b-371e-4571-8ac7-912f510c1a38}" comment="IID_IPrintWriteStream"/>
 </Filter>
    <Filter      dll="XDColMan.dll"
 clsid="{8E56FC37-0799-447e-A643-16F4FB18244C}"
 name="Colour Management filter">
         <Input guid="{b8cf8530-5562-47c4-ab67-b1f69ecf961e}" comment="IID_IXpsDocumentProvider"/>
        <Output guid="{4368d8a2-4181-4a9f-b295-3d9a38bb9ba0}" comment="IID_IXpsDocumentConsumer"/>
    </Filter>
    <Filter      dll="XDBook.dll"
 clsid="{7DFC96C6-CEA2-46d8-B354-887C47B7986D}"
                name="Booklet filter">
         <Input guid="{b8cf8530-5562-47c4-ab67-b1f69ecf961e}" comment="IID_IXpsDocumentProvider"/>
        <Output guid="{4368d8a2-4181-4a9f-b295-3d9a38bb9ba0}" comment="IID_IXpsDocumentConsumer"/>
    </Filter>
    <Filter      dll="XDNUp.dll"
 clsid="{1b5bee16-511c-440f-8017-2123f481091a}"
                name="NUp filter">
         <Input guid="{b8cf8530-5562-47c4-ab67-b1f69ecf961e}" comment="IID_IXpsDocumentProvider"/>
        <Output guid="{4368d8a2-4181-4a9f-b295-3d9a38bb9ba0}" comment="IID_IXpsDocumentConsumer"/>
    </Filter>
</Filters>

プライベート キーワード

XPSDrv 構成モジュール は、DrvDocumentEvent 関数呼び出し中に XPS ドライバー ドキュメント イベント を処理するときに、PrintTicket エントリにプライベートキーワード配置できます。 これらの PrintTicket エントリは、印刷フィルター パイプラインの処理フィルターによって読み取られ、フィルターは PrintTicket を読み取ります。

フィルター パイプライン プロパティ バッグ

構成モジュールでは、フィルター パイプライン プロパティ バッグ を使用してデータを格納したり、フィルター パイプラインに情報を渡したりすることもできます。 プロパティ バッグを使用して構成サービスを公開するには、構成モジュールが DrvPopulateFilterServices メソッドを エクスポートする 必要があります。 さらに、フィルター パイプライン構成ファイルには、各サービスの <FilterServiceProvider> 要素を含める必要があります。 プロバイダー モジュールは、DllCanUnloadNow 関数を実装してエクスポートする必要があります。 通常、これらのプロバイダーは、COM インターフェイスをプロパティ バッグに発行します。 これらのインターフェイスが使用されている間、プロバイダーは読み込まれた状態を維持する必要があります。

もう 1 つの要素 <OptionalFilterServiceProvider> を使用すると、サービス プロバイダー dll が使用できない場合に、パイプライン マネージャーで印刷ジョブを続行できます。 個々のフィルターは、オプションのサービス プロバイダーがない場合の動作を定義する必要があります。 それ以外の場合、<FilterServiceProvider> が使用され、dll を読み込むことができない場合、ジョブは失敗します。 <OptionalFilterServiceProvider> 要素は、Windows 7 以降でサポートされています。

次のコード例は、 DrvPopulateFilterServices 関数を示しています:

HRESULT
DrvPopulateFilterServices(
    __in IPrintPipelinePropertyBag  *pPropertyBag
    );

前の関数の詳細については、DrvPopulateFilterServices を参照してください。

次のコード例は、フィルター パイプライン構成ファイル内の <FilterServiceProvider> 要素の XML 構文を示しています。

<Filters>
    <Filter ... />
    <FilterServiceProvider dll = "providerA.dll"/>
    <FilterServiceProvider dll = "providerB.dll"/>
</Filters>

出力デバイスのインターリーブ モード

インターリーブ とは、XPS ドキュメントの個々のリソース 部分を FixedPage ドキュメント パーツと共にストリーミングする方法を指します。 フィルター パイプラインが、パイプライン内の XPS ドキュメント インターフェイスを使用して最初のフィルターの XPS ドキュメント オブジェクト モデルを作成すると、XPS スプール ファイルのインターリーブ順序に従う必要がなくなります。 ただし、XPS ドキュメント インターフェイスを使用するパイプラインの最後のフィルターでは、XPS コンテンツをシリアル化するときに使用するパイプラインのフィルター構成ファイルでインターリーブ順序を指定できます。 出力デバイスまたは出力ファイルと最も互換性のあるインターリーブ順序を選択すると、後続のドキュメント処理のパフォーマンスが向上します。

次のフィルター例は、インターリーブ オプションの使用方法を示すために変更された、前のフィルター構成ファイルの例からの抜粋です。 この例では、図の目的で両方の <インターリーブ> オプションを示していますが、実際のフィルター構成ファイルには、フィルター定義内のインターリーブ要素が 1 つだけあります。

    <Filter     dll="XDNUp.dll"
      clsid="{1b5bee16-511c-440f-8017-2123f481091a}"
        name="NUp filter">
      <Input guid="{b8cf8530-5562-47c4-ab67-b1f69ecf961e}" comment="IID_IXpsDocumentProvider"/>
       <Output guid="{4368d8a2-4181-4a9f-b295-3d9a38bb9ba0}" comment="IID_IXpsDocumentConsumer"/>
     <Interleaving mode="ResourcesFirst"\>
     <Interleaving mode="MarkupFirst"\>
    </Filter>

フィルター パイプラインでは、次のインターリーブ順序がサポートされています。

  • ResourcesFirst インターリーブ順序は、各依存リソースを、リソースに依存する FixedPage の前にストリーミングします。 このインターリーブ順序は、プリンター ドライバーと直接消費プリンターに適しています。これは、レンダリングが開始される直前に、プリンターがテキストとページコンテンツをレンダリングするために必要なフォントと画像リソースを提供するためです。

  • MarkupFirst インターリーブ順序は、ドキュメントのテキストとマークアップ、および実際のリソースをストリームする前にリソースがどのように使用されるかに関する情報をストリームします。 このインターリーブ順序は、アーカイブ ファイルの宛先と、ドキュメントをオンラインで表示するアプリケーションに最適です。

アーカイブ最適化 XPS 出力

この機能により、印刷ドライバーは、アーカイブ最適化 XPS 出力をスプール ファイルとして明示的に要求できます。 Windows 8 では、Microsoft XPS Document Writer v4 (MXDW) は、Microsoft XPS Document Converter (MXDC) の MXDW でのみ使用できるコード パスを介して、このアーカイブ対応 XPS 出力を生成します。 そのため、印刷ドライバーは、MXDC からこのアーカイブ最適化 XPS を生成できます。

次のコード例は、フィルター パイプライン構成ファイルで <Archive> 要素を使用してこの機能を有効にするための XML 構文を示しています。

<Filters>
    ...
    <Archive enabled="true"/>
</Filters>