Compartir a través de


archivo de configuración de canalización de filtros

Importante

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 la guía de diseño de aplicaciones de soporte técnico de 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 serializa 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 procesamiento de documentos posterior.

El siguiente filtro de ejemplo es un extracto del archivo de configuración de 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 el fin de la ilustración, un archivo de configuración de filtro real solo tiene un <elemento Interleaving> 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 pedidos de intercalación:

  • El orden de intercalación ResourcesFirst transmite cada recurso dependiente antes de fixedPage que depende del recurso. Este orden de intercalación es adecuado para los controladores de impresora y para las impresoras de consumo directo, ya que proporciona los recursos de fuente e imagen que la impresora requiere para representar el texto y el contenido de la página justo antes de que comience la representación.

  • El orden de intercalación MarkupFirst transmite el texto y el marcado del documento y la información sobre cómo se usará un recurso antes de que transmite el recurso real. Este orden de intercalación es el mejor para los destinos de archivo de archivo y para las aplicaciones que ven el documento en línea.

salida Archive-Optimized XPS

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, Microsoft XPS Document Writer 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>