最近做个小程序需要用到标签打印机打印不干胶标签,打印内容包括文字,表格(线条),二维码等内容。所以开始接触学习了小程序低功耗蓝牙(BLE)开发、TSC,ESC,CPCL、TSPL等指令集。
当我用小程序调用打印机打印出内容,并且根据文档逐个测试出能用的指令后,就开始给标签的内容进行了排版。大概像这个样子:
再按对应位置填入内容,正式开始我的填坑之路。
因为不论是标签打印机还是票据打印机,内部计算大小都是以dot(点)为单位的,并且字号和二维码等图案的放大,也基本都是以dot为单位进行整数倍放大,这就不太好了,字号根本无法调整到一个合适的大小。仔细的研究了官方的打印APP和指令集后,我猜官方一定是以位图的形式打印的。毕竟如果编辑的是一张图片,那不论是字体字号还是其他内容,都可以矢量地放大缩小,最后转换成位图打印就好了。至于指令集中提到的给打印机上传适量字体等解决方案,我压根就没考虑过,毕竟以后打印机是蓝牙直接连接的,就算可以上传字体,看样子也得在使用之前预先上传设置好才行,太不方便,所以就PASS掉了。
于是我开始在后台开发了功能,用来生成所有打印所需的位图信息。当我没在位图信息中加入二维码信息的时候,光是文本大概需要1s-2s,虽然不像官方APP一样秒出,但是也能勉强接受,毕竟使用的是低功耗蓝牙,传输速率受限,不像APP可以直接使用原生蓝牙,传输速度自然不可同日而语。
但是当我把二维码信息也生成好之后,噩梦就来了。通过对不同手机的测试,安卓手机可以在6-15S内传输完成。苹果手机因为低功耗蓝牙不支持协商速率的原因,需要30s以上。这就完全无法接受了。于是我打算放弃后端生成二维码信息了。改为使用指令打印二维码,速度是提升了,但是最大的问题来了。因为二维码内容不一样,导致生成的二维码有大有小,整个看起来很不美观。于是我又研究了一下二维码的生成方式、版本与容量,经过大量的查阅,最终在草料二维码的介绍中找到了https://www.qrcode.com/zh/这个网站,这个因该是最权威的了。并且提供了现成的整理好的表格,以及一些特殊情况的说明,二维码容量的计算方式。
核心知识点如下:
1. 假设要输入的数据种类为“数字”
2.从“L”“M”“Q”“H”中选择纠错级别。(假设选择“M”)
3.查看下表,先从数字列找出数字为100以上且接近100的,其次找出纠错级别“M”,两者交叉的部分就是最佳版本。
在此例中,最佳版本就是版本3(码元数29×29)
二维码共有40个版本,其实就是用来表示不同的尺寸。需要注意的是表中所谓的汉字并不是中国字,而是日本汉字,这个是翻译的问题。汉字的计算方式是1汉字=3字节=24比特
那么一个二维码中最多可以放多少个汉字呢?查表后可知version40,纠错级别L情况下,最多可以放置23648bit数据,23648/24=985.33333,实际情况是,数据区还需要其他内容,是放不下这么多汉字的。如何计算呢?
二维码数据区内容组成结构如下:
编码
固定4bit
字符数
内容
数字:10×(位数除以3所得商)+0(余数为0时)或4(余数为1时)或7(余数为2时)
英文字母与数字混合:11×(位数除以2所得商)+0(余数为0时)或6(余数为1时)这里的英文单指大写字母
二进制:8×位数(小写字母和符号,ASCII码)
日文汉字:13×位数
中文汉字:24×位数
结束符
固定4bit 0000 (添加结束符后计算总bit是不是8的倍数,如果不是,后面补0直到补齐为8的倍数)
版本号
version7以上会添加,固定18bit
补齐符
11101100 和 00010001 不停地重复这两个字节,直到填充满所有bit
所以version40纠错L的情况下,最多可存放汉字:
23648-4-16-4-18=23606
23606÷24=983……14
所以二维码最多可存放983汉字。
根据对应表和纠错级别,我们就可以很简单地算出生成的二维码生成后的尺寸。再根据预留的空间,算出放大级别以及偏移量,这样就可以保证二维码以最大的形态摆放在合适的位置了,并且打印速度还快。附上对照表
如有错误欢迎指正
............试读结束............
查阅全文加微信:3231169 如来写作网:gw.rulaixiezuo.com(可搜索其他更多资料) 本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 3231169@qq.com 举报,一经查实,本站将立刻删除。如若转载,请注明出处:https://www.rulaiwenku.com/165932.html