Compartir a través de


Arquitectura de IU de controlador V4

Importante

La plataforma de impresión moderna es el medio preferido de Windows para comunicarse con impresoras. Se recomienda usar el controlador de clase de bandeja de entrada IPP de Microsoft, junto con aplicaciones de soporte técnico de impresión (PSA), para personalizar la experiencia de impresión en Windows 10 y 11 para el desarrollo de dispositivos de impresora.

Para obtener más información, consulte Plataforma de impresión moderna y la Guía de diseño de aplicaciones para compatibilidad con impresión.

Un objetivo de diseño general para la arquitectura del controlador v4 era proporcionar compatibilidad integrada con la interfaz de usuario de las aplicaciones de Microsoft Store.

El paradigma de la interfaz de usuario basada en la aplicación que se emplea es un ejemplo claro de esto. Las aplicaciones de dispositivos para UWP proporcionan a los usuarios una experiencia de pantalla completa que se admite en la interfaz de usuario de la aplicación de Microsoft Store. Las aplicaciones de dispositivos para UWP para imprimir proporcionan extensibilidad para las preferencias de impresión y las notificaciones de impresora para impresoras que admiten el controlador de impresión v4. Las aplicaciones de dispositivos para UWP para imprimir también proporcionan visibilidad para el dispositivo de impresión en la nueva pantalla Inicio.

Las aplicaciones de extensión de impresora admiten preferencias de impresión y notificaciones de impresora cuando los usuarios ejecutan aplicaciones existentes en el escritorio de Windows. Aunque las interfaces de usuario de estas aplicaciones son muy diferentes, con una adaptada para la función táctil y otra optimizada para los usuarios de mouse y teclado, la lógica de negocios y la conexión a los controladores de impresión v4 pueden ser similares, independientemente de la interfaz de usuario.

En el diagrama siguiente se muestra una arquitectura general de las aplicaciones de dispositivo de Microsoft Store para los ejemplos de extensión de impresora y controlador de impresión v4 que se proporcionan en GitHub.

información general sobre la arquitectura de interfaz de usuario personalizada.

Como se muestra en el diagrama anterior, la arquitectura basada en modelos, vistas y controladores permite que las aplicaciones compartan código en la capa de modelo, escrita en C#.

Extensión de PrinterExtensionLibrary

El proyecto PrinterExtensionLibrary que se distribuye en los distintos ejemplos se puede ampliar mediante nuevas clases o ampliando el conjunto proporcionado de clases. Dado que Microsoft realiza actualizaciones periódicamente en el código de ejemplo, se recomienda que los partners minimicen el número de cambios de código que realicen en los archivos de origen proporcionados. En el caso de los partners que amplíen el conjunto proporcionado de clases, se recomienda marcar las clases existentes como "parciales" y agregar nuevas funciones o invalidaciones en un archivo de código fuente independiente.

Uso compartido de archivos binarios compilados entre aplicaciones para UWP y aplicaciones de escritorio

El proyecto PrinterExtensionLibrary que se envía en la aplicación de dispositivo de Microsoft Store y los ejemplos de extensión de impresora utilizan el mismo código fuente, pero puede ser útil compilar el código para que sea portátil entre los proyectos sin compilarse por separado para cada proyecto. Para que el código del proyecto PrinterExtensionLibrary sea portátil, debe convertir el proyecto en una biblioteca de clases portátil. Realice los siguientes pasos para realizar la conversión.

  1. En Microsoft Visual Studio, haga clic en Archivo>Nuevo>Proyecto y busque "Portable" en el cuadro Buscar plantillas instaladas.

  2. Seleccione Portable Class Library Visual C#, proporcione un nombre para el proyecto en el cuadro de texto Nombre y haga clic en Aceptar.

  3. Copie el código fuente del proyecto PrinterExtensionLibrary existente en el nuevo proyecto.

  4. Haga clic con el botón derecho en el proyecto Portable Class Library y elija Descargar. A continuación, abra el archivo .csproj y agregue la siguiente sección al archivo, justo antes de la última etiqueta del 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>
    
  5. Si ve advertencias como resultado de referencias COM, agregue lo siguiente a la etiqueta <PropertyGroup>:

<ResolveComReferenceSilent>true</ResolveComReferenceSilent>

API para escenarios de interfaz de usuario de impresión

Se ha desarrollado una API como parte del modelo de controlador de impresión v4 para admitir extensiones de impresora y aplicaciones de dispositivos para UWP para imprimir. A nivel general, el escenario de preferencias de impresión usa PrintTicket, PrintCapabilities y los nuevos contenedores de propiedades para obtener y almacenar toda su información. Las notificaciones de impresora están controladas por un nuevo sistema de eventos basado en el esquema de comunicación bidireccional (bidi) y este nuevo sistema usa el protocolo AsyncUI entre el cliente y el servidor. La naturaleza centrada en datos de esta API significa que una aplicación podría admitir fácilmente muchos dispositivos.

Las extensiones de impresora deben compilarse de forma que puedan degradarse correctamente si los datos solicitados no están disponibles. Por ejemplo, si una característica PrintCapabilities determinada no está disponible o si una propiedad de uno de los contenedores de propiedades no está disponible, esto no debería impedir que el resto de la aplicación funcione. Al acceder a contenedores de propiedades o propiedades específicas en un contenedor de propiedades, la aplicación debe usar la sintaxis try-catch para asegurarse de que las excepciones que se producen no provocan que la aplicación se bloquee. Para obtener más información, consulte Interfaces de extensión de impresora.

Interfaces de extensión de impresora

Ejemplos de controladores de impresión v4 en GitHub