paint-brush
如何使用 TSPL 和 JavaScript 打印标签经过@altynberg
23,823 讀數
23,823 讀數

如何使用 TSPL 和 JavaScript 打印标签

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

太長; 讀書

标签打印机可以支持 TSPL、ZPL、EPL 等编程语言。我们可以使用 T SPL 命令构建标签,例如 `BARCODE` 和 `QRCODE。例如,如果我们想打印带有文本和条形码的标签,我们使用这些命令及其位置或大小等属性,并通过蓝牙或串行连接将这些命令发送到标签打印机。每英寸的点数取决于打印机的 DPI。

Company Mentioned

Mention Thumbnail
featured image - 如何使用 TSPL 和 JavaScript 打印标签
Altynbek Usenbekov HackerNoon profile picture

标签打印机可以支持 TSPL、ZPL、EPL 等编程语言。今天我们将概述 TSPL 语言。我们可以使用TEXTBARCODEQRCODE等 TSPL 命令构建标签。例如,如果我们想打印带有文本和条形码的标签,我们使用这些命令及其位置或大小等属性,并通过蓝牙或串行连接将这些命令发送到标签打印机。


在左侧,您可以看到 TSPL 命令和右侧的打印标签。您可以在此处找到所有可用的命令,但让我们看一下其中的一些命令以了解如何使用 TSPL。

以点为单位的坐标和大小

无论是TEXTBARCODE还是BITMAP ,通常坐标和大小都以点为单位。每英寸的点数取决于打印机的 DPI。

例如,如果打印机是

  • 203 DPI → 表示一英寸有 203 个点,或 1 毫米有 8 个点。
  • 300 DPI → 表示一英寸有 300 个点,或 1 毫米有 11.8 个点。


据此,如果我们要添加一个高度为 10mm 的条码,并且打印机是 203DPI,那么我们应该将高度设置为80 (10mm x 8 = 80 点)。

标签的尺寸和间隙

我们需要像这样告诉打印机标签的大小:

SIZE 4,1

这里我们说标签的尺寸是 4x1 英寸。


我们还可以将其设置为公制 (mm):

SIZE 50 mm,25 mm


我们可以设置标签之间的间隙( GAP m,n )。

GAP 0,0

这里的间隙为零英寸,这意味着它是一个连续的标签。


文本

我们可以使用TEXT命令在标签上打印文本。我们可以给出位置、字体大小、旋转等等:

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

范围

描述

x, y

x 和 y 坐标

字体

一般我们可以设置1-8(1-small, 2-big... 8-biggest)

回转

0, 90, 180, 270 顺时针方向

x 和 y 乘法

比例因子 1-10

结盟

1左、2中、3右(可选)

内容

文字内容


示例命令

结果

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"


条码

我们可以使用BARCODE命令将条形码添加到标签:

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


范围

描述

x, y

x 和 y 坐标

代码类型

128、EAN128、EAN13…

高度

以点为单位的高度

人类可读

0 - 条码值(文本)不可见
1 - 文本左对齐
2 - 居中对齐
3 - 右对齐

回转

0, 90, 180, 270 顺时针方向

狭窄

窄元素的宽度(以点为单位)

宽的

宽元素的宽度(以点为单位)

结盟

1左、2中、3右(可选)

内容

条码内容


示例命令:

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"


结果:

PRINT 和 END 命令

建立标签后,我们需要告诉打印机标签已准备好打印。我们使用PRINT m[,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

- 设置标签的大小
- 清除缓冲区
- 添加文字
- 打印一次缓冲区

- 清除缓冲区
- 添加文字
- 两次打印缓冲区
- 程序结束


它打印三个标签;一个带有“Text 1”的标签和两个带有“Text 2”的标签。


我们在最后添加END命令,告诉打印机我们已经完成了打印。如果没有此命令,打印机可能无法打印缓冲区中的最后一张图像。

使用 JavaScript (Node.js) 打印

生成的命令可以通过串行或蓝牙发送到打印机。为了演示这一点,我使用 Node.js 创建了一个简单的代码。我使用“ usb ”包连接和发送命令(在 Windows 上,您可能需要安装驱动程序,要了解更多信息,请访问包的页面)。


 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(); });


结果:




当我在Alto 的 POS & Inventory项目中实现此功能时,我必须逐条收集有关打印标签的信息。所以我写了这篇文章,希望它能成为处于类似情况的人的起点。


没有战争! ✋🏽