Compartilhar via


Implementando filtros XPS

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.

Todos os filtros XPS devem implementar a interface IPrintPipelineFilter.

Durante a chamada para o método IPrintPipelineFilter::InitializeFilter, um filtro deve:

  1. Armazenar em cache o ponteiro para a interface IPrintPipelineManagerControl.

  2. Processar dados relevantes na interface IPrintPipelinePropertyBag.

  3. Chamar os métodos IInterFilterCommunicator::RequestReader e IInterFilterCommunicator::RequestWriter da interface IInterfilterCommunicator (pIInterFilterCom) para inicializar as interfaces de provedor e consumidor para o filtro.

Se os dados contiverem uma seção PrintTicket, será possível acessar os dados por meio da API PrintTicket ou PrintCapabilities do Microsoft Win32. Para drivers UniDrv e PScript5 baseados em XPSDrv, os filtros podem ter acesso ao driver Unidrv ou PScript5 principal da interface IPrintCoreHelper como o serviço de configuração.

Os filtros também podem acessar dados de configuração proprietários por meio do conjunto de propriedades, dependendo do design do driver.

O Comunicador entre filtros é a parte do Gerenciador de Pipeline de Filtro que lida com a comunicação entre filtros no pipeline de filtros. Quando o Gerenciador de Pipeline de Filtros inicializa um filtro, uma interface do Comunicador entre filtros (IInterFilterCommunicator) é transferida para o filtro para que o filtro possa obter as interfaces de leitura e gravação definidas para esse filtro.

A Microsoft fornece o documento XPS e as interfaces de fluxo, mas é possível criar suas próprias interfaces entre filtros definidas para esse filtro. A Microsoft fornece as seguintes interfaces:

  • A interface do documento XPS lê e grava de diferentes partes de um arquivo de spool XPS.

  • A interface de fluxo XPS lê e grava um fluxo serial de dados. É possível usar essa interface para gravar a linguagem de descrição de página (PDL) de um filtro para uma impressora que não usa XPS como PDL.

Os filtros devem estar em conformidade com as regras de renderização e as regras de processamento do PrintTicket definidas na XML Paper Specification (XPS).

Os filtros não devem depender dos componentes CLR (Tempo de execução de linguagem comum) do Microsoft .NET. ou Microsoft WinFX Runtime.

Os filtros no pipeline não devem exibir o conteúdo da interface do usuário.

As seguintes recomendações se aplicam aos filtros:

  • Os filtros não devem criar processos ou threads separados. Se um processo ou thread separado for necessário, o filtro deverá gerenciar adequadamente o processo ou o tempo de vida do thread.

  • Os filtros devem ter funcionalidade isolada. Todas as funcionalidades e implementação devem ser modulares. Elimine quaisquer dependências de ordem e funcionalidade entre os filtros sempre que possível.

  • Os filtros devem lidar com o caso em que são colocados no pipeline fora de ordem. Quando um filtro não está na ordem esperada, ele não deve travar e deve lidar com a situação normalmente. Se um filtro depender de outro filtro, ele deverá lidar com a situação normalmente se a dependência não for fornecida.

Para mais informações sobre como adicionar notificações assíncronas ao filtro, consulte Notificações assíncronas em filtros de impressão.