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


Файл конфигурации конвейера фильтра

Важно!

Мы рекомендуем использовать драйвер класса "Входящие" от Майкрософт 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. Выбор порядка чередование, наиболее совместимого с устройством вывода или выходным файлом, может повысить производительность последующей обработки документов.

Следующий пример фильтра представляет собой выдержку из предыдущего файла конфигурации фильтра, который был изменен, чтобы показать, как использовать параметр чередование. Хотя в этом примере показаны оба варианта чередование для иллюстрации, реальный файл конфигурации фильтра содержит только один <элемент Чередование> в определении фильтра:

    <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 Archive-Optimized

Эта функция позволяет драйверам печати явно запрашивать оптимизированные для архива выходные данные XPS в виде файла очереди. В Windows 8 средство записи документов Microsoft XPS версии 4 (MXDW) создает эти готовые к архиву выходные данные XPS с помощью пути кода, доступного только MXDW в Microsoft XPS Document Converter (MXDC). Таким образом, драйвер печати может создать этот оптимизированный для архива XPS из MXDC.

В следующем примере кода показан синтаксис XML для использования <элемента Archive> в файле конфигурации конвейера фильтра для включения этой функции:

<Filters>
    ...
    <Archive enabled="true"/>
</Filters>