Zebra 打印机模板实现模板标签打印

好久没有这么专注的研究过一个东西了,当研究出来后久违的满足感!

最近项目中需要用到标签打印,虽然与打印机的接口由其他设备外包商承接,但打印机型号的采购还是需要我们自己选择,且承包商也不愿做复杂的通讯接口,所以才有了后来的研究, 项目为了保险起见,我们还是需要验证一下技术实现方式和实现难度。

当然由其他家各种品牌标签打印机,其中不乏特别简单通讯方式的,但最终选择了斑马的型号,原因很简单:便宜!

此次测试的打印机型号为GK888t(虽不是最终项目上要用的型号,但据说斑马的通讯方式都一样)。

现状:一台GK888t打印机(之前出现问题就是打印的不清晰,换了纸也不行,最终找到原因电源适配器小了,原来打印机很久没用,这次测试就随便找了个能用的适配器插上了,结果证明还是原装的靠谱啊)

    标签打印纸:若干;

    在这之前已实现两种打印方式:

        1. html模板直接打印。

        2. 另一就是程序中引用.nlbl模板,替换其中变量后发送至打印机实现带模板的打印。

    现在要实现: 将模板下载至打印机存储(可以断点保持),打印时直接向打印机发送模板中变量的值实现套用模板打印。

1. 首先肯定是找供应商要相关资料:

      ZPLII语言.rar

  看完资料后发现两种方式可以实现我的诉求: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 

原文地址:https://www.cnblogs.com/xiaoerlang90/p/13897951.html