一直纳闷一个问题:打印面单和小票,可不像word打印A4纸张那么方便,不管你是打印热敏小票还是用不干胶打印面单,都需要用到原生的打印指令。

3,360 阅读3分钟

一直纳闷一个问题:打印面单和小票,可不像word打印A4纸张那么方便,不管你是打印热敏小票还是用不干胶打印面单,都需要用到原生的打印指令。

打印机指令比较复杂,为何国内的程序员似乎能轻易的设计和打印出如下复杂的版面设计?

为了回答这个问题,先看看市面上主流的打印指令, 1.ESC/POS指令,由Epson发明,是热敏小票的业内标准(看文档) 2.ZPL,有Zebra斑马发明,是面单打印的标准 3.PCL,由HP发明,是激光打印机的业内标准 4.CPCL是移动打印机指令标准 5.TSPL是台湾发明的面单打印指令 6.还有其他很多种,TPL,EPL等等。。。

参考文档https://yq.aliyun.com/articles/685028#

以打印一个简单的条码为例,看看不同指令的复杂程度:

1.ESC/POS

下面来解读一下这个天书一样的文字:有两种指令供你选择打印条码 A:输入起始指令\x1d\x6b然后跟条码类型m(如果是A则选择第一列,如果是B则选择第二列),同时还要注意不同条码限制不同,再次跟条码内容(比如12346789),最后终止符号NULL(需要转换成ASCII,即\x00),因为没有指定条码长度所以需要告知终止符 B: 输入起始指令\x1d\x6b,后面注意多了一个条码长度,需要告知长度,后面不需要终止符号,打印机知道多长了,就不用终止符号。其他类似。

如果要打印一个1234四个字的条码类型是code39,模式为A,指令为(16进制为例): \x1d\x6b\x04\x01\x02\x03\x04\x00

2.ZPL呢?

对ZPL来说,需要^B3表示code 39,后面的参数是条码的参数,比如高低胖瘦等。 ^FO20,80^B3N,Y,20,N,N^FDAAA01^FS^XZ这样的指令,明显比ESC好很多。但是明显也不简单,比如编辑一个简单的页面,对应的命令如下:

打印图片呢?打印二维码呢?会非常复杂,看看二维码ESC的指令如下。图片无一例外需要bitmap,即需要用算法比如arkinsin或threshhold把图片转换成x y方向的二进制,然后转换成hex,发送至打印机,打印机会根据点阵打印。

回到最开始的问题:为什么国内的面单打印机这么流利,比如风火递,各种快递面单,各种面单打印机品牌,似乎程序员人人都懂怎么使用原始指令打印,原因是:

TSPL!对就是台湾发明的打印!

看看TSPL打印一个条码有多简单!!!没错,指令就是: BARCODE,xy位置,code内容,长宽高

二维码呢: 没错,指令就是:QRCODE,参数,内容!

简单不简单?那么再看看国内的打印机是不是都支持TSPL呢?是的!从佳博到汉印,全部都是TSPL。