标签打印机可以支持 TSPL、ZPL、EPL 等编程语言。今天我们将概述 TSPL 语言。我们可以使用TEXT
、 BARCODE
和QRCODE
等 TSPL 命令构建标签。例如,如果我们想打印带有文本和条形码的标签,我们使用这些命令及其位置或大小等属性,并通过蓝牙或串行连接将这些命令发送到标签打印机。
在左侧,您可以看到 TSPL 命令和右侧的打印标签。您可以在此处找到所有可用的命令,但让我们看一下其中的一些命令以了解如何使用 TSPL。
无论是TEXT
、 BARCODE
还是BITMAP
,通常坐标和大小都以点为单位。每英寸的点数取决于打印机的 DPI。
例如,如果打印机是
据此,如果我们要添加一个高度为 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右(可选) |
内容 | 文字内容 |
示例命令 | 结果 |
---|---|
|
我们可以使用BARCODE
命令将条形码添加到标签:
BARCODE X,Y,”code type”,height,human-readable,rotation,narrow,wide,[alignment,]”content”
范围 | 描述 |
---|---|
x, y | x 和 y 坐标 |
代码类型 | 128、EAN128、EAN13… |
高度 | 以点为单位的高度 |
人类可读 | 0 - 条码值(文本)不可见 |
回转 | 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 m[,n]
命令来做到这一点:
命令 | 描述 |
---|---|
| - 设置标签的大小 |
它打印三个标签;一个带有“Text 1”的标签和两个带有“Text 2”的标签。
我们在最后添加END
命令,告诉打印机我们已经完成了打印。如果没有此命令,打印机可能无法打印缓冲区中的最后一张图像。
生成的命令可以通过串行或蓝牙发送到打印机。为了演示这一点,我使用 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项目中实现此功能时,我必须逐条收集有关打印标签的信息。所以我写了这篇文章,希望它能成为处于类似情况的人的起点。
没有战争! ✋🏽