实现 XPS 筛选器
重要
新式打印平台是 Windows 与打印机通信的首选方式。 建议使用 Microsoft 的 IPP 收件箱类驱动程序以及打印支持应用 (PSA) 来自定义 Windows 10 和 11 中的打印体验,以便进行打印机设备开发。
有关详细信息,请参阅新式打印平台和打印支持应用设计指南。
所有 XPS 筛选器都必须实现 IPrintPipelineFilter 接口。
在调用 IPrintPipelineFilter::InitializeFilter 方法的过程中,筛选器应:
缓存指向 IPrintPipelineManagerControl 接口的指针。
处理 IPrintPipelinePropertyBag 接口中的相关数据。
调用 IInterfilterCommunicator 接口 (pIInterFilterCom) 的 IInterFilterCommunicator::RequestReader 和 IInterFilterCommunicator::RequestWriter 方法,初始化筛选器的提供程序和使用者接口。
如果数据包含 PrintTicket 部分,则可以通过 Microsoft Win32 PrintTicket 或 PrintCapabilities API 来访问数据。 对于基于 XPSDrv 的 UniDrv 和 PScript5 驱动程序,筛选器可以访问作为其配置服务的 IPrintCoreHelper 接口核心的 Unidrv 或 PScript5 驱动程序。
根据驱动程序的设计,筛选器还可以通过属性包访问专有配置数据。
筛选器间通信器是筛选器管道管理器的一部分,用于处理筛选器管道中筛选器之间的通信。 在筛选器管道管理器初始化筛选器时,会向筛选器传递一个筛选器间通讯器接口 (IInterFilterCommunicator),以便筛选器获取为该筛选器定义的读写接口。
Microsoft 提供了 XPS 文档和流接口,但也可以创建自己的筛选器间接口,而这些接口就是为该筛选器定义的。 Microsoft 提供以下接口:
XPS 文档接口从 XPS 后台处理程序文件的不同部分进行读写。
XPS 流接口可读写串行数据流。 可以使用该接口将页描述语言 (PDL) 从筛选器写入不使用 XPS 作为 PDL 的打印机。
筛选器必须符合 XML 纸张规范 (XPS) 中定义的呈现规则和 PrintTicket 处理规则。
筛选器不得依赖于 Microsoft .NET 公共语言运行时 (CLR) 或 Microsoft WinFX 运行时组件。
管道中的筛选器不得显示用户界面内容。
以下建议适用于筛选器:
筛选器不应创建单独的进程或线程。 如果需要单独的进程或线程,则筛选器必须妥善管理进程或线程的生存期。
筛选器应具有独立的功能。 所有功能和实现都应模块化。 尽可能消除筛选器之间的顺序和功能依赖关系。
筛选器应处理不按顺序放入管道的情况。 当筛选器不在预期的顺序中时,它不应该崩溃,而应该正常地处理这种情况。 如果一个筛选器依赖于另一个筛选器,那么在没有提供依赖项的情况下,它应该能正常处理。
有关在筛选器中添加异步通知的详细信息,请参阅打印筛选器中的异步通知。