筛选器管道配置文件

重要

建议使用 Microsoft 的 IPP 收件箱类驱动程序,以及 Print Support Apps (PSA) ,在 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>

专用关键字

XPSDrv 配置模块DrvDocumentEvent 函数调用期间处理 XPS 驱动程序文档事件时,可以将专用关键字放在 PrintTicket 条目中。 然后,当筛选器读取 PrintTicket 时,打印筛选器管道中的处理筛选器将读取这些 PrintTicket 条目。

筛选器管道属性包

配置模块还可以使用 筛选器管道属性包 来存储数据或将信息传递给筛选器管道。 若要使用 属性包公开配置服务,配置模块必须导出 DrvPopulateFilterServices 方法。 此外,筛选器管道配置文件必须包含 <每个服务的 FilterServiceProvider> 元素。 提供程序模块必须实现并导出 DllCanUnloadNow 函数。 通常,这些提供程序在属性包中发布 COM 接口。 在使用这些接口时,提供程序必须保持加载状态。

另一个元素 <OptionalFilterServiceProvider> 允许管道管理器在服务提供程序 dll 不可用时继续打印作业。 在缺少可选服务提供程序的情况下,各个筛选器必须定义其行为。 否则,如果使用 <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) 通过代码路径生成此存档就绪 XPS 输出,该路径仅在 Microsoft XPS 文档转换器 (MXDC) 中供 MXDW 使用。 因此,打印驱动程序可以从 MXDC 生成此存档优化 XPS。

下面的代码示例演示了使用 <筛选器管道配置文件中的 Archive> 元素启用此功能的 XML 语法:

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