Android打印机
哎~
负责的一个打印机项目出幺蛾子了,发布新版本的时候小票偶现丢文字。
打印机环境:
问题打印机 汉印Gamma (支持协议TSPL和ZPL等),对比机器 汉印D25BT(支持协议TSPL)
杯贴纸40mm x 30mm
上一个版本正常,这个版本不正常,怎么看都像是软件问题。但是复盘整个提交代码都是关于UI的改动,唯一动到打印逻辑这块的只有对打印机的任务做了拆分,由原来的单线程接单+打印改成了各自独立处理,好处是互不影响。
理论上应该不会出现打印机发送数据阻塞线程的情况,但是实际上确实出现了~
出现的频率不高,但是还是得避免,所以这块就做了这个优化。
光从结果看上一个版本没问题,这个版本有问题,那肯定是软件侧代码写出问题来了。但是自己怎么也想不到怎么可能会影响到打印机的内容输出。
所以这里假设自己代码没问题,从问题开始倒推,首先打印机数据出问题了,如果是软件侧的问题那么输出给打印机的指令肯定出问题了,所以导出打印机指令,然后重现问题,找到对应的协议指令,因为标签打印机是用的TSPL指令,(基本上大部分标签打印机都是支持这个指令的,个别打印机可能还支持ZPL或者其他指令。)
TSPL指令
杯贴
可以看到指令在标题不见了。这就很不合理了。从这里看软件测的指令是对的,但是结果是打印机输出的文字丢了。这种问题最麻烦了,有种感觉像是之前的打印机代码能正常是有几个BUG组合导致的。
因为这里是矢量字体,所以猜测有因素影响矢量字体有关系。
替换矢量字体成其他非矢量字体尝试,没有问题。
排除这个因素,难道是打印机的问题?尝试切换打印机为其他打印机D25BT。
没有遇到问题,难道真是打印机问题?感觉CPU要烧坏了。
再试试绕过厂家的SDK,自己用TSPL协议和蓝牙连接android API直接实现,首先尝试D25BT
没有遇到问题。
再尝试问题型号打印机
问题杯贴
虽然没有遇到问题,但是同样的指令为什么有字符重叠的问题。
好吧,经过摸索发现是因为GAP的参数2个打印机的指令解析单位不一致导致的。
恢复正常的杯贴
这里有个问题是这2台设备我都用了加粗,字体参数我选的都是3号和1号,但是实际加粗之后的区别还是很大的。会导致单行打印超出边界问题。因为TSPL协议不支持自动换行。
然后把参数调整到修改之前的样式用9号矢量字体,进行Y轴放大,最终效果
最终效果
然后继续试了试1号和3号字体的配合效果如下:
1和3号字体效果图
实测下来,2个打印机的1号和3号字体区别很大。
我用尺子量了一下最终修正了参数大概是
D25BT字体参数
Gamma字体参数
可以看的出来还是有一定区别的。实际测下来D25虽然支持的协议少,但是能满足效果对TSPL协议支持比较好。Gamma虽然支持的协议多,并且有BLE低功率蓝牙,但是实际适配协议效果还不如D25BT。
好了,就这。因为是偶现,所以上面看到的结论都是经过了大量的打印大概一次测试打印200左右个小票得出的结论。
另外这次遇到的问题,汉印的相关人员反馈太不及时了,所有问题基本都是我自己慢慢测出来的,打印机厂家都这样,
所以这次我对把本地的打印机SDK架构做了重新设计,以前是面向厂家编程的架构,现在改成了面向协议编程。