背景
客户要求用钉钉小程序连接蓝牙打印机,搜了好多方法都或多或少有问题
- 网络上能搜索到的相关信息很少,那就只能从微信小程序下手(dddd),微信小程序和钉钉小程序连接蓝牙使用的api都是writeBLECharacteristicValue,参数名都一样,但是微信的value参数传递的是buffer,而钉钉传递的是hexString,这就导致直接照搬微信的实现方式并不可行,只能找其他方案
- 经过各种尝试终于连接成功打印出来,但是有个问题是中文打印出来会乱码,根据我多年编码经验(0.0),判断中文需要编码,联系了打印机的厂商,得到消息是打印机只支持gb2312编码
- 这个需求最坑的地方就在这了,在网上搜了好多方案,关于js进行gb2312编码有很多,用的比较多的是用TextEncode这个库进行编码,但是在使用过程中发现这个库并没有gb2312的编码库,再加上配套编码库过大会导致小程序包体积增大所以放弃了这个方案,最后在一篇博客中都到了一份js可以使用的gb2312编码库,但是配套的编码方法并不适用打印机使用,所以进行改造,最终打印成功 encodeToGb2312.js
最终的实现方式
let cmd = `SIZE 30 mm,20 mm
GAP 3 mm
DENSITY 15
CLS
QRCODE 40,1,L,5,A,0,"123"
TEXT 220, 20, "TSS24.BF2", 90, 1, 1, "打印文案"
PRINT 3
`;
let value = gbUtil.encodeToGb2312(cmd);
dd.writeBLECharacteristicValue({
deviceId: this.data.deviceId,
serviceId: this.data.serviceId,
characteristicId: this.data.characteristicId,
value,
success: res => {},
fail: res => {},
complete: res => {
console.log(res, "complete res");
}
});
```