archivo de configuración de canalización de filtros
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.
El archivo de configuración de canalización de filtro es un archivo XML que define lo siguiente:
Orden de los filtros de la canalización. Este orden se define mediante la ordenación de los elementos XML en el archivo de configuración de canalización de filtro.
Interfaces de filtro. Estas interfaces se definen mediante atributos XML en el archivo de configuración de canalización de filtro.
Formatos de entrada y salida para cada filtro. Estos formatos se definen mediante elementos XML en el archivo de configuración de canalización de filtro.
En el ejemplo de código siguiente se muestra un archivo de configuración de canalización de filtro típico:
<Filters>
<Filter dll="XDWMark.dll"
clsid="{D647D658-BEF6-415f-AFAC-070D64074C5D}"
name="Watermark filter">
<Input guid="{b8cf8530-5562-47c4-ab67-b1f69ecf961e}" comment="IID_IXpsDocumentProvider"/>
<Output guid="{4368d8a2-4181-4a9f-b295-3d9a38bb9ba0}" comment="IID_IXpsDocumentConsumer"/>
</Filter>
<Filter dll="XDScale.dll"
clsid="{B9B52406-92D3-4721-86E6-3CF78F6D5FC5}"
name="Page Scaling filter">
<Input guid="{4d47a67c-66cc-4430-850e-daf466fe5bc4}" comment="IID_IPrintReadStream"/>
<Output guid="{65bb7f1b-371e-4571-8ac7-912f510c1a38}" comment="IID_IPrintWriteStream"/>
</Filter>
<Filter dll="XDColMan.dll"
clsid="{8E56FC37-0799-447e-A643-16F4FB18244C}"
name="Colour Management filter">
<Input guid="{b8cf8530-5562-47c4-ab67-b1f69ecf961e}" comment="IID_IXpsDocumentProvider"/>
<Output guid="{4368d8a2-4181-4a9f-b295-3d9a38bb9ba0}" comment="IID_IXpsDocumentConsumer"/>
</Filter>
<Filter dll="XDBook.dll"
clsid="{7DFC96C6-CEA2-46d8-B354-887C47B7986D}"
name="Booklet filter">
<Input guid="{b8cf8530-5562-47c4-ab67-b1f69ecf961e}" comment="IID_IXpsDocumentProvider"/>
<Output guid="{4368d8a2-4181-4a9f-b295-3d9a38bb9ba0}" comment="IID_IXpsDocumentConsumer"/>
</Filter>
<Filter dll="XDNUp.dll"
clsid="{1b5bee16-511c-440f-8017-2123f481091a}"
name="NUp filter">
<Input guid="{b8cf8530-5562-47c4-ab67-b1f69ecf961e}" comment="IID_IXpsDocumentProvider"/>
<Output guid="{4368d8a2-4181-4a9f-b295-3d9a38bb9ba0}" comment="IID_IXpsDocumentConsumer"/>
</Filter>
</Filters>
Palabras clave privadas
Un módulo de configuración XPSDrv puede colocar palabras clave privadas en la entrada PrintTicket cuando controla un evento de documento del controlador XPS durante una llamada a la función DrvDocumentEvent. A continuación, los filtros de procesamiento de la canalización de filtro de impresión leen estas entradas PrintTicket mientras los filtros leen PrintTicket.
Contenedor de propiedades de canalización de filtro
Un módulo de configuración también puede usar el contenedor de propiedades de canalización de filtro para almacenar datos o pasar información a una canalización de filtro. Para exponer los servicios de configuración mediante el contenedor de propiedades, el módulo de configuración debe exportar el método DrvPopulateFilterServices. Además, el archivo de configuración de canalización de filtro debe incluir el elemento <FilterServiceProvider> para cada servicio. El módulo de proveedor debe implementar y exportar la función DllCanUnloadNow. Normalmente, estos proveedores publican interfaces COM en el contenedor de propiedades. El proveedor debe permanecer cargado mientras estas interfaces están en uso.
Otro elemento, <OptionalFilterServiceProvider>, permite que el administrador de canalizaciones continúe con el trabajo de impresión si el archivo DLL del proveedor de servicios no está disponible. Los filtros individuales deben definir su comportamiento en ausencia del proveedor de servicios opcional. De lo contrario, si se usa <FilterServiceProvider> y no se puede cargar el archivo DLL, se produce un error en el trabajo. El elemento <OptionalFilterServiceProvider> se admite en Windows 7 y versiones posteriores.
En el ejemplo de código siguiente se muestra la función DrvPopulateFilterServices:
HRESULT
DrvPopulateFilterServices(
__in IPrintPipelinePropertyBag *pPropertyBag
);
Para obtener más información sobre la función anterior, consulte DrvPopulateFilterServices.
En el ejemplo de código siguiente se muestra la sintaxis XML del elemento <FilterServiceProvider> en el archivo de configuración de canalización de filtro:
<Filters>
<Filter ... />
<FilterServiceProvider dll = "providerA.dll"/>
<FilterServiceProvider dll = "providerB.dll"/>
</Filters>
Modo de intercalación para el dispositivo de salida
La intercalación hace referencia a cómo se transmiten las partes de recursos individuales de un documento XPS junto con los elementos del documento FixedPage. Cuando la canalización de filtro crea el modelo de objetos de documento XPS para el primer filtro con interfaces de documento XPS en la canalización, ya no se sigue el orden de intercalación del archivo de cola XPS. Sin embargo, el último filtro de la canalización que usa la interfaz de documento XPS puede especificar un orden de intercalación en el archivo de configuración de filtro para que la canalización la use cuando serialice el contenido XPS. Seleccionar el orden de intercalación que sea más compatible con un dispositivo de salida o un archivo de salida puede mejorar el rendimiento del posterior procesamiento de documentos.
El siguiente filtro de ejemplo es un extracto del archivo de configuración del filtro de ejemplo anterior que se ha modificado para mostrar cómo usar la opción de intercalación. Aunque en este ejemplo se muestran ambas opciones de intercalación con fines de ilustración, un archivo de configuración de filtro real solo tiene un elemento de <intercalación> en la definición de filtro:
<Filter dll="XDNUp.dll"
clsid="{1b5bee16-511c-440f-8017-2123f481091a}"
name="NUp filter">
<Input guid="{b8cf8530-5562-47c4-ab67-b1f69ecf961e}" comment="IID_IXpsDocumentProvider"/>
<Output guid="{4368d8a2-4181-4a9f-b295-3d9a38bb9ba0}" comment="IID_IXpsDocumentConsumer"/>
<Interleaving mode="ResourcesFirst"\>
<Interleaving mode="MarkupFirst"\>
</Filter>
La canalización de filtro admite los siguientes órdenes de intercalación:
El orden de intercalación ResourcesFirst transmite cada recurso dependiente antes de la FixedPage que depende del recurso. Este orden de intercalación es adecuado para controladores de impresora y para impresoras de consumo directo porque proporciona los recursos de fuente e imagen que la impresora necesita para representar el texto y el contenido de página justo antes de que comience la representación.
El orden de intercalación MarkupFirst transmite el texto y las marcas del documento y la información sobre cómo se utilizará un recurso antes de transmitir el recurso real. Este orden de intercalación es el mejor para los destinos de archivos de archivado y para las aplicaciones que visualizan el documento en línea.
Salida XPS optimizada para archivo
Esta característica permite a los controladores de impresión solicitar explícitamente la salida XPS optimizada para archivo como un archivo de cola. En Windows 8, el Escritor de documentos de Microsoft XPS v4 (MXDW) genera esta salida XPS lista para archivo a través de una ruta de acceso de código que solo está disponible para MXDW en el Convertidor de documentos de Microsoft XPS (MXDC). Por lo tanto, un controlador de impresión puede generar este XPS optimizado para archivo desde MXDC.
En el ejemplo de código siguiente se muestra la sintaxis XML para usar el elemento <Archive> en el archivo de configuración de canalización de filtro para habilitar esta característica:
<Filters>
...
<Archive enabled="true"/>
</Filters>