Suporte de driver para OpenXPS
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.
OpenXPS é o formato Open XML Paper Specification para documentos e é baseado na especificação padrão Ecma International.
Para obter as informações mais atualizadas sobre essa especificação, consulte Open XML Paper Specification.
O Windows 8 fornece suporte completo para OpenXPS, lado a lado com o suporte contínuo para o formato Microsoft XPS existente. Este tópico se concentra no suporte para OpenXPS por meio do modelo de driver v4. Para suporte OpenXPS relevante para desenvolvedores de aplicativos do Windows, consulte Suporte de aplicativos para impressão OpenXPS.
Cenários OpenXPS compatíveis
O caminho de impressão do Windows foi desenvolvido para garantir que o formato XPS enviado corresponda a um formato compatível com o driver de impressão de destino e converta os formatos conforme necessário. O Windows também fornece APIs para consultar o driver de impressão, de modo que o aplicativo possa fornecer elementos compatíveis e evitar qualquer conversão adicional dentro do sistema de impressão.
Um driver de impressão pode usar seu manifesto para indicar se é compatível com o Microsoft XPS, Open XPS ou os dois formatos. Tanto Microsoft XPS quanto OpenXPS podem ser apresentados aos filtros no pipeline de filtros de impressão, usando os modelos de fluxo e interface de objeto (OM) existentes. Nenhuma nova interface é necessária pelos drivers para oferecer suporte ao OpenXPS. O formato apresentado aos filtros depende do formato compatível com o driver ou do formato fornecido pelo aplicativo.
O Microsoft XPS Document Writer (MXDW) foi atualizado para permitir que o MXDW produza tanto Microsoft XPS quanto OpenXPS a partir de qualquer aplicativo da área de trabalho do Windows. Da mesma maneira, o Microsoft XPS Viewer e o aplicativo Reader no Windows 8 podem abrir os dois formatos XPS. Se necessário, os usuários podem imprimir do XPS Viewer para o MXDW a fim de converter formatos.
Cenários OpenXPS incompatíveis
Algumas funcionalidades herdadas não são compatíveis nem fornecem uma experiência de downgrade quando usadas com o OpenXPS.
Incompatível: o envio de arquivos OpenXPS diretamente para o spooler (ignorando a API de Impressão XPS) é um cenário incompatível. Fazer isso produzirá os seguintes problemas de funcionalidade:
Os arquivos de spool XPS enviados diretamente para o spooler serão tratados como MSXPS e manipulados adequadamente.
Os resultados de enviar um arquivo OpenXPS diretamente para o spooler são indefinidos e provavelmente farão com que o trabalho de impressão falhe.
Observação Não há planos para fornecer suporte para esse cenário.
Não recomendado: enviar um fluxo OpenXPS de um aplicativo diretamente para a API de impressão XPS não é uma técnica recomendada. Por exemplo, não envie um fluxo OpenXPS diretamente para o método StartXPSPrintJob. Se fizer isso, a conversão resultante de uma variação de XPS para outra como um fluxo pode ser muito custosa para o desempenho.
Em vez disso, é preciso usar IPrintDocumentPackageTarget para enviar o trabalho de impressão como um OM XPS para evitar degradação de desempenho.
Não recomendado: enviar um arquivo de spool XPS diretamente para o spooler. Se fizer isso, o sistema de impressão não encontrará os metadados necessários adicionados pelas APIs de caminho de impressão, assumirá que o formato é MSXPS e tentará convertê-lo para OpenXPS. Se o arquivo de spool enviado diretamente para o spooler for um arquivo formatado em OpenXPS, a tentativa do pipeline de filtros de impressão de "convertê-lo" para OpenXPS terá resultados indefinidos. Se o arquivo que foi enviado ao spooler era um arquivo formatado em MSXPS e o driver for um driver exclusivo para OpenXPS, a conversão pelo pipeline de filtros de impressão para OpenXPS será bem-sucedida. Porém, essa conversão em uma fase tão avançada resultará em uma perda significativa no desempenho do sistema de impressão.
Impacto sobre desenvolvedores de aplicativos
Para obter informações sobre o impacto sobre os desenvolvedores de aplicativos em relação ao suporte do Windows 8 para OpenXPS, consulte Suporte de aplicativos para impressão OpenXPS.
Impacto sobre desenvolvedores de driver
Veja a seguir as etapas básicas para habilitar o OpenXPS em um driver de impressão v4:
Manifesto do driver: adicione "OpenXPS" à seção Renderização do driver.
Manifesto do driver: adicione "oxps" à seção FileSave, se aplicável.
Pipeline de filtro: atualize os filtros de impressão para lidar com elementos OpenXPS.
Para um fluxo específico, e com as interfaces de objeto adequadas, um cliente pode usar o formato OpenXPS para transferir dados para os filtros no pipeline de filtros de impressão. Para transferir um fluxo de dados, o cliente usa as interfaces IID_IPrintReadStream e IID_IPrintWriteStream. Para transferir dados para um componente OM, o cliente usa as interfaces IID_IXpsDocumentProvider e IID_IXpsDocumentConsumer. Os drivers que declararem suporte para OpenXPS terão que garantir que os filtros de impressão fornecidos possam lidar corretamente com o formato OpenXPS quando esse formato for recebido do gerenciador de pipeline.
Manifesto do driver: seção DriverRender. Durante a instalação do driver, o processo de instalação verifica a seção DriverRender do manifesto para ver se a entrada XpsFormat inclui OpenXPS. A entrada XpsFormat pode incluir tanto XPS (para Microsoft XPS) quanto OpenXPS, para indicar suporte duplo. A ordem em que os dois formatos são listados na entrada XpsFormat determina o formato preferencial para o driver.
Veja a seguir alguns exemplos de como atualizar a seção DriverRender.
Indicar suporte somente para OpenXPS:
[DriverRender]
XpsFormat = OpenXPS
Indicar suporte somente para MSXPS:
[DriverRender]
XpsFormat = XPS
Indicar suporte para os dois formatos, com preferência por OpenXPS:
[DriverRender]
XpsFormat = OpenXPS,XPS
Indicar suporte para os dois formatos, com preferência por MSXPS:
[DriverRender]
XpsFormat = XPS,OpenXPS
O desenvolvedor do driver determina o formato preferencial para o driver de impressão V4, e essa decisão é baseada na funcionalidade que o driver foi projetado para fornecer. Por exemplo, um driver de impressão poderia ser desenvolvido para fornecer suporte a JPEG XR para imagens de alta fidelidade.
O sistema de impressão toma várias decisões com base nas informações do DriverRender no manifesto. Veja a seguir alguns exemplos dessas decisões:
Trabalhos de impressão baseados em GDI enviados para drivers v4
O Microsoft XPS Document Converter (MXDC) recebe a entrada do trabalho de impressão GDI e converte o trabalho em um arquivo de spool XPS. O formato desse arquivo de spool corresponderá ao formato XPS preferencial indicado na seção DriverRender do manifesto.
Conversão de formato da API de impressão XPS
A API de Impressão XPS consultará formatos XPS compatíveis com o driver de destino. Se o driver for compatível com os dois formatos, a API de Impressão XPS passará o trabalho de impressão XPS para o spooler CONFORME ENVIADO pelo aplicativo. Não será realizada nenhuma conversão.
Se o driver de destino for compatível somente com um dos formatos, o trabalho será convertido para o formato correto antes do spool.
Se nenhum XpsFormat for fornecido no manifesto, o comportamento padrão será MSXPS apenas. A entrada OpenXPS será convertida para MSXPS. Esse comportamento fornece a maior compatibilidade retroativa para os drivers.
Arquivos XPS enviados diretamente para o spooler
Os arquivos XPS enviados diretamente para o spooler são MSXPS por padrão. Não há suporte para o envio do OpenXPS diretamente ao spooler. No entanto, o .NET, antes da versão 4.5+, serializava seu próprio MSXPS e enviava o trabalho diretamente ao spooler. Esse comportamento foi implementado antes da introdução da API de Impressão XPS (xpsprint.dll).
Para proporcionar compatibilidade com versões anteriores a esses aplicativos .NET, o gerenciador do pipeline de filtros de impressão verificará o arquivo de spool para determinar se foi recebido diretamente no spooler. Se for assim, será considerado MSXPS. O gerenciador do pipeline de filtros de impressão consultará os formatos XPS do driver nesse ponto. Se o driver for compatível com o MSXPS, não será executada nenhuma conversão. Se o driver for compatível somente com o OpenXPS, o gerenciador do pipeline de filtros de impressão realizará uma conversão do arquivo. A conversão nesse ponto do trabalho é custosa em termos de desempenho; entretanto, garante que aplicativos .NET herdados possam imprimir em novos drivers OpenXPS v4.
Manifesto do driver: seção FileSave. A seção FileSave do manifesto do driver de impressão v4 fornece extensões para a caixa de diálogo Salvar Arquivo usada pela porta PORTPROMPT: (PORTPROMPT: deve ser usado em vez de FILE: no Windows 8.1, porque PORTPROMPT: permitirá que os usuários acessem todos os locais de arquivo aos quais têm direito, mesmo quando o aplicativo estiver em modo de baixo privilégio.) As entradas na seção FileSave estão associadas às entradas na seção DriverRender por índice.
Exemplo:
[FileSave]
xps=0
oxps=0
[DriverRender]
XpsFormat=XPS,OpenXPS
Isso garantirá que, quando o usuário enviar um trabalho de impressão para esse driver e a porta estiver definida como PORTPROMPT:, a caixa de diálogo Salvar Arquivo exibirá XPS e OpenXPS como opções de tipo de arquivo na caixa de diálogo e aplicará .xps ou .oxps, respectivamente, como a extensão do arquivo.
Para informações adicionais sobre outras opções para a seção Salvar Arquivo do manifesto, consulte Manifesto do Driver V4.