ionic安卓打印终极解决方案,支持USB打印

Posted by LuckXiang on September 22, 2018

作为一个仪器设备,需要打印很多图表和报表数据.但是安卓对打印功能支持不是太好,试了很多办法,终于获得了一个满意的解决方案

优化前的方案 ionic printer插件 + HP安卓打印插件 + 支持wifi的hp打印机

printer这个插件是ionic下实现html打印功能的插件,它支持传输html字符串.
Hp安卓打印插件是官方提供的,安卓就可以使用,当然也可以使用其他打印插件.
HP打印机,这个没的说,HP打印机做得还可以.
这个方案的主要问题就是慢,printer支持html,写个html当然很方便,但是如果html里边出现了中文,打印中会先生成pdf文件,然后再去调用安卓webview,这个渲染文档花费个30几秒很正常,改下打印配置,对不起,要重新渲染,然后终于等它刷出来了,点击打印,又要去重新渲染,30几秒又没了,终于可以打印了吧,但是安卓wifi链接打印机,感觉根本没做过任何优化,巨慢,我用三星盖世乐也试过,一样很慢,说明提升设备性能也解决不了这个问题.如果我是用户,操作到这里我估计要砸设备了.还好多年给人擦屁股的经历给了我信心,我折腾出了下边这个方案,有需要的自取吧.省略了细节.打字太累.实现本身并不复杂.

优化后的终极方案 jsPDF + jsPDF-CustomFonts-support + 自己裁剪的中文字库 + ionic printer 插件 + HP安卓打印插件 + 支持USB打印的hp打印机(HP DeskJet 2600)

查看安卓打印框架API,发现既然html最终也会渲染成pdf去打印,那么我就先弄个pdf文件打印看看,直接改写printer插件,使它支持pdf文件打印,具体怎么实现可以看安卓的API接口,比较详细.对比可以发现,通过自己传pdf文件,渲染只需要一秒不到,下一步就是自己制作pdf文件了,我选择了jsPDF这个库,但是它不支持中文,刚好jsPDF-CustomFonts-support这个库可以解决这个问题,需要注意的是,如果用的字库太大,比如一开始测试我用了微软雅黑,28M的字库加载需要五六秒.还是太慢了,于是自己用工具裁剪了一个1M多的字库,生成pdf文件的速度也提高到了不到一秒,再下边就是对jsPDF的接口进行封装,使其支持简单的排版,比如居中,左对齐,右对齐,打印时的上下左右间距,页眉页脚等,这里需要注意jsPDF官方提供的save接口ionic无法使用,需要自己把做好的pdf文档调用官方接口转成blob,然后使用ionic的原生文件接口存储.最后处理打印机慢的问题,查看HP文档可以支持,HP的安卓打印插件可以支持一部分的打印机通过USB打印,这个别问客服支持了,不管是淘宝客服还是官方客服都只会告诉你不支持,可能是有这个需求的人太少了,我于是买了一台2600,才四五百块钱,试了一下果然可以.打印的响应速度快了很多,响应只需要一两秒钟,但是打印速度没有电脑快,可能是打印协议的问题.再往下就没办法优化了.
对比前后两个方案,响应一个打印过程要一分钟以上到只需几秒,该方案基本上已经可以满足实际需要了.perfect!!!

github 源码链接

https://github.com/luckxiang/ionic3-android-printer-demo