paint-brush
Cómo imprimir etiquetas con TSPL y JavaScriptpor@altynberg
23,965 lecturas
23,965 lecturas

Cómo imprimir etiquetas con TSPL y JavaScript

por Altynbek Usenbekov2022/05/26
Read on Terminal Reader
Read this story w/o Javascript

Demasiado Largo; Para Leer

Las impresoras de etiquetas pueden admitir lenguajes de programación como TSPL, ZPL, EPL, etc. Podemos construir etiquetas usando comandos T SPL como `BARCODE` y `QRCODE. Por ejemplo, si queremos imprimir una etiqueta con un texto y un código de barras, usamos estos comandos con sus propiedades como posición o tamaño, y enviamos estos comandos a la impresora de etiquetas a través de Bluetooth o una conexión en serie. El número de puntos por pulgada depende del DPI de la impresora.

Company Mentioned

Mention Thumbnail
featured image - Cómo imprimir etiquetas con TSPL y JavaScript
Altynbek Usenbekov HackerNoon profile picture

Las impresoras de etiquetas pueden admitir lenguajes de programación como TSPL, ZPL, EPL, etc. Hoy vamos a repasar el lenguaje TSPL. Podemos construir etiquetas usando comandos TSPL como TEXT , BARCODE y QRCODE . Por ejemplo, si queremos imprimir una etiqueta con un texto y un código de barras, usamos estos comandos con sus propiedades como posición o tamaño, y enviamos estos comandos a la impresora de etiquetas a través de Bluetooth o una conexión en serie.


En el lado izquierdo, puede ver los comandos TSPL y la etiqueta impresa en el lado derecho. Puede encontrar todos los comandos disponibles aquí , pero veamos algunos de ellos para entender cómo usar el TSPL.

Coordenadas y tamaño en puntos

Ya sea un TEXT , CÓDIGO DE BARCODE o BITMAP , generalmente, las coordenadas y el tamaño están en puntos. El número de puntos por pulgada depende del DPI de la impresora.

Por ejemplo, si la impresora está

  • 203 DPI → significa que hay 203 puntos en una pulgada, o hay 8 puntos en 1 mm.
  • 300 DPI → significa que hay 300 puntos en una pulgada o hay 11,8 puntos en 1 mm.


De acuerdo con esto, si queremos agregar un código de barras con una altura de 10 mm y la impresora es de 203 DPI, entonces debemos establecer la altura en 80 (10 mm x 8 = 80 puntos).

Tamaño y espacio de la etiqueta

Necesitamos decirle a la impresora el tamaño de la etiqueta de esta manera:

SIZE 4,1

Aquí dijimos que el tamaño de la etiqueta es de 4x1 pulgadas.


También podemos configurarlo en un sistema métrico (mm):

SIZE 50 mm,25 mm


Podemos establecer el espacio que es el espacio entre las etiquetas ( GAP m,n ).

GAP 0,0

Aquí el espacio es de cero pulgadas, lo que significa que es una etiqueta continua.


Texto

Podemos usar el comando TEXT para imprimir un texto en la etiqueta. Podemos dar la posición, el tamaño de fuente, la rotación, etc.:

TEXT x,y,“font”,rotation,x-multiplication,y-multiplication,[alignment,] “content”

Parámetro

Descripción

x, y

coordenada x e y

fuente

Generalmente, podemos configurar 1-8 (1-pequeño, 2-más grande... 8-más grande)

rotación

0, 90, 180, 270 en el sentido de las agujas del reloj

x e y-multiplicación

Factor de escala 1-10

alineación

1 izquierda, 2 centro, 3 derecha (opcional)

contenido

Contenido del texto


Comandos de muestra

Resultado

TEXT 10,20,"1",0,1,1,"FONT 1"
TEXT 10,70,"2",0,1,1,"FONT 2"
TEXT 10,120,"3",0,1,1,0,"FONT 3"


Código de barras

Podemos agregar un código de barras a la etiqueta con el comando BARCODE :

BARCODE X,Y,”code type”,height,human-readable,rotation,narrow,wide,[alignment,]”content”


Parámetro

Descripción

x, y

coordenada x e y

tipo de código

128, EAN128, EAN13…

altura

Altura en puntos

legible por humanos

0 - el valor del código de barras (texto) no es visible
1 - el texto está alineado a la izquierda
2 - alineado al centro
3 - alineado a la derecha

rotación

0, 90, 180, 270 en el sentido de las agujas del reloj

angosto

Ancho del elemento estrecho en puntos

amplio

Ancho del elemento ancho en puntos

alineación

1 izquierda, 2 centro, 3 derecha (opcional)

contenido

Contenido del código de barras


Ejemplos de comandos:

TEXT 10,10, "2",0,1,1, "Human readable alignment"
BARCODE 10,50, "128",100,1,0,2,2,"left"
BARCODE 310,50, "128",100,2,0,2,2,"center"
BARCODE 610,50, "128",100,3,0,2,2,"right"


Resultado:

Comandos IMPRIMIR y FIN

Después de construir la etiqueta, debemos decirle a la impresora que la etiqueta está lista para imprimir. Usamos el comando PRINT m[,n] para hacer esto:

Comandos

Descripción

SIZE 50 mm,25 mm
CLS
TEXT 10,10, "2",0,1,1, "Text 1"
PRINT 1

CLS
TEXT 10,10, "2",0,1,1, "Text 2"
PRINT 2
END

- Establecer el tamaño de la etiqueta
- Borrar el búfer
- Añadir texto
- Imprimir el búfer una vez

- Borrar el búfer
- Añadir texto
- Imprimir el búfer dos veces
- Fin del programa


Imprime tres etiquetas; una etiqueta con "Texto 1" y dos etiquetas con "Texto 2".


Agregamos el comando END al final, para decirle a la impresora que hemos terminado de imprimir. Sin este comando, es posible que la impresora no imprima la última imagen en el búfer.

Impresión con JavaScript (Node.js)

Los comandos generados se pueden enviar a la impresora a través de Serial o Bluetooth. Para demostrar esto, creé un código simple usando Node.js. Utilicé el paquete ' usb ' para conectar y enviar los comandos (en Windows, es posible que deba instalar un controlador; para obtener más información, visite la página del paquete ).


 const usb = require('usb'); const cmds = [ 'SIZE 48 mm,25 mm', 'CLS', 'TEXT 10,10,"4",0,1,1,"HackerNoon"', 'BARCODE 10,60,"128",90,1,0,2,2,"altospos.com"', 'PRINT 1', 'END', ]; // you can get all available devices with usb.getDeviceList() let device = usb.findByIds(/*vid*/8137, /*pid*/8214); device.open(); device.interfaces[0].claim(); const outEndpoint = device.interfaces[0].endpoints.find(e => e.direction === 'out'); outEndpoint.transferType = 2; outEndpoint.transfer(Buffer.from(cmds.join('\r\n')), (err) => { device.close(); });


Y el resultado:




Tuve que recopilar información pieza por pieza sobre la impresión de etiquetas cuando implementé esta función en el proyecto POS e inventario de Alto . Así que escribí este artículo con la esperanza de que sea el punto de partida para alguien en una situación similar.


¡No a la guerra! ✋🏽