最近接到一个需求,客户需要使用打印标签的服务。需要手机端操作,那样就不能使用厂家驱动来使用了,之前没有接触过打印指令,看了现在商用打印机指令常用的esc/pos挺头疼的,cpcl还好一点不过也需要重新研究。
一开始已经有微信小程序的应用,所以打算使用蓝牙来打印,微信小程序目前只支持低功耗蓝牙(BLE),微信的文档 已经很详细了,就不重新复述了。
微信使用蓝牙最大的问题也是低功耗蓝牙,安卓设备可以调用 wx.setBLEMTU 进行 MTU 协商,但是苹果只能使用 20 字节为单位传输,算起来只有2kb/s,内容有图片的时候,打印速度实在太慢,而且微信小程序为啥一定要位置权限呢(大雾)。
放弃蓝牙,迎接云打印
基于上面原因,蓝牙打印的方法就被放弃了。然后接触到jolimarX的云打印机,支持很多种类的接口,总体来说支持html、esc、json、云模版、图片、pdf等等。特别是云模版的接口,只需要在开发平台上注册账号,然后在云模版新建一个模版,根据自己需要设计模版。
设计好模版后点击右上角“打印预览”。
在预览页底部可以看到,模版 ID、JSON。
图片中 Json 便是调用“打印云模版”中 bill_content 对应的数据如:
{"barCode":"20190117001","Kdate":"2019-01-17","billno":"820190117001","receivCom":"映美北京分公司","receiver":"张三","receivAd":"北京市朝阳区朝阳公园南路 108 号
","receivTel":"010-65953789","seder":"映美深圳分公司","sendAd":"深圳市南山区科技南路九洲电器大厦 708","chargeer":"陆正坤","serviceTel":"0755-8889998","QRcode":"http://open.jolimark.com","remarks":"这批货包含CTP535 打印机8000 台,CLP180 打印机 5000 台"}
整个调用参数:
template_id:47950d9a18f8f3f2
cus_orderid:2018011121
paper_type:1
order_id:201811231
copies:1
paper_width:210
time_out:180
access_token:t123456
device_ids:18340058AL
app_id:a123456
paper_height:140
bill_content:{"barCode":"20190117001","Kdate":"2019-01-17","billno":"820190117001","receivCom":"映美北京分公司","receiver":"张三","receivAd":"北京市朝阳区朝阳公园南路 108 号","receivTel":"010-65953789","seder":"映美深圳分公司","sendAd":"深圳市南山区科技南路九洲电器大厦 708","chargeer":"陆正坤","serviceTel":"0755-8889998","QRcode":"http://open.jolimark.com","remarks":"这批货包含CTP535 打印机 8000 台,CLP180 打印机 5000 台"}
其中bill_content 内容多,需以 form-data 方式传参。
打印效果如下:
我不用再去计算打印像素值和坐标值了,只要把数据传过去就行,太友好了。
而且对接期间,发现不能使用调用动态图片,跟他们开发人员沟通后,他们表示这个功能很快就上线了。