Implementando filtros XPS
Importante
A moderna plataforma de impressão é o meio preferido do Windows para comunicar com as impressoras. Recomendamos que utilize o controlador de classe da caixa de entrada IPP da Microsoft, juntamente com as Aplicações de Suporte de Impressão (PSA), 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 o guia de design do aplicativo de suporte Print.
Todos os filtros XPS devem implementar a interface IPrintPipelineFilter.
Durante a chamada para o método IPrintPipelineFilter::InitializeFilter, um filtro deve:
Armazene em cache o ponteiro para a interface IPrintPipelineManagerControl.
Processe dados relevantes na interface IPrintPipelinePropertyBag.
Chame os métodos IInterFilterCommunicator::RequestReader e IInterFilterCommunicator::RequestWriter da interface IInterfilterCommunicator (pIInterFilterCom) para inicializar as interfaces do fornecedor e do consumidor para o filtro.
Se os dados contiverem uma seção PrintTicket, você poderá acessá-los por meio da API Microsoft Win32 PrintTicket ou PrintCapabilities. Para drivers UniDrv e PScript5 baseados em XPSDrv, os filtros podem ter acesso ao IPrintCoreHelper interface core Unidrv ou PScript5 como seu serviço de configuração.
Os filtros também podem acessar dados de configuração proprietários através do pacote de propriedades, dependendo do design do driver.
O Inter-Filter Communicator é a parte do Filter Pipeline Manager que lida com a comunicação entre filtros no pipeline de filtros. Quando o Gestor de Pipeline de Filtros inicializa um filtro, uma interface do Inter-Filter Communicator (IInterFilterCommunicator) é passada para o filtro, permitindo que o filtro obtenha as interfaces de leitura e escrita definidas para esse filtro.
A Microsoft fornece o documento XPS e interfaces de fluxo, mas você pode criar suas próprias interfaces entre filtros que são definidas para esse filtro. A Microsoft fornece as seguintes interfaces:
A interface do documento XPS lê e grava a partir de diferentes partes de um arquivo de spool XPS.
A interface de fluxo XPS lê e grava um fluxo serial de dados. Você pode usar essa interface para escrever 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 PrintTicket definidas na XML Paper Specification (XPS).
Os filtros não devem depender do Microsoft .NET Common Language Runtime (CLR) ou dos componentes do Microsoft WinFX Runtime.
Os filtros no pipeline não devem exibir o conteúdo da interface do usuário.
As seguintes recomendações aplicam-se 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 a vida útil do thread.
Os filtros devem ter funcionalidade isolada. Todas as funcionalidades e implementação devem ser modulares. Elimine todas as dependências de ordem e funcionalidade entre filtros sempre que possível.
Os filtros devem ser capazes de lidar com a situação em que são colocados fora de ordem na linha de processamento. Quando um filtro não está na ordem esperada, ele não deve falhar e deve lidar com a situação graciosamente. Se um filtro depender de outro filtro, ele deve lidar com a situação de forma adequada se a dependência não for fornecida.
Para obter mais informações sobre como adicionar notificação assíncrona ao filtro, consulte notificações assíncronas em Filtros de impressão.