Файл конфигурации конвейера фильтра
Внимание
Современная платформа печати — это предпочтительный способ взаимодействия с принтерами 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 может поместить частные ключевые слова в запись PrintTicket при обработке события документа драйвера XPS во время вызова функции DrvDocumentEvent. Затем эти записи PrintTicket считываются фильтрами обработки в конвейере фильтра печати, а фильтры считывают PrintTicket.
Фильтр контейнера свойств конвейера
Модуль конфигурации также может использовать контейнер свойств конвейера фильтра для хранения данных или передачи сведений в конвейер фильтра. Чтобы предоставить службы конфигурации с помощью контейнера свойств, модуль конфигурации должен экспортировать метод DrvPopulateFilterServices . Кроме того, файл конфигурации конвейера фильтра должен содержать <элемент FilterServiceProvider> для каждой службы. Модуль поставщика должен реализовать и экспортировать функцию DllCanUnloadNow . Как правило, эти поставщики публикуют COM-интерфейсы в контейнере свойств. Поставщик должен оставаться загруженным во время использования этих интерфейсов.
Другой элемент <, OptionalFilterServiceProvider>, позволяет диспетчеру конвейера продолжить задание печати, если библиотека dll поставщика услуг недоступна. Отдельные фильтры должны определять их поведение в отсутствие необязательного поставщика услуг. В противном случае, если <используется FilterServiceProvider> и не удается загрузить библиотеку DLL, задание завершается ошибкой. Элемент <OptionalFilterServiceProvider> поддерживается в Windows 7 и более поздних версиях.
В следующем примере кода показана функция DrvPopulateFilterServices :
HRESULT
DrvPopulateFilterServices(
__in IPrintPipelinePropertyBag *pPropertyBag
);
Дополнительные сведения о предыдущей функции см. в разделе DrvPopulateFilterServices.
В следующем примере кода показан синтаксис XML для <элемента FilterServiceProvider> в файле конфигурации конвейера фильтра:
<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 передает каждый зависимый ресурс перед ФиксированнымPage, который зависит от ресурса. Этот порядок переключения подходит для драйверов принтера и для принтеров прямого потребления, так как он предоставляет ресурсы шрифта и изображения, необходимые принтеру для отрисовки текста и страницы непосредственно перед началом отрисовки.
Порядок взаимодействия MarkupFirst передает текст документа и разметку и сведения о том, как будет использоваться ресурс перед потоковой передачей фактического ресурса. Этот порядок взаимодействия лучше всего подходит для назначения архивных файлов и приложений, просматривающих документ в Интернете.
Выходные данные XPS, оптимизированные для архива
Эта функция позволяет драйверам печати явно запрашивать выходные данные XPS, оптимизированные для архива, в виде файла spool. В Windows 8 средство записи документов Microsoft XPS версии 4 (MXDW) создает эти готовые к архиву выходные данные XPS через путь кода, доступный только MXDW в конвертере документов Microsoft XPS (MXDC). Таким образом, драйвер печати может создать этот оптимизированный для архива XPS из MXDC.
В следующем примере кода показан синтаксис XML для использования <элемента Archive> в файле конфигурации конвейера фильтра, чтобы включить эту функцию:
<Filters>
...
<Archive enabled="true"/>
</Filters>