Filter Pipeline Configuration File (Arquivo de configuração de pipeline de filtro)

Importante

Recomendamos que você use o driver de classe de caixa de entrada IPP da Microsoft, juntamente com o PSA (Aplicativos de Suporte para Impressão), para personalizar a experiência de impressão em Windows 10 e 11 para o desenvolvimento de dispositivos de impressora.

Para obter mais informações, consulte o Guia de design do aplicativo de suporte para 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 ordenação dos elementos XML no arquivo de configuração do pipeline de filtro.

  • Filtrar interfaces. Essas interfaces são definidas por atributos XML no arquivo de configuração do pipeline de filtro.

  • 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 filtro.

O exemplo de código a seguir mostra um arquivo de configuração de pipeline de filtro típico:

<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 colocar palavras-chave privadas na entrada PrintTicket quando ele manipula 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 filtro de impressão enquanto os filtros estão lendo o PrintTicket.

Recipiente de propriedades do pipeline de filtro

Um módulo de configuração também pode usar o recipiente de propriedades do pipeline de filtro para armazenar dados ou passar informações para um pipeline de filtro. Para expor os serviços de configuração usando o recipiente de propriedades, o módulo de configuração deve exportar o método DrvPopulateFilterServices . Além disso, o arquivo de configuração do pipeline de filtro 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 recipiente de propriedades. O provedor deve permanecer carregado enquanto essas interfaces estão em uso.

Outro elemento, <OptionalFilterServiceProvider>, permite que o gerenciador de 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> tem suporte no Windows 7 e posterior.

O exemplo de código a seguir mostra a função DrvPopulateFilterServices :

HRESULT
DrvPopulateFilterServices(
    __in IPrintPipelinePropertyBag  *pPropertyBag
    );

Para obter mais informações sobre a função anterior, consulte DrvPopulateFilterServices.

O exemplo de código a seguir mostra a sintaxe XML para o <elemento FilterServiceProvider> no arquivo de configuração do pipeline de filtro:

<Filters>
    <Filter ... />
    <FilterServiceProvider dll = "providerA.dll"/>
    <FilterServiceProvider dll = "providerB.dll"/>
</Filters>

Modo de intercalação para o dispositivo de saída

Intercalação refere-se a como as partes de recursos individuais de um documento XPS são transmitidas junto com as partes do documento FixedPage. Quando o pipeline de filtro cria o modelo de objeto de documento XPS para o primeiro filtro com interfaces de documento XPS no pipeline, a ordem de intercalação do arquivo de spool XPS não é mais 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 de filtro para o pipeline a ser usado 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 de documentos subsequente.

O filtro de exemplo a seguir é um trecho do arquivo de configuração de filtro de exemplo anterior que foi modificado para mostrar como usar a opção de intercalação. Embora este exemplo mostre ambas as opções de intercalação para fins de ilustração, um arquivo de configuração de filtro real tem apenas um <elemento Interleaving> na definição de 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 filtro dá suporte aos seguintes pedidos de intercalação:

  • A ordem de intercalação ResourcesFirst transmite cada recurso dependente antes do FixedPage que depende do recurso. Essa ordem de intercalação é boa para drivers de impressora e para impressoras de consumo direto porque fornece os recursos de fonte e imagem que a impressora requer para renderizar o texto e o conteúdo da página pouco antes do início da renderização.

  • A ordem de intercalação MarkupFirst transmite o texto e a marcação do documento e as informações sobre como um recurso será usado antes de transmitir o recurso real. Essa ordem de intercalação é melhor para destinos de arquivo morto e para aplicativos que exibem o documento online.

Saída do Archive-Optimized XPS

Esse recurso permite que os drivers de impressão solicitem explicitamente a saída XPS com otimização de arquivo morto como um arquivo de spool. Em Windows 8, o Microsoft XPS Document Writer v4 (MXDW) produz essa saída XPS pronta para arquivo morto por meio de um caminho de código que só está disponível para MXDW no MXDC (Conversor de Documentos XPS da Microsoft). Portanto, um driver de impressão pode gerar esse XPS otimizado para arquivos do MXDC.

O exemplo de código a seguir mostra a sintaxe XML para usar o <elemento Archive> no arquivo de configuração do pipeline de filtro para habilitar esse recurso:

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