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


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

Внимание

Современная платформа печати — это предпочтительный способ взаимодействия с принтерами 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>