好久没有这么专注的研究过一个东西了,当研究出来后久违的满足感!
最近项目中需要用到标签打印,虽然与打印机的接口由其他设备外包商承接,但打印机型号的采购还是需要我们自己选择,且承包商也不愿做复杂的通讯接口,所以才有了后来的研究, 项目为了保险起见,我们还是需要验证一下技术实现方式和实现难度。
当然由其他家各种品牌标签打印机,其中不乏特别简单通讯方式的,但最终选择了斑马的型号,原因很简单:便宜!
此次测试的打印机型号为GK888t(虽不是最终项目上要用的型号,但据说斑马的通讯方式都一样)。
现状:一台GK888t打印机(之前出现问题就是打印的不清晰,换了纸也不行,最终找到原因电源适配器小了,原来打印机很久没用,这次测试就随便找了个能用的适配器插上了,结果证明还是原装的靠谱啊)
标签打印纸:若干;
在这之前已实现两种打印方式:
1. html模板直接打印。
2. 另一就是程序中引用.nlbl模板,替换其中变量后发送至打印机实现带模板的打印。
现在要实现: 将模板下载至打印机存储(可以断点保持),打印时直接向打印机发送模板中变量的值实现套用模板打印。
1. 首先肯定是找供应商要相关资料:
看完资料后发现两种方式可以实现我的诉求:1- GRF或PNG格式的标签模板(虽然zebra designer导出的是.lbl或.nlbl格式,这个目前还没弄明白怎么转换称这种格式)。2-格式标签的方式实现(本文描述该实现方式)。
2. 准备实现
首先看下文档中的描述:
很清晰,但就是看不明白这一串串的指令是什么意思,先看图:
接下来就现根据自己的一知半解解释一番:
开头:^XA ;结尾:^XZ ;这是固定格式。
^DFR:FORMAT^FS 中DF为download format 即:下载保存格式的意思,就是下载格式到打印机,下载到打印机的什么位置呢? 看下图:
这就明白了,然后冒号后面的FORMAT为这次下载的标签格式的名称(调用时要用),最后的^FS为指令域的结束符。
然后下一句:^LH30,30 什么意思呢? 继续看图:
这就很清晰了,其中FN1、FN2为参数名(调用时会用到)。
好了,保存完模板,我们就该调用了!
^XFR:为调用模板,下载位置需要与保存位置相同,名称等一致。
然后需要编辑参数与参数值的对应关系,其中参数FN1、FN2赋值时需加FD。
现在为止,已经完成标签保存和调用了。但实际应用过程中发现。。。变量打印中文乱码。。。
3. 解决标签格式打印中文变量乱码的问题
首先看下当前打印机中都有哪些字体?
发送命令:^XA^WD*:*.FNT*^XZ 则会打印出该打印机上保存的所有可用字体如下图
发现,咦,有SIMSUN.FNT。据说这个可以打印中文。那就不用再下载字体了,且已经有标号1(如果没有,可通过命令^XA^CWM,E:SIMSUN.FNT^XZ 赋值,标号可自定义子母或数字(猜的)),如果需要下载字体可以参考:http://www.chongshang.com.cn/manual/ZPL_font.shtml
那么开始打印吧,从网上查找资料时发现如下信息:顿时如获至宝:
^XA ^CI26 //ASCII Transparency和多字节亚洲编码 ^SEE:GB18030.DAT //码表 ^CW1,E:SIMSUN.FNT //字体(宋体) ^FO200,200^A1N,48,48^FD中文^FS //打印文字 ^FT448,288^BQ2,2,10^A1N,48,48^FD中文^FS //打印二维码 ^XZ
那么就有了,改造一下模板命令试试吧:
最终得到新模板命令如下
^XA ^DFE:FORMAT^FS // 下载保存模板 ^LH0,0 //原点 ^FO12,121^GB643,0,1^FS // 分割线 ^FO12,173^GB643,0,1^FS ^CI26 //ASCII Transparency和多字节亚洲编码 ^SEE:GB18030.DAT //码表 ^CW1,E:SIMSUN.FNT //字体(宋体) ^FO300,45^A1N,25,25^CI26^FD打印人:^FS //其中A1N 表示使用标号为1的字体,后面的25,25 代表字体大小 ^FO300,89^A1N,25,25^CI26^FD打印日期:^FS ^FO27,143^A1N,25,25^CI26^FD门店信息:^FS ^FO43,253^A1N,25,25^CI26^FD起始巷道:^FS ^FO43,199^A1N,25,25^CI26^FD订单编号:^FS ^FO18,40^A1N,33,25^FN1^FS ^FO39,102^A1N,35,35^FN2^FS ^FO420,45^A1N,33,33^FN3^FS ^FO149,148^A1N,30,30^FN4^FS ^FO356,148^A1N,30,30^FN5^FS ^BY2,3,120^FT37,429^BCN,,Y,N,,A ^FN6^FS ^FO210,254^A1N,28,28^FN7^FS ^FO210,200^A1N,28,28^FN8^FS ^FO420,200^A1N,28,28^FN9^FS ^FO420,93^A1N,28,25^FN10^FS ^PQ1,,,Y ^XZ
调用一下试试:
^XA ^XFE:FORMAT^FS ^FN1^FD首打^FS ^FN2^FD箱拣标签^FS ^FN3^FD吕笑笑^FS ^FN4^FD20126^FS ^FN5^FD京东2号店^FS ^FN6^FD202010291437001^FS ^FN7^FDSRM03^FS ^FN8^FD20201029001^FS ^FN9^FD2/9-36/60^FS ^FN10^FD2020-10-29 16:12^FS ^XZ
成了:
最后附上几个常用命令:
删除标签模板 :^XA^IDE:FORMAT.ZPL^FS^XZ