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这个文件,是经过修改的,与工具自带的不同。

 

posted @ 2020-01-29 15:06  长空5  阅读(5819)  评论(12编辑  收藏  举报