Compartir a través de


Filtros XPS estándar

Importante

Se recomienda usar el controlador de clase de bandeja de entrada IPP de Microsoft, junto con las 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.

Windows proporciona dos filtros XPS (estándar) para admitir la conversión integrada de XPS a PCL6 y postScript nivel 3.

Los filtros proporcionados por Windows están disponibles tanto para los controladores de clase de impresión como para los controladores de impresión v4 específicos del modelo. Estos filtros XPS se pueden combinar con filtros de características de IHV, así como filtros de posprocesamiento de IHV, según sea necesario para garantizar la compatibilidad con las implementaciones de firmware existentes.

Los filtros XPS proporcionados por Windows no se pueden distribuir de nuevo y no están disponibles para los controladores de impresión v3.

El archivo de manifiesto

Para usar los filtros XPS proporcionados por Windows, el archivo de manifiesto del controlador v4 debe usar la directiva RequiredFiles en la sección DriverConfig para especificar los filtros. Estos son los nombres de los filtros:

MSxpsPCL6.dll. Proporciona conversión de XPS a PCL6. MSxpsPS.dll. Proporciona la conversión de XPS al nivel 3 de PostScript. No se requiere ninguna actualización inf para usar uno de estos filtros y no se admite la redistribución. Se recomienda que los usuarios descontinue el uso de estos filtros XPS.

Para configurar la canalización de filtro de impresión para usar estos filtros, debe crear archivos de configuración como se muestra en los ejemplos siguientes.

Archivo de configuración de ejemplo que especifica la conversión a PCL6.

<?xml version="1.0" encoding="utf-8"?>
<Filters>
  <Filter dll="MSxpsPCL6.dll" clsid="{3821E518-33AF-4d17-92B3-28EB410D46B6}" name="Microsoft XPS to PCL6">
    <Input guid="{4d47a67c-66cc-4430-850e-daf466fe5bc4}" comment="IID_IPrintReadStream" />
    <Output guid="{65bb7f1b-371e-4571-8ac7-912f510c1a38}" comment="IID_IPrintWriteStream" />
  </Filter>  
</Filters>

Archivo de configuración de ejemplo que especifica la conversión a PostScript.

<?xml version="1.0" encoding="utf-8"?>
<Filters>
  <Filter dll="MSxpsPS.dll" clsid="{8636D90A-5E03-4d62-9269-E06493C57473}" name="Microsoft XPS to PS">
    <Input guid="{4d47a67c-66cc-4430-850e-daf466fe5bc4}" comment="IID_IPrintReadStream" />
    <Output guid="{65bb7f1b-371e-4571-8ac7-912f510c1a38}" comment="IID_IPrintWriteStream" />
  </Filter>  
</Filters>

Funciones admitidas

Los filtros XPS estándar admiten muchas características comunes. Todas las definiciones de características usan el archivo GPD o PPD para el controlador. El filtro MSxpsPCL6.dll requiere el uso de un archivo GPD para la configuración y el filtro deMSxpsPS.dll requiere el uso de un archivo PPD para la configuración. A menos que se indique lo contrario, si se especifica un comando PDL personalizado para una característica, se usará.

Si existen cadenas de inyección en cualquier sección determinada (especificada con el comando *Order ), en el caso de los archivos GPD, el filtro realizará una serie de suposiciones sobre el contenido de esas cadenas y evitará enviar comandos predeterminados. Esto se debe a que el envío de comandos predeterminados en este caso podría provocar colisiones de comandos. Por lo tanto, el creador de un archivo GPD debe seguir estas directrices:

  • JOB_SETUP. #

    • Un encabezado de secuencia binaria PCL6 (por ejemplo: ")<SP>HP-PCL XL;1;< CR><LF>") debe existir.

    • Debe existir un operador BeginSession, incluidos todos los atributos necesarios.

    • Debe existir un operador OpenDataSource, incluidos todos los atributos necesarios.

  • PAGE_SETUP. #

    • Debe existir un operador BeginPage, incluidos todos los atributos necesarios.
  • PAGE_FINISH. #

    • Debe existir un operador EndPage.
  • JOB_FINISH. #

    • Debe existir un operador CloseDataSource.

    • Debe existir un operador EndSession.

    • Debe existir un operador EndPJLCommands.

Los filtros estándar XPS generan datos PDL adecuados para establecer el origen de una página, según los comandos *PrintableArea, *PrintableOrigin o *ImageableArea. Y para evitar un desplazamiento adicional del origen esperado, los archivos GPD no deben especificar ningún comando =SetPageOrigin en la definición de cadena *Cmd para su tamaño de papel.

Para obtener más información sobre las características printTicket compatibles con los filtros XPS estándar, consulte Características de PrintTicket admitidas.

Recuperar PrintTicket en filtros posteriores al procesamiento

En el modelo de controlador v4 que se publicó con Windows 8, cuando agregó un filtro posterior al procesamiento después de uno de los filtros MSxps, a veces también tenía que agregar un filtro de procesamiento previo. Se ha necesario agregar el filtro de preprocesamiento para capturar el vale de impresión de nivel de trabajo. Pero este enfoque básicamente agregó un filtro basado en el modelo de objetos, antes de uno de los filtros MSxps basados en secuencias, lo que da lugar a la deserialización y, a continuación, la serialización de los datos de impresión para simplemente extraer un PrintTicket.

En Windows 8.1, el valor predeterminado del usuario PrintTicket se combina con printTicket de nivel de trabajo en los filtros MSxps y, a continuación, se agrega el printTicket combinado al contenedor de propiedades de la canalización de filtros de impresión. PrintTicket combinado se agrega al contenedor de propiedades de Print Filter Pipeline de la misma manera que user printTicket. La propiedad se denomina de la siguiente manera:

#define XPS_FP_JOB_LEVEL_PRINTTICKET    "JobPrintTicket"

Durante InitializeFilter, los filtros MTI agregarán una implementación de IPrintReadStreamFactory en el contenedor de propiedades. Este método, GetStream, se bloqueará hasta que la secuencia PrintTicket esté disponible. Esto proporciona un medio para sincronizar el acceso a la propiedad .

Importante : Si se llama a GetStream desde InitializeFilter, provocará un interbloqueo.

Otras características

En el caso de las características printTicket que no son compatibles con los filtros XPS estándar, los filtros comprobarán todos los miembros printTicket para ver si se hace referencia a ellas en gpD/PPD y, a continuación, especificarán los comandos que se van a generar. Si es así, se generarán los comandos especificados.

Las características de GPD se asignan en el orden siguiente:

  1. Se especifica un valor PrintSchemaKeywordMap y coincide con el nombre de la característica PrintTicket.

  2. Se especifica el atributo PrintSchemaPrivateNamespaceURI y el nombre de la característica GPD coincide con el nombre de la característica PrintTicket. Los nombres de características coincidentes no son sencillos y siguen una serie de reglas:

    1. Si la sección *Order de la primera opción es PAGE_SETUP o PAGE_FINISH, y la característica GPD no comienza por "Page", "Page" se antepone al nombre de la característica GPD antes de intentar coincidir.

    2. Si la sección *Order de la primera opción es DOC_SETUP o DOC_FINISH, y la característica GPD no comienza por "Document", "Document" se antepone al nombre de la característica GPD antes de intentar coincidir.

    3. Si la sección *Order de la primera opción es JOB_SETUP o JOB_FINISH, y la característica GPD no comienza con "Job", "Job" se antepone al nombre de la característica GPD antes de intentar coincidir.

    4. Cualquier carácter que no sea [A-Z], [a-z], [0-9] o '_' se reemplaza por un carácter '_' antes de intentar coincidir. Sin embargo, si el *NoPunctuationCharSubstitute? el atributo se establece en TRUE y, a continuación, el filtro no reemplaza '.' o '-' por un carácter '_'.

Las características de PPD se asignan en el orden siguiente:

  1. Se especifica un valor PrintSchemaKeywordMap y coincide con el nombre de la característica PrintTicket.

  2. Se especifica el atributo PrintSchemaPrivateNamespaceURI y el nombre de la característica PPD coincide con el nombre de la característica PrintTicket. Los nombres de características coincidentes no son sencillos y siguen una serie de reglas:

    1. Si la sección OrderDependency es ExitServer, Prolog o JCLSetup, y el nombre de la característica PPD no comienza por "Job", "Job" se antepone al nombre de la característica PPD antes de intentar coincidir.

    2. Si la sección OrderDependency es DocumentSetup y el nombre de la característica PPD no comienza por "Document", "Document" se antepone al nombre de la característica PPD antes de intentar buscar coincidencias.

    3. Si la sección OrderDependency es AnySetup, el filtro realiza dos comprobaciones de coincidencia:

      1. Si el nombre de la característica PPD no comienza por "Document", "Document" se antepone al nombre de la característica PPD antes de intentar buscar coincidencias.

      2. Si no se encuentra ninguna coincidencia, o si el nombre de la característica PPD no comienza por "Trabajo", se antepone al nombre de la característica PPD antes de intentar coincidir.

    4. Si la sección OrderDependency es PageSetup y el nombre de la característica PPD no comienza por "Page", "Page" se antepone al nombre de la característica PPD antes de intentar coincidir.

    5. Cualquier carácter que no sea [A-Z], [a-z], [0-9] o '_' se reemplaza por un carácter '_' antes de intentar coincidir. Sin embargo, si el *MSNoPunctuationCharSubstitute? String se establece en TRUE, el filtro no reemplaza '.' o '-' por un carácter '_'.

Las opciones de GPD y PPD se asignan en el orden siguiente:

  1. Se especifica un valor PrintSchemaKeywordMap y coincide con el nombre de la opción PrintTicket.

  2. Se especifica el atributo PrintSchemaPrivateNamespaceURI y el nombre de la opción GPD/PPD coincide con el nombre de la opción PrintTicket. Los nombres de opción coincidentes no son sencillos y siguen una serie de reglas:

    1. Si el nombre de la opción GPD/PPD comienza por [0-9] o '_', se antepone un carácter '_' al nombre de la opción GPD/PPD antes de intentar coincidir. Sin embargo, se aplican las siguientes reglas adicionales:

      1. Si se trata de una opción GPD y *NoPunctuationCharSubstitute? el atributo se establece en TRUE y, a continuación, el filtro no antepone '_' con un carácter '_'.

      2. Si se trata de una opción PPD y *MSNoPunctuationCharSubstitute? string se establece en TRUE y el filtro no antepone '_' con un carácter '_'.

    2. Cualquier carácter que no sea [A-Z], [a-z], [0-9] o '_' se reemplaza por un carácter '_' antes de intentar coincidir. Sin embargo, se aplican las siguientes reglas adicionales:

      1. Si se trata de una opción GPD y *NoPunctuationCharSubstitute? el atributo se establece en TRUE y, a continuación, el filtro no reemplaza '.' o '-' por un carácter '_'.

      2. Si se trata de una opción PPD y *MSNoPunctuationCharSubstitute? string se establece en TRUE y, a continuación, el filtro no reemplaza '.' o '-' por un carácter '_'.

Asignación de formulario a bandeja

Los filtros XPS a PCL6 y XPS para PS admiten la tabla de asignación de formulario a bandeja. Si varias bandejas admiten el tamaño de medio seleccionado (por ejemplo, letra), los filtros interrumpen el empate de la siguiente manera:

  1. Si la bandeja predeterminada (como se especifica en el archivo GPD o PPD) está configurada para usar el tamaño de medio especificado, se usa la bandeja predeterminada.

  2. De lo contrario, el filtro elige la primera bandeja (de arriba a abajo, tal como se especificó en el archivo GPD/PPD) que está configurada con el tamaño de medio especificado.

Supresión adicional de páginas posteriores

De forma predeterminada, los filtros XPS a PCL6 y XPS a PS controlan la impresión dúplex de documentos que contienen tamaños de medios mixtos, tipos de medios, contenedores de entrada o salida, insertando una página vacía. Cuando los filtros insertan esta página vacía, obliga al dispositivo a imprimir la página siguiente en la parte delantera de un nuevo elemento multimedia. Para que los dispositivos que no requieran que una página de backside sea la salida, este comportamiento se puede suprimir agregando las siguientes palabras clave al archivo GPD o PPD del controlador.

Tipo de archivo Palabra clave de supresión de página de backside
GPD *SuppressExtraBacksidePages?: TRUE
PPD *MSSuppressExtraBacksidePages: True

Optimización de comandos SetPageDevice

El comportamiento predeterminado de un dispositivo PostScript que usa un controlador con MSxpsPS.dll es que, se emite un comando SetPageDevice para cada página y este comando indica el conjunto completo de opciones especificadas para la página. Tenga en cuenta que es posible que algunos dispositivos no funcionen bien con esta técnica.

Sin embargo, si el dispositivo usa MSxpsPS.dll y el archivo PPD adjunto especifica *MSOptimizeSetPageDevice: True, el siguiente es el comportamiento del dispositivo PostScript: - Para cada página donde se ha producido un cambio en cualquier parte del comando SetPageDevice desde la página anterior, se emite un nuevo comando SetPageDevice para indicar el conjunto de opciones especificadas para la página. Pero si no ha habido ningún cambio en ninguna parte del comando SetPageDevice desde la página anterior, no se emite un comando SetPageDevice para la página.

Características de PrintTicket admitidas

Representación del controlador de impresora V4