Compartilhar via


Suporte de aplicativo para impressão OpenXPS

OpenXPS é o formato Open XML Paper Specification para documentos e é baseado na especificação padrão ECMA (European Computer Manufacturers Association).

Windows 8 fornece suporte completo para impressão OpenXPS por meio do modelo de driver de impressão v4, lado a lado com suporte contínuo para o formato XPS da Microsoft. E este tópico se concentra na parte desse suporte que é relevante para os desenvolvedores de aplicativos do Windows. Para obter informações sobre os requisitos de driver para suporte a OpenXPS, consulte Suporte de driver para OpenXPS.

Enviando dados XPS para o sistema de impressão

Recomendamos que você use IPrintDocumentPackageTarget para enviar todos os trabalhos de impressão XPS para o sistema de impressão. IPrintDocumentPackageTarget aceita o OM (modelo de objeto) XPS sem serialização e isso ajuda a melhorar o desempenho geral.

Aqui está um breve resumo da interface IPrintDocumentPackageTarget :

  • Essa interface dá suporte à impressão de soluções personalizadas, bem como aplicativos da área de trabalho.

  • Para aplicativos de desktops, isso pode ser usado no lugar de StartXpsPrintJob1.

  • Disponível no Windows 7 com Service Pack 1 (SP1) + Atualização de Plataforma e Windows 8.

  • Inclua DocumentTarget.h em projetos para usar essas APIs.

Os aplicativos que consomem documentos OpenXPS devem observar que o tipo MIME para OpenXPS é o seguinte:

application\\oxps

Enviando dados OpenXPS para a API de Impressão do XPS

Específico do OpenXPS, o XPS OM aceita MSXPS e OpenXPS e fornece métodos para conversão e serialização em qualquer formato. Isso permite que os desenvolvedores de aplicativos sejam independentes do driver de destino, se desejarem. Isso também significa que os desenvolvedores de aplicativos sempre podem enviar trabalhos de impressão como OM XPS para StartXpsPrintJob1 ou IDocumentPackageTarget, sabendo que o sistema de impressão manipulará qualquer conversão necessária.

É claro que impedir a conversão entre formatos XPS melhorará o desempenho de ponta a ponta. No aplicativo, o desenvolvedor pode marcar a seguinte chave do Registro para determinar o formato XPS preferencial do driver de impressão de destino:

HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Print\Printers\[PrintDriverName]\PrintDriverData\XpsFormat

Depois que o formato XPS preferencial tiver sido determinado, o aplicativo poderá fornecer objetos OM XPS que não exigirão conversão. Uma observação específica é o uso de HD Photo em MSXPS e JPEGXR no OpenXPS. A conversão de JPEGXR para HD Photo é relativamente leve, pois a principal diferença nessa conversão é que o HD Photo ignora 4 bits de controle que o JPEGXR requer. No entanto, a conversão de HD Photo para JPEGXR requer que toda a imagem seja recodificada para gerar os bits de controle necessários. Assim, fornecer imagens JPEGXR para imagens de alta resolução garantirá a compatibilidade com o OpenXPS e minimizará o custo de conversão da imagem para MSXPS.

O cabeçalho Xpsobjectmodel_1.h define as APIs e objetos adicionais para OpenXPS. E a interface IXpsOMObjectFactory1 fornece métodos adicionais para conversão de imagem. Esta é a sintaxe:

IXpsOMObjectFactory1->ConvertHDPhotoToJpegXR(IXpsOMImageResource *imageResource);

IXpsOMObjectFactory1->ConvertJpegXRToHDPhoto(IXpsOMImageResource *imageResource);

Windows 8 fornece as seguintes enumerações novas e atualizadas.

Nova enumeração:

XPS_DOCUMENT_TYPE

Enumeração atualizada

XPS_IMAGE_TYPE

Os novos métodos GetDocumentType permitem que um aplicativo determine o formato XPS de documentos. Eles estão disponíveis em IXpsOMObjectFactory1, IXpsOMPackage1 e IXpsOMPage1. Aqui está uma lista dos métodos.

IXpsOMObjectFactory1::GetDocumentTypeFromFile
IXpsOMObjectFactory1::GetDocumentTypeFromStream
IXpsOMPackage1::GetDocumentType
IXpsOMPage1::GetDocumentType

Windows 8 fornece os seguintes novos códigos de erro com suporte ao OpenXPS:

XPS\_E\_MISMATCHED\_NAMESPACE.
Esse erro será retornado se houver um namespace incompatível.
XPS\_E\_ABSOLUTE\_REFERENCE.
Esse erro será retornado se o MSXPS usar URIs absolutos em referências internas ou tentar usar referências internas para serializar no fluxo. Isso ocorre porque o OM XPS gera URIs relativos. E embora o MSXPS dê suporte a URIs relativos e absolutos, o OpenXPS requer URIs relativos.

Suporte de driver para OpenXPS

IPrintDocumentPackageTarget

IXpsOMObjectFactory1::GetDocumentTypeFromFile

IXpsOMObjectFactory1::GetDocumentTypeFromStream

IXpsOMPackage1::GetDocumentType

IXpsOMPage1::GetDocumentType

XPS_DOCUMENT_TYPE

XPS_IMAGE_TYPE