Arquitetura da interface do usuário do driver V4
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.
Uma meta de design de alto nível para a arquitetura de driver v4 era fornecer suporte interno para a interface do usuário do aplicativo da Microsoft Store.
O paradigma de interface do usuário baseado em aplicativo empregado é um exemplo claro disso. Os aplicativos de dispositivo UWP fornecem aos usuários uma experiência de tela inteira com suporte na interface do usuário do aplicativo da Microsoft Store. Os aplicativos de dispositivo UWP para impressão fornecem extensibilidade para preferências de impressão e notificações de impressora para impressoras que dão suporte ao driver de impressão v4. Os aplicativos de dispositivo UWP para impressão também fornecem visibilidade para o dispositivo de impressão na nova tela inicial.
Os aplicativos de extensão de impressora dão suporte a preferências de impressão e notificações de impressora quando os usuários executam aplicativos existentes na área de trabalho do Windows. Embora as interfaces do usuário para esses aplicativos sejam muito diferentes, com uma adaptada para toque e outra otimizada para usuários de mouse e teclado, a lógica de negócios e a conexão com os drivers de impressão v4 ainda podem ser semelhantes, independentemente da interface do usuário.
O diagrama a seguir mostra uma arquitetura de alto nível dos aplicativos de dispositivo da Microsoft Store.
Conforme mostrado no diagrama anterior, a arquitetura baseada em modelo/exibição/controlador permite que os aplicativos compartilhem código na camada de modelo, escrito em C#.
Estendendo PrinterExtensionLibrary
O projeto PrinterExtensionLibrary fornecido nos vários exemplos pode ser estendido usando novas classes ou estendendo o conjunto de classes fornecido. Como a Microsoft faz atualizações periódicas no código de exemplo, recomendamos que os parceiros minimizem o número de alterações de código feitas nos arquivos de origem fornecidos. Para parceiros que estão estendendo o conjunto de classes fornecido, recomendamos que você marque as classes existentes como "parciais" e adicione novas funções ou substituições em um arquivo de origem separado.
Compartilhando binários compilados entre aplicativos UWP e aplicativos da área de trabalho
O projeto PrinterExtensionLibrary que é enviado no aplicativo de dispositivo da Microsoft Store e exemplos de extensão de impressora utiliza o mesmo código-fonte, mas pode ser valioso compilar o código para que ele seja portátil entre os projetos sem ser criado separadamente para cada projeto. Para tornar o código do projeto PrinterExtensionLibrary portátil, você precisa converter o projeto em uma Biblioteca de Classes Portátil. Execute as seguintes etapas para fazer a conversão.
No Microsoft Visual Studio, clique em Arquivo>Novo>Projeto e pesquise "Portátil" na caixa Pesquisar Modelos Instalados..
Selecione Biblioteca de Classes Portátil Visual C# e, em seguida, forneça um nome para o projeto na caixa de texto Nome e clique em OK.
Copie o código-fonte do projeto PrinterExtensionLibrary existente para o novo projeto.
Clique com o botão direito do mouse no projeto da Biblioteca de Classes Portátil e escolha Descarregar. Em seguida, abra o arquivo .csproj e adicione a seção a seguir ao arquivo, pouco antes da última marca no documento.
<ItemGroup> <COMReference Include="PrinterExtensionLib"> <Guid>{91CE54EE-C67C-4B46-A4FF-99416F27A8BF}</Guid> <VersionMajor>1</VersionMajor> <VersionMinor>0</VersionMinor> <Lcid>0</Lcid> <WrapperTool>tlbimp</WrapperTool> <Isolated>False</Isolated> <EmbedInteropTypes>True</EmbedInteropTypes> </COMReference> </ItemGroup>
Se você vir avisos como resultado de referências COM, adicione o seguinte à marcação <PropertyGroup>:
<ResolveComReferenceSilent>true</ResolveComReferenceSilent>
API para cenários de interface do usuário de impressão
Uma API foi desenvolvida como parte do modelo de driver de impressão v4 para dar suporte a Extensões de Impressora e aplicativos de dispositivo UWP para impressão. Em um alto nível, o cenário de preferências de impressão usa PrintTicket, PrintCapabilities e os novos recipientes de propriedades para obter e armazenar todas as suas informações. As notificações da impressora são controladas por um novo sistema de eventos baseado no Esquema de Comunicação Bidirecional (Bidi) e esse novo sistema usa o protocolo AsyncUI entre cliente e servidor. A natureza centrada em dados dessa API significa que um aplicativo pode facilmente suportar muitos dispositivos.
As extensões de impressora precisam ser construídas de forma que possam ser degradadas normalmente se os dados solicitados não estiverem disponíveis. Por exemplo, se um determinado recurso PrintCapabilities não estiver disponível ou se uma propriedade em um dos recipientes de propriedades não estiver disponível, isso não deverá impedir que o restante do aplicativo funcione. Ao acessar recipientes de propriedades ou propriedades específicas em um recipiente de propriedades, o aplicativo deve usar a sintaxe try-catch para garantir que as exceções geradas não causem falha no aplicativo. Para obter mais informações, consulte Interfaces de extensão de impressora.