筛选器管道配置文件
重要
新式打印平台是 Windows 与打印机通信的首选方式。 建议使用 Microsoft 的 IPP 收件箱类驱动程序以及打印支持应用 (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 内容时使用。 选择与输出设备或输出文件最兼容的交错顺序,可以提高后续文档处理的性能。
以下的筛选器示例是从前面的筛选器配置文件示例中摘录的,经过修改后显示了如何使用交错选项。 虽然本例显示了两个交错选项,但实际的筛选器配置文件中只有一个 <Interleaving> 元素:
<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 文档编写器 v4 (MXDW) 可通过代码路径生成这种存档就绪的 XPS 输出,该代码路径只有在 Microsoft XPS 文档转换器 (MXDC) 中的 MXDW 才能使用。 因此,打印驱动程序可以从 MXDC 生成经过存档优化的 XPS。
以下代码示例显示了在筛选器管道配置文件中使用 <Archive> 元素启用此功能的 XML 语法:
<Filters>
...
<Archive enabled="true"/>
</Filters>