篩選管線設定檔

重要

建議您使用 Microsoft 的 IPP 收件匣類別驅動程式,以及列印支援應用程式 () ,來自訂印表機裝置開發Windows 10和 11 中的列印體驗。

如需詳細資訊,請參閱 列印支援應用程式設計指南

篩選管線組態檔是定義下列各項的 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>

Private 關鍵字

XPSDrv 組態模組可以在DrvDocumentEvent函式呼叫期間處理XPS 驅動程式檔事件時,將私用關鍵字放在 PrintTicket 專案中。 這些 PrintTicket 專案接著會由列印篩選管線中的處理篩選讀取,而篩選準則則是讀取 PrintTicket。

篩選管線屬性包

組態模組也可以使用 篩選管線屬性包 來儲存資料,或將資訊傳遞至篩選管線。 若要使用屬性包公開設定服務,組態模組必須匯出 DrvPopulateFilterServices 方法。 此外,篩選管線組態檔必須包含< 每個服務的 FilterServiceProvider >元素。 提供者模組必須實作並匯出 DllCanUnloadNow 函式 。 這些提供者通常會在屬性包中發佈 COM 介面。 當這些介面正在使用時,提供者必須保持載入狀態。

如果服務提供者 dll 無法使用,另一個元素< OptionalFilterServiceProvider >可讓管線管理員繼續列印工作。 個別篩選準則必須在沒有選擇性服務提供者的情況下定義其行為。 否則,如果使用< FilterServiceProvider >且無法載入 dll,作業就會失敗。 Windows 7 和更新版本支援OptionalFilterServiceProvider > 元素。 <

下列程式碼範例顯示 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 內容時使用。 選取與輸出裝置或輸出檔案最相容的交錯順序,可以改善後續檔處理的效能。

下列範例篩選是先前範例篩選組態檔的摘錄,已修改以示範如何使用交錯選項。 雖然本範例會針對圖例目的顯示這兩個交錯選項,但實際的篩選組態檔在篩選定義中只有一個< 交錯 >專案:

    <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交錯順序會串流檔文字和標記,以及資源在串流實際資源之前如何使用的資訊。 此交錯順序最適合封存檔案目的地,以及線上檢視檔的應用程式。

Archive-Optimized XPS 輸出

此功能可讓列印驅動程式明確地要求封存優化的 XPS 輸出作為多工緩衝處理檔案。 在 Windows 8 中,Microsoft XPS 檔寫入器 v4 (MXDW) 透過只有 Microsoft XPS 檔轉換程式 (MXDC) 中的 MXDW 程式碼路徑產生此封存可用的 XPS 輸出。 因此,列印驅動程式可以從 MXDC 產生此封存優化的 XPS。

下列程式碼範例示範在 < 篩選管線組態檔中使用 Archive > 元素來啟用此功能的 XML 語法:

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