Implementación de filtros XPS
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.
Todos los filtros XPS deben implementar la interfaz IPrintPipelineFilter.
Durante la llamada al método IPrintPipelineFilter::InitializeFilter, un filtro debe:
Almacenar en caché el puntero a la interfaz IPrintPipelineManagerControl.
Procesar los datos pertinentes en la interfaz IPrintPipelinePropertyBag.
Llamar a los métodos IInterFilterCommunicator::RequestReader y IInterFilterCommunicator::RequestWriter de la interfaz IInterfilterCommunicator (pIInterFilterCom) para inicializar las interfaces de proveedor y consumidor para el filtro.
Si los datos contienen una sección PrintTicket, puede acceder a los datos mediante la API PrintTicket o PrintCapabilities de Microsoft Win32. En el caso de los controladores UniDrv y PScript5 basados en XPSDrv, los filtros pueden tener acceso al controlador Unidrv o PScript5 de la interfaz IPrintCoreHelper como servicio de configuración.
Los filtros también pueden acceder a los datos de configuración propietarios a través del contenedor de propiedades, en función del diseño del controlador.
El comunicador entre filtros es la parte del Administrador de canalizaciones de filtro que controla la comunicación entre los filtros de la canalización de filtro. Cuando el Administrador de canalizaciones de filtro inicializa un filtro, se pasa una interfaz del comunicador entre filtros (IInterFilterCommunicator) al filtro para que este pueda obtener las interfaces de lectura y escritura definidas para ese filtro.
Microsoft proporciona las interfaces de transmisión y documento XPS, pero puede crear sus propias interfaces de interfiltro definidas para ese filtro. Microsoft proporciona las siguientes interfaces:
La interfaz de documento XPS lee y escribe de diferentes partes de un archivo de cola XPS.
La interfaz de flujo XPS lee y escribe un flujo serie de datos. Puede usar esta interfaz para escribir el lenguaje de descripción de página (PDL) desde un filtro a una impresora que no use XPS como PDL.
Los filtros deben cumplir las reglas de representación y las reglas de procesamiento de PrintTicket definidas en XML Paper Specification (XPS).
Los filtros no deben depender de Microsoft .NET Common Language Runtime (CLR) ni de los componentes de Microsoft WinFX Runtime.
Los filtros de la canalización no deben mostrar el contenido de la interfaz de usuario.
Las siguientes recomendaciones se aplican a los filtros:
Los filtros no deben crear procesos o subprocesos independientes. Si se requiere un proceso o subproceso independiente, el filtro debe administrar correctamente la duración del proceso o del subproceso.
Los filtros deben tener funcionalidad aislada. Toda la funcionalidad y la implementación deben ser modulares. Elimine cualquier orden y dependencias de funcionalidad entre filtros siempre que sea posible.
Los filtros deben controlar el caso en el que se colocan en la canalización fuera de orden. Cuando un filtro no está en el orden esperado, no debe bloquearse y debe controlar la situación correctamente. Si un filtro depende de otro, debe controlar la situación correctamente si no se proporciona la dependencia.
Para obtener más información sobre cómo agregar la notificación asincrónica al filtro, consulte Notificaciones asincrónicas en filtros de impresión.