斑马打印机指令简介
打印机使用RS232通信,直接通过串口将指令发送字符串即可。
指令:
^XA
^JMA^LL200^PW680^MD10^PR2^PON^LRN^LH0,0
^FO10,30
^A0N,72,72
^FD Hello World!^FS
^XZ
实现效果:
说明:
打印机的指令用“^”作为开头,任何打印指令都是从^XA开始,到^XZ结束。指令的参数直接放在指令后面,如指令
^FDstring^FS
^FD是一段字符串的开头,^FS是一段字符串的结尾,string就是代表要打印的字符串
上述
^FD Hello World!^FS
就是以表示指定要打印的字符串为“ Hello World!”(没错,包含前面的空格)
同时,要打印该字符,还必须先指定它所在的坐标(如^FO10,30)和字体参数(如^A0N,72,72)
^FOx,y
x代表横坐标,y代表纵坐标,如果你将x的值改为20,那么“ Hello World!”将会右移一段距离。
^Aab,c,d
^A有a,b,c,d四个参数
a,字体类型,的取值范围从【0-9,A-Z】,0是默认的内置字体,若需要其他字体则需要设置,在打印中文这一节将会说明。
b,旋转角度,注意参数a和b之间并没有逗号,有【N,R,I,B】四个选项,分别代表正常,顺时针旋转90°,180°、270°。
c,字符高度
d,字符宽度
^JMA^LL200^PW680^MD10^PR2^PON^LRN^LH0,0
这条指令设置打印机的参数,可以拆分如下:
^JMA ——每毫米设定点,可选参数【A,B】,A表示【24 dots/mm, 12 dots/mm, 8 dots/mm or 6 dots/mm】,B表示【12 dots/mm, 6 dots/mm, 4 dots/mm or 3 dots/mm】,默认A
^LL200 ——标签高度,这里是20mm
^PW680 ——标签宽度,这里是68mm
^MD10 ——标签深度,可选值【-30~30】,值越高标签浓度越高
^PR2 ——打印速度,实际这是一个多参数的指令,^PRa,b,c,b和c不设置则为默认值。其中a是打印速度,可选值【1-14,A-E】,值越大速度越快,其中字母【2=A,3=B,4=C,6=D,8=E】,即设置A与设置2无异。b和c的参数用于设置推出和回卷速度,默认即可。
^PON ——打印方向,有【N,I】两个值可选,N是正常,I是倒置(标签底部先出)
^LRN ——打印反转,有【Y,N】两个值可选,N是正常,Y表示将产生黑底白字(需要先绘制黑色填充方框)
如以下指令:
^XA
^JMA^LL200^PW680^MD30^PR2^PON^LRY^LH0,0
^FO8,28
^GB400,50,100^FS
^FO10,30
^A0N,72,72
^FD Hello World!^FS
^XZ
指令:
^XA
^SEE:GB18030.DAT^FS
^CWZ,E:SIMSUN.FNT
^CI26
^JMA^LL200^PW680^MD10^RP2^PON^LRN^LH0,0
^FO20,100
^AZN,72,72
^FD中123文ABC测试^FS
^PQ1
^XZ
效果:
说明:
中文字符的打印需要预先设置字体库,而且在传输的时候需要用GB2312的编码方式传输,否则会出现乱码。
^AZN,72,72
注意第一个参数Z,它代表使用我们自己设置的Z字体,72代表字体的大小,由于使用了点阵字体,这里的大小必须是24的整数倍。
^SEE:GB18030.DAT^FS
该指令共有三个参数
^SEa:b.c
参数a代表本地编码表的选择,可选值有【R,E,B,A】这四个参数的值定义暂时没有详细的资料,目前知道它用于区分ZPL指令和ZPL II指令,默认为R,这里使用E。
参数b代表编码的名称,目前网上找到的资料都是使用GB18030,暂时没有发现其他编码。
参数c代表编码的后缀名,一般是DAT。
^CWZ,E:SIMSUN.FNT
该指令共有4个参数
^CWa,b:c.d
参数a代表设置的这个字体编号,可选值【A-Z和0-9】,当这里设置了以后,^A的第一个参数才能引用到这个字体。
参数b同^SE的参数a。
参数c代表字体名称,这里的SIMSUN是宋体,可参考
https://blog.csdn.net/amy_king_0/article/details/54141460
尝试设置更多字体类型,但是打印出来没啥区别。
参数d代表字体后缀名,一般是FNT。
在使用python发送打印指令时,由于使用读取txt的方式发送打印指令,需要检查文本文档编码是否为UTF-8,方法是点击文件-另存为时查看编码
同时在开头添加编码说明
如果不是UTF-8,可能会出现乱码。
python代码:
https://download.csdn.net/download/bfz_50/10650435
运行前需先导入pyserial。
PS:由于早期用py2.7无法指定发送的编码模式,建议用py3.7,并指定发送时的编码模式为gb18030
serial.write(printCommand.encode(‘gb18030’))
^XA
^JMA^LL450^PW700^MD0^PR3^PON^LRN^LH0,0
^CI26
^FO200,30
^BQN,2,10
^FDHM,B0200 中文测试!123#测试¥ABC%测试^FS
^XZ
说明:
该二维码有时扫不到,需要拿远一点才扫得到,而且打印机在打印了中文字符以后,需重新开关打印机清除缓存,才能打印。
python2.7无法通过txt的方式打印该二维码,必须通过字符串的方式,代码如下:
#!/usr/bin/env python
# -*- coding: cp936 -*-
# -*- coding: utf-8 -*-
#打印机需重新开关,可能是清缓存
import serial
#打开串口
serialPort="COM3" #串口
baudRate=9600 #波特率
ser=serial.Serial(serialPort,baudRate,timeout=0.5)
print "参数设置:串口=%s \n波特率=%d"%(serialPort,baudRate)
printCommand='''
^XA
^JMA^LL450^PW700^MD0^PR3^PON^LRN^LH0,0
^CI26
^FO200,30
^BQN,2,10
^FDHM,B0200 中文测试!123#测试¥ABC%测试^FS
^XZ
'''
print printCommand
ser.write(printCommand)
ser.close()
其中^BQN,2,10是指定二维码,指令格式如下:
^BQa,b,c
a代表二维码方向,默认是N
b代表二维码的版本,可选值有【1,2】,1是原始版本,2是增强版本,推荐用2,因为1扫不出来。
c代表二维码的放大程度,可选值【1-10】
注意二维码的打印还需要与^FD配合,当我们使用^BQ这个函数时,^FD必须设置相关的参数
^FDab,cd^FS
a:错误纠正率,【H,Q,M,L】H是超高可靠度,L是高密度,建议使用H
b:数据输入模式,【A,M】A是自动模式(参数c可省略),M是手动模式(需要指定参数c的字符类型)
c:字符模式,【N】数字,【A】字符,【B】字节,【K】Kanji(日文汉字)
d:二维码的内容
由于编码问题,花了很长时间没有办法将中文二维码和中文字符同时保留在一个页面上,所以考虑只保留中文字符,不使用中文二维码。
指令:
^XA
^SEE:GB18030.DAT^FS
^CWZ,E:SIMSUN.FNT
^JMA^LL800^PW700^MD0^PR3^PON^LRN^LH0,0
^CI26
^FO180,50^A0N,130,130
^FD1234^FS
^FO600,50^AZN,96,96
^FD补^FS
^FO600,50^GB95,95,1^FS
^FO0,200^A0N,80,80
^FD20001234^FS
^FO500,220^A0N,70,70
^FDAB123^FS
^FO0,300^A0N,80,80
^FD20171234ABCD^FS
^FO550,300^A0N,70,70
^FDNo.1^FS
^FO0,450^AZN,48,48
^FD毛重:478.03 g^FS
^FO0,500^AZN,48,48
^FD皮重:178.03 g^FS
^FO0,550^AZN,48,48
^FD净重:300.00 g^FS
^FO380,400
^BQN,2,6
^FDHM,B0200 1234#20001234#AB123#20171234ABCD#No.1#pi478.03g#mao178.03g#jing300.00g^FS
^PQ1
^XZ
说实话markdown升级了以后很不习惯,每个^前面都要加转义字符\,不然会变成上标。