Filter Pipeline Configuration File (Arquivo de configuração de pipeline de filtro)
Importante
A plataforma de impressão moderna é o meio preferencial do Windows para se comunicar com as impressoras. Recomendamos que você use o driver de classe de caixa de entrada IPP da Microsoft juntamente com PSA (Aplicativos de Suporte à Impressão) para personalizar a experiência de impressão no Windows 10 e 11 para o desenvolvimento de dispositivos de impressora.
Para obter mais informações, consulte Plataformade impressão moderna e o Guia de design do aplicativo de suporte de impressão.
O arquivo de configuração do pipeline de filtro é um arquivo XML que define o seguinte:
Ordem dos filtros no pipeline. Essa ordem é definida pela sequência dos elementos XML no arquivo de configuração do pipeline de filtros.
Interfaces de filtro. Essas interfaces são definidas por atributos XML no arquivo de configuração do pipeline de filtros.
Formatos de entrada e saída para cada filtro. Esses formatos são definidos por elementos XML no arquivo de configuração do pipeline de filtros.
O exemplo de código a seguir mostra um típico arquivo de configuração de pipeline de filtros:
<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>
Palavras-chave privadas
Um módulo de configuração XPSDrv pode inserir palavras-chave privadas na entrada PrintTicket quando ele lida com um evento de documento de driver XPS durante uma chamada de função DrvDocumentEvent. Essas entradas PrintTicket são lidas pelos filtros de processamento no pipeline de filtros de impressão enquanto os filtros leem o PrintTicket.
Conjunto de propriedades do pipeline de filtros
Um módulo de configuração também pode usar o conjunto de propriedades do pipeline de filtros para armazenar dados ou passar informações para um pipeline de filtros. Para expor os serviços de configuração usando o conjunto de propriedades, é necessário que o módulo de configuração exporte o método DrvPopulateFilterServices. Além disso, o arquivo de configuração do pipeline de filtros deve incluir o elemento <FilterServiceProvider> para cada serviço. O módulo do provedor deve implementar e exportar a função DllCanUnloadNow. Normalmente, esses provedores publicam interfaces COM no conjunto de propriedades. O provedor deve permanecer carregado enquanto essas interfaces estiverem em uso.
Outro elemento, <OptionalFilterServiceProvider>, permite que o gerenciador do pipeline continue o trabalho de impressão se a dll do provedor de serviços não estiver disponível. Os filtros individuais devem definir seu comportamento na ausência do provedor de serviços opcional. Caso contrário, se <FilterServiceProvider> for usado e a dll não puder ser carregada, o trabalho falhará. O elemento <OptionalFilterServiceProvider> é compatível com o Windows 7 e versões posteriores.
O exemplo de código a seguir mostra a função DrvPopulateFilterServices:
HRESULT
DrvPopulateFilterServices(
__in IPrintPipelinePropertyBag *pPropertyBag
);
Para mais informações sobre a função anterior, consulte DrvPopulateFilterServices.
O exemplo de código a seguir exibe a sintaxe XML para o elemento <FilterServiceProvider> no arquivo de configuração do pipeline de filtros:
<Filters>
<Filter ... />
<FilterServiceProvider dll = "providerA.dll"/>
<FilterServiceProvider dll = "providerB.dll"/>
</Filters>
Modo de intercalação para o dispositivo de saída
A intercalação refere-se a como as partes individuais de recursos de um documento XPS são transmitidas junto com as partes do documento FixedPage. Quando o pipeline de filtros cria o modelo de objeto do documento XPS para o primeiro filtro com interfaces de documento XPS no pipeline, a ordem de intercalação do arquivo spool XPS deixa de ser seguida. No entanto, o último filtro no pipeline que usa a interface de documento XPS pode especificar uma ordem de intercalação no arquivo de configuração do filtro para o pipeline utilizar ao serializar o conteúdo XPS. Selecionar a ordem de intercalação mais compatível com um dispositivo de saída ou um arquivo de saída pode melhorar o desempenho do processamento subsequente de documentos.
O exemplo de filtro a seguir é um trecho do arquivo de configuração do filtro anterior modificado para mostrar como usar a opção de intercalação. Embora este exemplo mostre as duas opções de intercalação para fins de ilustração, um arquivo real de configuração de filtro contém somente um elemento de <Intercalação> na definição do filtro:
<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>
O pipeline de filtros é compatível com as seguintes ordens de intercalação:
A ordem de intercalação ResourcesFirst transmite cada recurso dependente antes da FixedPage que depende do recurso. Essa ordem de intercalação é adequada para drivers de impressora e para impressoras de consumo direto, pois fornece os recursos de fonte e imagem que a impressora precisa para renderizar o texto e o conteúdo da página logo antes de o processo de renderização começar.
A ordem de intercalação MarkupFirst transmite o texto e a marcação do documento e as informações sobre como um recurso será utilizado antes de transmitir o recurso propriamente dito. Essa ordem de intercalação é ideal para destinos de arquivo morto e para aplicativos que exibem o documento online.
Saída XPS otimizada para arquivos
Esse recurso permite que os drivers de impressão solicitem explicitamente a saída XPS otimizada para arquivos como um arquivo de spool. No Windows 8, o MXDW (Gravador de documentos do Microsoft XPS v4) gera essa saída XPS pronta para arquivos através de um caminho de código disponível apenas para MXDW no Conversor de documento do Microsoft XPS (MXDC). Assim, um driver de impressão pode gerar essa saída XPS otimizada para arquivos a partir do MXDC.
O exemplo de código a seguir exibe a sintaxe XML para usar o elemento <Archive> no arquivo de configuração do pipeline de filtros para ativar esse recurso:
<Filters>
...
<Archive enabled="true"/>
</Filters>