Tablas en impresora de tickets

En esta entrada vamos a aprender a utilizar tablas en las plantillas XML para su uso en impresoras de tickets.
Vamos a explicar su funcionamiento y adjuntamos un enlace con una tabla de ejemplo para un ticket de compra.

table-preview

Lo primero que debemos conocer a la hora de montar una tabla es el número de caracteres por cada fila que vamos a imprimir, ya que el cálculo del ancho de las columnas está basado en este número, por lo que dependiendo del tamaño del papel de la impresora vamos a tener que utilizar un tamaño u otro para ajustar la tabla a nuestras necesidades.
Por ejemplo, las impresoras con ancho de papel de 59mm admiten tablas de 32 caracteres. Las de 80mm, de hasta 48 caracteres. Cualquier tamaño superior a ese provocará que haya un salto de línea en las filas y se corten las filas de la tabla.
También es importante que el ancho de cada celda (que también se especifica en caracteres) sume un total del ancho de la tabla para evitar que aparezcan columnas cortadas.
Las tablas admiten bloques condicionales, ya sea a nivel de fila o a nivel de contenido de celda. Se utilizan mediante la etiqueta block.

A continuación dejamos la explicación de cada una de las etiquetas que forman la tabla y sus posibles atributos.

Tabla (table)

Atributos:

  • size (obligatorio): Tamaño de la tabla en caracteres. Recomendamos utilizar 32 en impresoras de papel de 59mm y 48 en impresoras de 80mm.
  • position (opcional): Si la tabla no ocupa todo el ancho del ticket, el atributo position la ajusta a la izquierda, centro o derecha en función del valor que tenga (left, center, right).
  • cellsizes (opcional): Especifica el tamaño en caracteres de cada una de las celdas de cada fila de la tabla, separados por comas. Para un funcionamiento óptimo, la suma de todos los tamaños debe ser igual al tamaño de la tabla. Si, por ejemplo tenemos cuatro celdas en cada fila en una tabla de 32 caracteres de tamaño, cellsizes=”4,16,4,4″ sería un valor correcto.
  • cellpositions (opcional): Especifica el alineamiento del texto dentro de cada celda de cada fila de la tabla, separados por comas. En una tabla con filas formadas por cuatro celdas, cellpositions=”left,center,right,left” es un valor aceptado.

Puede contener múltiples:

  • row
  • block

Fila (row)

Atributos:

  • font (opcional): puede ser bold (negrita) o underline (subrayado). Aplica el efecto a toda la fila.
  • cellsizes (opcional): Especifica el tamaño en caracteres de cada una de las celdas de la fila. Funciona exactamente igual que el mismo atributo en table, pero se aplica con mayor prioridad. Útil si tenemos filas con un número diferente de celdas al normal en la tabla.
  • cellpositions (opcional): Especifica los alineamientos de las celdas de la fila. Al igual que cellsizes, se aplica para los elementos de esa fila.

Puede contener múltiples:

  • cell

Celda (cell)

Atributos:

  • size (opcional): Especifica el tamaño en caracteres de la celda. Si está especificado se aplicará siempre. Si no se especifica, se obtendrá del cellsizes de row, y si tampoco está especificado, del de table
  • position (opcional): Especifica el alineamiento del texto en la celda. Si está especificado se aplicará siempre. Si no se especifica, se obtendrá del cellpositions de row, y si tampoco estuviera especificado, del de table. Por defecto se alinea a la izquierda

Puede contener múltiples:

  • text
  • field
  • block

Puedes descargar el XML con la tabla de ejemplo desde aquí