Compartir a través de


Compatibilidad con tamaños de papel definidos por el usuario

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.

Los tamaños de papel definidos por el usuario pueden ser específicos de un solo servidor de impresión y normalmente se personalizan para una aplicación específica. Por lo tanto, a menudo se denominan tamaños de papel personalizados. Los administradores del sistema usan la carpeta de impresión para definir tamaños de papel personalizados. Si una impresora puede controlar tamaños de papel personalizados, los proveedores deben usar el archivo GPD de la impresora para especificar el rango aceptable de tamaños.

Se proporcionan dos métodos para describir intervalos de tamaño aceptables para papel personalizado:

  • Puede especificar los intervalos de tamaño explícitamente.

  • Puede especificar intervalos de tamaño en relación con el tamaño de papel más grande de la impresora.

Especificación de intervalos de tamaño de papel explícitamente

Para usar este método, la característica PaperSize del archivo GPD debe incluir una entrada *Option con un argumento CUSTOMSIZE. Esta entrada debe contener los siguientes atributos de opción:

*MinSize *MaxSize *MaxPrintableWidth *MinLeftMargin *TopMargin *BottomMargin *CenterPrintable? *CursorOrigin *Command Puede usar estas entradas de GPD para crear descripciones de tamaño de papel personalizadas solo para impresoras que tengan las siguientes características:

  • La impresora admite comandos para seleccionar explícitamente tamaños de papel personalizados (normalmente moviendo el origen del cursor).

  • El origen del cursor permanece fijo, en relación con la esquina superior izquierda del papel, para todos los tamaños de papel personalizados. (Normalmente, esto no es así para la impresión en modo horizontal o para impresoras con alimentación central o con alimentación derecha).

  • Los márgenes superior e inferior son independientes del tamaño del papel.

  • Si el ancho del papel es menor que la suma de los valores especificados para *MinLeftMargin y *MaxPrintableWidth, no hay margen derecho. Es decir, la impresora puede imprimir en el borde derecho del papel.

Los parámetros de comando (especificados en las entradas *Command) se pueden calcular en tiempo de impresión si se usan expresiones de variable estándar, normalmente incluidas las variables PhysPaperLength y PhysPaperWidth. Estas variables representan el tamaño real del papel solicitado para el trabajo de impresión, según lo especificado por una aplicación.

Especificación de intervalos de tamaño de papel relativos al tamaño de papel más grande de la impresora

Para las impresoras que no admiten las características necesarias para especificar explícitamente intervalos de tamaño de papel personalizados, se proporciona un método alternativo, que especifica los tamaños de papel en relación con el tamaño de papel más grande de la impresora.

Para usar este método, la característica PaperSize del archivo GPD debe incluir una entrada *Option con un argumento CUSTOMSIZE. Esta entrada debe contener los siguientes atributos de opción:

*MinSize *MaxSize *MaxPrintableWidth *CustCursorOriginX *CustCursorOriginX *CustPrintableOriginX *CustPrintableOriginY *CustPrintableSizeX *CustPrintableSizeY *Command Al especificar un intervalo de tamaño en relación con el tamaño de papel más grande de la impresora, use las siguientes reglas de alineación:

  • Para las impresoras de alimentación izquierda, los márgenes superior e izquierdo de todos los tamaños de papel deben alinearse.

  • Para las impresoras de alimentación derecha, los márgenes superior y derecho de todos los tamaños de papel deben alinearse.

  • Para las impresoras de alimentación central, los márgenes superiores y los puntos centrales superiores de todos los tamaños de papel deben alinearse.

Los pasos son los siguientes:

  1. Determine la siguiente información para el tamaño de papel más grande de la impresora:

    • El comando necesario para seleccionar el tamaño de papel más grande.
    • Valores que se usarían para las entradas de GPD *PageDimensions, *CursorOrigin, *PrintableOrigin y *PrintableArea de tamaño de papel más grande, como si se fueran a incluir en el archivo GPD. Sin embargo, en realidad no colocará estas entradas en el archivo.
  2. Cree fórmulas que especifiquen o calculen la siguiente información para cada tamaño de papel personalizado, en relación con el tamaño de papel más grande de la impresora.

    • El origen y el tamaño de cada área imprimible de cada papel.
    • Origen del cursor para cada papel.

Las fórmulas del paso 2 deben ser expresiones del parámetro CUSTOMSIZE, que se especifican como valores para las siguientes entradas de GPD:

*CustCursorOriginX *CustCursorOriginX *CustPrintableOriginX *CustPrintableOriginY *CustPrintableSizeX *CustPrintableSizeY

La opción CUSTOMSIZE también debe incluir una entrada *Command que especifique el comando que selecciona el tamaño de impresora más grande. Este comando se envía para todos los tamaños de papel personalizados, y las fórmulas especificadas para el área imprimible y el control de origen del cursor donde la impresora imprime en el papel real, sea cual sea su tamaño.

Cálculos de muestra

Como ejemplo sencillo, supongamos que la impresora admite tamaños de papel personalizados que tienen márgenes del mismo tamaño que los márgenes del tamaño de papel más grande. Estos son los pasos que hay que realizar:

Determine los valores de las entradas *PageDimensions, *CursorOrigin, *PrintableOrigin y *PrintableArea del tamaño de papel más grande. (No coloque estas entradas en el archivo GPD).

Determine el ancho de cada uno de los márgenes del tamaño de papel más grande en términos de estos valores, como se muestra en las pseudoexpresiones siguientes:

LeftMarginWidth=*PrintableOrigin.x RightMarginWidth=*PageDimensions.x-*PrintableArea.x-LeftMarginWidthTopMarginWidth=*PrintableOrigin.y BottomMarginWidth=*PageDimensions.y-*PrintableArea.y-TopMarginWidth

En estas pseudoexpresiones, .x e .y representan los componentes horizontal y vertical del valor de par de cada entrada. Para la impresión horizontal, use valores horizontales para *PrintableArea y *PrintableOrigin.

Ahora cree pseudoexpresiones que especifiquen o calculen las áreas imprimibles para tamaños de papel no estándar.

*CustPrintableOriginX: %d{LeftMarginWidth}

*CustPrintableOriginY: %d{TopMarginWidth}

*CustPrintableSizeX: %d{PhysPaperWidth-LeftMarginWidth-RightMarginWidth}

*CustPrintableSizeY: %d{PhysPaperLength-TopMarginWidth-BottomMarginWidth}

Observe el uso de las dos variables estándar, PhysPaperWidth y PhysPaperLength. En tiempo de ejecución, estas variables contienen la longitud y el ancho del tamaño real del papel solicitado por una aplicación.

Tenga en cuenta que estas pseudoexpresiones son válidas si el papel se alimenta a la izquierda, a la derecha o al centro.

Inserte valores reales, determinados en el paso 1, en estas expresiones para crear entradas de GPD. Algunos ejemplos podrían ser:

*CustPrintableOriginX:  %d{300}
*CustPrintableOriginY:  %d{300}
*CustPrintableSizeX:   %d{PhysPaperWidth-600}
*CustPrintableSizeY:  %d{PhysPaperLength-600}

Cree pseudoexpresiones que calculen los índices de origen del cursor. En las pseudoexpresiones siguientes, *CursorOrigin.x y *CursorOrigin.y son marcadores de posición para los componentes horizontal y vertical del valor del par para el origen del cursor del tamaño de papel más grande.

Para impresoras con alimentación izquierda:

*CustCursorOriginX: %d{*CursorOrigin.x} *CustCursorOriginY: %d{*CursorOrigin.y} Para impresoras con alimentación derecha:

*CustCursorOriginX: %d{*CursorOrigin.x+PhysPaperWidth-*PageDimensions.x} *CustCursorOriginY: %d{*CursorOrigin.y} Para impresoras con alimentación central:

*CustCursorOriginX: %d{*CursorOrigin.x+(PhysPaperWidth-PageDimensions.x)/2} *CustCursorOriginY: %d{*CursorOrigin.y} Inserte valores reales, determinados en el paso 1, en estas expresiones para crear entradas de GPD. Algunos ejemplos pueden ser (para el papel de alimentación central):

*CustCursorOriginX:  %d{((PhysPaperWidth-14040)/2)+300}
*CustCursorOriginY:   %d{180}

Especifique los valores de las tres entradas de GPD restantes--*MinSize, *MaxSize y *MaxPrintableWidth. El valor especificado para *MaxPrintableWidth no se usa realmente para este método, pero el analizador requiere que exista la entrada, por lo que su valor se puede establecer en 1.

Ejemplo

En el siguiente segmento de archivo GPD de ejemplo se describen los tamaños de papel personalizados aceptables para una impresora con alimentación central. Para el modo vertical, todos los márgenes de todos los tamaños de papel personalizados tienen un tamaño de 300 unidades maestras (1/4 pulgadas). Para el modo horizontal, los márgenes superior e inferior son 240 unidades maestras, mientras que los márgenes izquierdo y derecho son 200 unidades maestras.

*Option: CUSTOMSIZE
{
  *rcNameID: =USER_DEFINED_SIZE_DISPLAY
  *MinSize: PAIR(4200,9000)
  *MaxSize: PAIR(14040, 21240)
  *MaxPrintableWidth: 14040
  *MinLeftMargin: 100
  *CenterPrintable?: FALSE
  *PageProtectMem: 1692
  *InsertBlock: =PaperConstraints
  *switch: Orientation
  {
    *case: PORTRAIT
    {
       *CustCursorOriginX:  %d{((PhysPaperWidth-14040)/2)+300}
       *CustCursorOriginY:   %d{180}
       *CustPrintableOriginX:  %d{300}
       *CustPrintableOriginY:  %d{300}
       *CustPrintableSizeX:   %d{PhysPaperWidth-600}
       *CustPrintableSizeY:  %d{PhysPaperLength-600}
       *Command: CmdSelect
       {
         *Order: DOC_SETUP.13
 *Cmd: "<1B>&l101a8c1e99F<1B>*p0x0Y<1B>*c0t8064x12528Y"
 }
    }
    *case: LANDSCAPE_CC90
    {
      *switch:  Option20
      {
      *% The 8100 rotates the landscape job 180 degrees if a stapler
      *% is attached, so the staple can be placed in the top left
      *% corner of the document. The printer always rotates the
      *% landscape job, even if stapling is not selected.
        *case: 3KStapler
        {
          *CustCursorOriginX:  %d{((PhysPaperWidth-14040)/2)+200}
          *CustCursorOriginY:   %d{PhysPaperLength}
          *CustPrintableOriginX:  %d{200}
          *CustPrintableOriginY:  %d{240}
          *CustPrintableSizeX:   %d{PhysPaperWidth-400}
          *CustPrintableSizeY:  %d{PhysPaperLength-480}
          *Command: CmdSelect
          {
            *Order: DOC_SETUP.13
            *Cmd: "<1B>&l101a8c1e63F<1B>*p0x0Y<1B>*c0t12456x8184Y"
          }
        }
        *case: MBM5S
        {
          *CustCursorOriginX:  %d{((PhysPaperWidth-14040)/2)+200}
          *CustCursorOriginY:   %d{PhysPaperLength}
          *CustPrintableOriginX:  %d{200}
          *CustPrintableOriginY:  %d{240}
          *CustPrintableSizeX:   %d{PhysPaperWidth-400}
          *CustPrintableSizeY:  %d{PhysPaperLength-480}
          *Command: CmdSelect
          {
            *Order: DOC_SETUP.13
            *Cmd: "<1B>&l101a8c1e63F<1B>*p0x0Y<1B>*c0t12456x8184Y"
          }
        }
        *default
        {
          *CustCursorOriginX:  %d{((PhysPaperWidth-14040)/2)+200}
          *CustCursorOriginY:   %d{21000}
          *CustPrintableOriginX:  %d{200}
          *CustPrintableOriginY:  %d{240}
          *CustPrintableSizeX:   %d{PhysPaperWidth-400}
          *CustPrintableSizeY:  %d{PhysPaperLength-480}
          *Command: CmdSelect
          {
            *Order: DOC_SETUP.13
 *Cmd: "<1B>&l101a8c1e63F<1B>*p0x0Y<1B>*c0t12456x8184Y"
 }
        }
      } *% switch Option20
    } *% case LANDSCAPE_CC90
  } *% switch Orientation
}