uni-APP使用lodop打印工具
公司仓库需要打印小票。最终效果如下图:
经过调查,首先选用了康虎云打印,原因是简单容易上手。但发现存在几个问题:
1、小票打印机,纸张的切刀操作,多执行了一次。采用的是小票打印机,专门购买了带切刀功能的,解决了撕纸缺口不整齐的问题。但采用康虎云打印的时候,发现在正确切纸完成后,会继续出纸2cm左右,然后再进行一次切纸。每次都浪费2cm的纸,虽然是个小问题,但总觉得不太爽。
2、当数据量大时候,超过一定量的数据会无法打印。如上图,底部表格的数据没有打印出来。
以上两个问题,咨询了作者,说需要把打印机寄过去进行有偿调试,费用大概1000-2000元。之前调查打印工具的时候发现除了康虎云打印,还有lodop,相对来讲,lodop入门稍微难一些,但功能强大,用户也比较多。就决定先用lodop试一下。
(声明:本教程是在局域网环境下使用的,广域网环境大同小异)
以下是lodop的安装使用方法:
lodop的入门和使用,以及原理结构,请看lodop的官网。http://www.lodop.net
服务端下载地址:http://www.lodop.net/download.html
选择云打印C-Lodop扩展版,安装到windows上(目前只支持windows,不支持Linux),下文称此台windows主机为server1,假设局域网IP为192.168.0.105
下载库文件,下载地址:https://files.cnblogs.com/files/shen55/CLodopfuncs.js
引入该文件。例如放到uni-APP项目文件的/common/print/目录,在打印页面,引入方法:
1 import { getCLodop } from '@/common/print/CLodopfuncs.js' 2 let getLodop = getCLodop
引入成功以后,打开CLodopfuncs.js文件。将第19、20行的IP地址修改为server1的IP地址。大部分人电脑上有多个打印机(包括虚拟打印机),那么就会带来一个问题,如果点击打印,到底是哪个打印机执行打印?如果是默认打印机,那如果我想指定某台打印机该如何操作?答案是让用户自己设定。将打印机的序号保存到名为printIndex的在Storage中。例如下图中
如果选择倒数第二个打印机(Print to Evernote),则printIndex保存的值为1;如果选择倒数第一个打印机,则printIndex保存的值为0;
以下代码为打印操作的调用代码
1 sendPrint (下单时间, 备注, 手机号码, 联系人姓名, 订单号, 配货人编号, height, table) { 2 let LODOP = getLodop()// 调用getLodop获取LODOP对象 3 LODOP.PRINT_INIT() 4 LODOP.SET_PRINTER_INDEX('XP-80C (发货清单)') 5 LODOP.SET_PRINT_PAGESIZE(1, 721, height, '') 6 LODOP.ADD_PRINT_TEXT(20, 0, 274, 26, '配件商城发货清单') 7 LODOP.SET_PRINT_STYLEA(0, 'FontSize', 12) 8 LODOP.SET_PRINT_STYLEA(0, 'Alignment', 2) 9 LODOP.SET_PRINT_STYLEA(0, 'Bold', 1) 10 LODOP.ADD_PRINT_TEXT(48, 0, 274, 20, `联系方式:${手机号码} ${联系人姓名}`) 11 LODOP.SET_PRINT_STYLEA(0, 'FontSize', 10) 12 LODOP.ADD_PRINT_TEXT(66, 0, 274, 20, `下单时间:${下单时间}`) 13 LODOP.SET_PRINT_STYLEA(0, 'FontSize', 10) 14 LODOP.ADD_PRINT_BARCODE(84, 10, 220, 62, '128Auto', `${订单号}`) 15 LODOP.ADD_PRINT_TEXT(84, 230, 60, 20, '配货员') 16 LODOP.SET_PRINT_STYLEA(0, 'FontSize', 10) 17 LODOP.ADD_PRINT_TEXT(104, 230, 40, 20, `${配货人编号}`) 18 LODOP.SET_PRINT_STYLEA(0, 'FontSize', 10) 19 LODOP.SET_PRINT_STYLEA(0, 'Alignment', 2) 20 LODOP.SET_PRINT_STYLEA(0, 'Bold', 1) 21 LODOP.ADD_PRINT_TEXT(150, 0, 274, 40, `备注:${备注}`) 22 LODOP.SET_PRINT_STYLEA(0, 'FontSize', 10) 23 LODOP.ADD_PRINT_RECT(206, 0, 274, 1, 0, 1) 24 LODOP.ADD_PRINT_TABLE(220, 0, 274, height - 800, table) 25 if(process.env.NODE_ENV === 'development'){ 26 // 开发环境 27 LODOP.PREVIEW() 28 }else{ 29 // 生产环境 30 LODOP.PRINT() 31 } 32 }
是的。你没看错,我使用中文做变量,在js中是合法的,只是用的人比较少而已。打印内容根据需要自行定义,上面只是参考。
CLodopfuncs.js这个文件,是经过修改的,与工具自带的不同。