Поделиться через


Реализация фильтров XPS

Внимание

Современная платформа печати — это предпочтительный способ взаимодействия с принтерами Windows. Рекомендуется использовать драйвер класса "Входящие" Microsoft IPP вместе с приложениями поддержки печати (PSA), чтобы настроить возможности печати в Windows 10 и 11 для разработки устройств принтера.

Дополнительные сведения см. в статье "Современная платформа печати" и руководство по проектированию приложений поддержки печати.

Все фильтры XPS должны реализовать интерфейс IPrintPipelineFilter .

Во время вызова метода IPrintPipelineFilter::InitializeFilter фильтр должен:

  1. Кэшируйте указатель на интерфейс IPrintPipelineManagerControl .

  2. Обработка соответствующих данных в интерфейсе IPrintPipelinePropertyBag .

  3. Вызовите методы 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.

Фильтры в конвейере не должны отображать содержимое пользовательского интерфейса.

Следующие рекомендации применяются к фильтрам:

  • Фильтры не должны создавать отдельные процессы или потоки. Если требуется отдельный процесс или поток, фильтр должен правильно управлять процессом или временем существования потока.

  • Фильтры должны иметь изолированные функции. Все функциональные возможности и реализация должны быть модульными. По возможности устраняйте все зависимости порядка и функциональности между фильтрами.

  • Фильтры должны обрабатывать случай, в котором они помещаются в конвейер вне порядка. Если фильтр не находится в ожидаемом порядке, он не должен сбой и должен правильно обрабатывать ситуацию. Если фильтр зависит от другого фильтра, он должен корректно обрабатывать ситуацию, если зависимость не предоставлена.

Дополнительные сведения о добавлении асинхронного уведомления в фильтр см. в асинхронных уведомлениях в фильтрах печати.