Compatibilidad con controladores para OpenXPS
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.
OpenXPS es el formato de Open XML Paper Specification para documentos y se basa en la especificación estándar Ecma International.
Para obtener la información más actualizada sobre esta especificación, consulte Open XML Paper Specification.
Windows 8 proporciona compatibilidad completa con OpenXPS, en paralelo con la compatibilidad continua con el formato Microsoft XPS existente. Este tema se centra en la compatibilidad con OpenXPS a través del modelo de controlador v4. Para obtener información sobre la compatibilidad con OpenXPS que sea relevante para los desarrolladores de aplicaciones de Windows, consulte Compatibilidad de aplicaciones para la impresión de OpenXPS.
Escenarios de OpenXPS admitidos
La ruta de impresión de Windows se ha desarrollado para asegurarse de que el formato XPS enviado coincide con un formato compatible del controlador de impresión de destino y convertirá los formatos según sea necesario. Windows también proporciona API para consultar el controlador de impresión, de modo que la aplicación pueda proporcionar elementos compatibles y evitar cualquier conversión adicional dentro del sistema de impresión.
Un controlador de impresión puede usar su manifiesto para indicar si admite Microsoft XPS, Open XPS o ambos formatos. Microsoft XPS u OpenXPS se pueden presentar a los filtros de la canalización de filtro de impresión mediante las interfaces de flujo y modelo de objetos (OM) existentes: los controladores no requieren nuevas interfaces para admitir OpenXPS. El formato que se presenta a los filtros depende del formato admitido por el controlador o del formato proporcionado por la aplicación.
El Escritor de documentos XPS de Microsoft (MXDW) se ha actualizado para permitir que MXDW pueda generar Microsoft XPS u OpenXPS desde cualquier aplicación de escritorio de Windows. Del mismo modo, el Visor de Microsoft XPS y la aplicación Lector en Windows 8 pueden abrir ambos formatos XPS. Si es necesario, los usuarios pueden imprimir desde el Visor XPS a MXDW para convertir formatos.
Escenarios de OpenXPS no admitidos
No se admite alguna funcionalidad heredada o proporciona una experiencia degradada cuando se usa con OpenXPS.
No admitido: el envío de archivos OpenXPS directamente al administrador de trabajos de impresión (omitiendo la API de impresión XPS) es un escenario no admitido. Al hacerlo, se producirán los siguientes problemas de funcionalidad:
Los archivos de la cola de XPS enviados directamente al administrador de trabajos de impresión se tratarán como MSXPS y se controlarán en consecuencia.
Los resultados de enviar un archivo OpenXPS directamente al administrador de trabajos de impresión no están definidos y probablemente provocarán un error en el trabajo de impresión.
Nota No hay planes para proporcionar compatibilidad con este escenario.
No recomendado: el envío de una secuencia de OpenXPS desde una aplicación directamente a a la API de impresión XPS no es una técnica recomendada. Por ejemplo, no envíe una secuencia de OpenXPS directamente al método StartXPSPrintJob. Si lo hace, la conversión resultante de un tipo de XPS a otro como secuencia puede ser muy costosa para el rendimiento.
En su lugar, debe usar IPrintDocumentPackageTarget para enviar el trabajo de impresión como un OM XPS para evitar la degradación del rendimiento.
No recomendado: enviar un archivo de cola de XPS directamente al administrador de trabajos de impresión. Si lo hace, el sistema de impresión no encontrará los metadatos necesarios agregados por las API de ruta de impresión, supongamos que el formato es MSXPS, e intentará convertirlo a OpenXPS. Si el archivo de cola que se envió directamente al administrador de trabajos de impresión era un archivo con formato OpenXPS, el intento por parte de la canalización de filtro de impresión para "convertirlo" en OpenXPS tendrá resultados indefinidos. Si el archivo enviado al administrador de trabajos de impresión era un archivo con formato MSXPS y el controlador es un controlador de solo OpenXPS, la conversión por parte de la canalización de filtro de impresión a OpenXPS se realizará correctamente. Pero esta conversión tardía provocará una pérdida significativa en el rendimiento del sistema de impresión.
Impacto en los desarrolladores de aplicaciones
Para obtener información sobre el impacto en los desarrolladores de aplicaciones con respecto a la compatibilidad de Windows 8 con OpenXPS, consulte Compatibilidad de aplicaciones para la impresión de OpenXPS.
Impacto en los desarrolladores de controladores
Estos son los pasos básicos para habilitar OpenXPS en un controlador de impresión v4:
Manifiesto del controlador: agregue "OpenXPS" a la sección Driver Render.
Manifiesto del controlador: agregue "oxps" a la sección FileSave, si procede.
Canalización de filtro: actualice los filtros de impresión para controlar los elementos OpenXPS.
Para una secuencia determinada y con las interfaces de objeto adecuadas, un cliente puede usar el formato OpenXPS para transferir datos a los filtros de la canalización de filtro de impresión. Para transferir un flujo de datos, el cliente usa las interfaces IID_IPrintReadStream y IID_IPrintWriteStream. Para transferir datos a un componente de OM, el cliente usa las interfaces IID_IXpsDocumentProvider y IID_IXpsDocumentConsumer. Los controladores que declaran compatibilidad con OpenXPS tendrán que asegurarse de que los filtros de impresión proporcionados pueden controlar correctamente el formato OpenXPS cuando se recibe este formato desde el administrador de canalizaciones.
Manifiesto del controlador: sección DriverRender. Durante la instalación del controlador, el proceso de instalación comprueba la sección DriverRender del manifiesto para ver si la entrada XpsFormat incluye OpenXPS. La entrada XpsFormat puede incluir XPS (para Microsoft XPS) y OpenXPS, para indicar compatibilidad dual. El orden en el que se enumeran los dos formatos en la entrada XpsFormat determina el formato preferido para el controlador.
Estos son algunos ejemplos de cómo actualizar la sección DriverRender.
Indica la compatibilidad solo con OpenXPS:
[DriverRender]
XpsFormat = OpenXPS
Indica la compatibilidad solo con MSXPS:
[DriverRender]
XpsFormat = XPS
Indica la compatibilidad con ambos formatos, con una preferencia para OpenXPS:
[DriverRender]
XpsFormat = OpenXPS,XPS
Indica la compatibilidad con ambos formatos, con una preferencia para MSXPS:
[DriverRender]
XpsFormat = XPS,OpenXPS
El desarrollador del controlador determina el formato preferido para su controlador de impresión V4 y esta decisión se basa en la funcionalidad que el controlador ha diseñado para proporcionar. Por ejemplo, se podría desarrollar un controlador de impresión para proporcionar compatibilidad con JPEG XR para imágenes de alta fidelidad.
El sistema de impresión toma varias decisiones basadas en la información de DriverRender del manifiesto. Estos son algunos ejemplos de decisiones:
Trabajos de impresión basados en GDI enviados a controladores v4
El Convertidor de documentos XPS de Microsoft (MXDC) toma la entrada del trabajo de impresión GDI y convierte el trabajo en un archivo de cola XPS. El formato de ese archivo de cola coincidirá con el formato XPS preferido indicado en la sección DriverRender del manifiesto.
Conversión de formato de API de impresión XPS
La API de impresión XPS consultará los formatos XPS admitidos para el controlador de destino. Si el controlador admite ambos formatos, la API de impresión XPS pasará el trabajo de impresión XPS al administrador de trabajos de impresión tal como lo envía la aplicación. No se realizará ninguna conversión.
Si el controlador de destino solo admite uno u otro formato, el trabajo se convertirá al formato correcto antes de ponerse en cola.
Si no se proporciona XpsFormat en el manifiesto, el comportamiento solo se aplicará a MSXPS. La entrada OpenXPS se convertirá en MSXPS. Este comportamiento proporciona la compatibilidad con versiones anteriores más sólida para los controladores.
Archivos XPS enviados directamente al administrador de trabajos de impresión
Los archivos XPS enviados directamente al administrador de trabajos de impresión son, de forma predeterminada, MSXPS. No se admite el envío de OpenXPS directo al administrador de trabajos de impresión. Sin embargo, .NET anterior a la versión 4.5+ serializó su propio MSXPS y envió el trabajo directamente al administrador de trabajos de impresión. Este comportamiento se implementó antes de la introducción de la API de impresión XPS (xpsprint.dll).
Para proporcionar compatibilidad con versiones anteriores para estas aplicaciones .NET, el administrador de canalizaciones de filtro de impresión comprobará el archivo de cola para determinar si se recibió directamente al administrador de trabajos de impresión. Si es así, se supone que es MSXPS. El administrador de canalizaciones de filtro de impresión consultará los formatos XPS del controlador en ese momento. Si el controlador admite MSXPS, no se realizará ninguna conversión. Si el controlador solo admite OpenXPS, el administrador de canalizaciones de filtro de impresión realizará una conversión del archivo. La conversión en este momento del trabajo es costosa para el rendimiento; sin embargo, garantiza que las aplicaciones .NET heredadas podrán imprimir en nuevos controladores OpenXPS v4.
Manifiesto del controlador: sección FileSave. La sección FileSave del manifiesto del controlador de impresión v4 proporciona extensiones para el cuadro de diálogo Guardar archivo usado por PORTPROMPT: puerto. (PORTPROMPT: debe usarse en lugar de FILE: en Windows 8.1, porque PORTPROMPT: permitirá a los usuarios acceder a todas las ubicaciones de archivos a las que tienen derechos, incluso cuando la aplicación se ejecuta en modo restringido). Las entradas de la sección FileSave están asociadas a las entradas de la sección DriverRender por índice.
Ejemplo:
[FileSave]
xps=0
oxps=0
[DriverRender]
XpsFormat=XPS,OpenXPS
Esto garantizará que cuando el usuario envíe un trabajo de impresión a este controlador y el puerto esté establecido en PORTPROMPT:, el cuadro de diálogo Guardar archivo mostrará XPS y OpenXPS como opciones de tipo de archivo en el cuadro de diálogo y aplicará .xps u .oxps respectivamente, como extensión de archivo.
Para obtener más información sobre otras opciones para la sección Guardar archivo del manifiesto, consulte Manifiesto del controlador V4.