Реализация фильтров XPS
Внимание
Современная платформа печати — это предпочтительный способ взаимодействия с принтерами Windows. Рекомендуется использовать драйвер класса "Входящие" Microsoft IPP вместе с приложениями поддержки печати (PSA), чтобы настроить возможности печати в Windows 10 и 11 для разработки устройств принтера.
Дополнительные сведения см. в статье "Современная платформа печати" и руководство по проектированию приложений поддержки печати.
Все фильтры XPS должны реализовать интерфейс IPrintPipelineFilter .
Во время вызова метода IPrintPipelineFilter::InitializeFilter фильтр должен:
Кэшируйте указатель на интерфейс IPrintPipelineManagerControl .
Обработка соответствующих данных в интерфейсе IPrintPipelinePropertyBag .
Вызовите методы IInterFilterCommunicator::RequestReader и IInterFilterCommunicator::RequestWriter интерфейса IInterfilterCommunicator (pIInterFilterCom), чтобы инициализировать поставщик и потребительские интерфейсы для фильтра.
Если данные содержат раздел PrintTicket, вы можете получить доступ к данным через API Microsoft Win32 PrintTicket или PrintCapabilities. Для драйверов UniDrv и PScript5, основанных на XPSDrv, фильтры могут иметь доступ к ядру интерфейса IPrintCoreHelper Unidrv или PScript5 в качестве службы конфигурации.
Фильтры также могут иметь доступ к собственным данным конфигурации через контейнер свойств в зависимости от дизайна драйвера.
Взаимодействие между фильтрами — это часть диспетчера конвейера фильтров, которая обрабатывает обмен данными между фильтрами в конвейере фильтров. Когда диспетчер конвейера фильтров инициализирует фильтр, интерфейс inter-Filter Communicator (IInterFilterCommunicator) передается в фильтр, чтобы фильтр смог получить интерфейсы чтения и записи, определенные для этого фильтра.
Корпорация Майкрософт предоставляет интерфейсы документа XPS и потоковой передачи, но вы можете создать собственные интерфейсы взаимодействия, определенные для этого фильтра. Корпорация Майкрософт предоставляет следующие интерфейсы:
Интерфейс документов XPS считывает и записывает данные из разных частей файла spool XPS.
Интерфейс потока XPS считывает и записывает последовательный поток данных. Этот интерфейс можно использовать для записи языка описания страницы (PDL) из фильтра на принтер, который не использует XPS в качестве PDL.
Фильтры должны соответствовать правилам отрисовки и правилам обработки PrintTicket, определенным в спецификации XML-бумаги (XPS).
Фильтры не должны зависеть от компонентов среды CLR или среды выполнения Microsoft WinFX.
Фильтры в конвейере не должны отображать содержимое пользовательского интерфейса.
Следующие рекомендации применяются к фильтрам:
Фильтры не должны создавать отдельные процессы или потоки. Если требуется отдельный процесс или поток, фильтр должен правильно управлять процессом или временем существования потока.
Фильтры должны иметь изолированные функции. Все функциональные возможности и реализация должны быть модульными. По возможности устраняйте все зависимости порядка и функциональности между фильтрами.
Фильтры должны обрабатывать случай, в котором они помещаются в конвейер вне порядка. Если фильтр не находится в ожидаемом порядке, он не должен сбой и должен правильно обрабатывать ситуацию. Если фильтр зависит от другого фильтра, он должен корректно обрабатывать ситуацию, если зависимость не предоставлена.
Дополнительные сведения о добавлении асинхронного уведомления в фильтр см. в асинхронных уведомлениях в фильтрах печати.