共计 3337 个字符,预计需要花费 9 分钟才能阅读完成。
文章背景:
作者接触 lodop 大略是从 2018 年年初,因为公司业务线调整,筹备开发一款对于国内旅行入境手续办理的终端设备,起初公司决定让安卓工程师实现,起初评估说实现不了。最初决定让前端工程师实现。接到工作后, 最开始想要用原生 JavaScript 实现,通过评估之后发现原生不仅性能繁多且效率低,一些简单的场景实现不了。通过一系列评估剖析, 最终抉择应用 LODOP 这款 JavaScript 扩大来实现。
写作目标:
作者在应用 LODOP 开发过程中没有相干成型案例可参考。只能一遍遍熟读文档,正所谓一步一个坎,写这篇文章的目标就是为了帮忙有相干开发需要的开发者有个可借鉴和参考的案例。少踩坑,躲避作者已经经验过的苦楚过程。
我的项目简介:
作者开发的这款设施, 次要集泰国、越南、新加坡、老挝、菲律宾、柬埔寨、日本、韩国、缅甸、摩洛哥、美国等国家入境手续的的办理以及证件照和境外保险单的打印等性能。
场景剖析:
场景剖析开始之前首先把开发环境搭起来步骤如下:
1. 首先下载并装置 LODOP
2. 装置相干打印机驱动
3. 我的项目中引入相干文件(CLodopfuncs.js || LodopFuncs.js)
4. 就能够开启 lodop 开发之旅了
如果不晓得安装包和文件请搜寻 LODOP 官网
场景一:
我要去打印泰国的入境手续,泰国的入境材料有入境卡和落地签,落地签上须要 2 寸证件照一张。这里就波及到一个订单同时调启 2~3 台打印机同时工作的状况。
// 实现打印的代码
let LODOP;LODOP.PRINT_INIT("泰国入境单");// 打印机初始化
LODOP.SET_PRINTER_INDEX(2);// 指定打印机 (数字 2 通过[指定打印机](http://www.lodop.net/demolist/PrintSample7.html) 获取)
LODOP.SET_PRINT_MODE("PRINT_DEFAULTSOURCE",1);// 管制打印机的纸张起源(主动、纸盒、手动等);
LODOP.SET_PRINT_PAGESIZE(2,"","","A5");// 指定打印机的纸盒纸张打印方向纸张大小(A5 是纸张类型,打印机可手动设置,通过设置打印机纸张类型来指定纸盒)LODOP.SET_PRINT_MODE("CATCH_PRINT_STATUS",true);// 状态捕捉
LODOP.SET_PRINT_MODE("RESELECT_PRINTER",true);// 设置是否能够从新抉择打印机。LODOP.SET_PRINT_MODE("RESELECT_PAGESIZE",true);// 设置是否能够从新抉择纸张。LODOP.ADD_PRINT_HTML();
ThailandEntry(surname,name)// 要打印内容的办法
LODOP.PRINT();// 执行打印
// 实现要打印内容的代码
ThailandEntry(surname,name){LODOP = getLodop();
LODOP.SET_PRINT_PAGESIZE(2,2100,2970,"");
LODOP.SET_PRINT_MODE("PRINT_NOCOLLATE",1);// 获取状态码很要害的一句话
LODOP.ADD_PRINT_TEXT(274,309,80,16,surname);// 打印的内容和地位设置
LODOP.SET_PRINT_STYLEA(0,"FontSize",12);// 打印内容的款式设置
LODOP.ADD_PRINT_TEXT(305,329,120,16,name);
LODOP.SET_PRINT_STYLEA(0,"FontSize",12);
}
ThailandEntry 函数的代码能够通过打印设计间接生成代码
落地签和入境卡代码相似对打印机和纸盒的指定不同
照片和下面略微有差异
LODOP.SET_PRINT_PAGESIZE(1,1480,2100,"");// 设定纸张类型
LODOP.SET_PRINTER_INDEX(1);// 指定打印机
LODOP.SET_PRINT_MODE("CATCH_PRINT_STATUS",true);// 状态捕捉
LODOP.SET_PRINT_MODE("RESELECT_PRINTER",true);// 设置是否能够从新抉择打印机。LODOP.SET_PRINT_MODE("RESELECT_PAGESIZE",true);// 设置是否能够从新抉择纸张。let ImageStr=$(".imagesFrame").html('<div>'
+'<img src='+e.data.service03[i].guIdentiPhoto+'alt="" style="border:1px solid #000;"/>'+'</div>');
LODOP.ADD_PRINT_HTM(0,0,1020,1600,ImageStr);// 和入境卡和落地签差异
LODOP.PRINT();// 打印
重要的事件说三遍:不要试图通过 css 款式去管制 img 元素的尺寸(结果就是图片含糊失真)解决办法:间接通过手动设置打印机的排版模式
场景二:
当咱们要打印柬埔寨的入境材料别离有出入境卡、落地申请表、海关申报单、证件照。须要在落地签上追加一个二维码对接柬埔寨入境签证预审查与发放控制系统(抖个伶俐此零碎也是作者开发的)
ADD_PRINT_BARCODE(Top,Left,Width,Height,BarCodeType,BarCodeValue);// 参数介绍
Top 对应条码左上角到页面的顶部间隔
Left 对应的条码左上角到页面左侧的间隔
Width 条码的总宽度,计量单位 px(1px=1/96 英寸)Height 条码的总高度(一维条码时包含文字高度)BarCodeType 条码的类型(规制)名称
BarCodeValue 条码值(要获取的信息)
以上代码追加到打印内容的函数中就能够了,具体应用条码规定请参照打印条码
场景三:
当我要打印越南入境材料,越南入境材料有落地签和照片,然而越南落地签须要正反两面都要填写信息,打印机只反对 A4 纸正反两面打印。
SET_PRINT_MODE("PRINT_DUPLEX",2);0- 不管制 1- 不双面 2- 双面(长边装订) 3- 小册子双面(短边装订_长边程度)
SET_PRINT_MODE("PRINT_DEFAULTSOURCE",7);1- 纸盒 4- 手动 7- 主动 0- 不管制
下面示意打印机主动双面打印(想要具体理解双面打印请参考双面打印)
function VietnamLandingPrint(Name,...args){LODOP = getLodop();
LODOP.SET_PRINT_PAGESIZE(0,0,0,"A4");// 指定纸张类型和纸盒
// 侧面内容
LODOP.ADD_PRINT_TEXT(190,240,173,22,Name);
LODOP.SET_PRINT_STYLEA(0,"FontSize",12);
.............
LODOP.NewPage();// 辨别侧面和背面要打印的信息
// 反面内容
LODOP.ADD_PRINT_TEXT(630,395,183,22,EntCity);
LODOP.SET_PRINT_STYLEA(0,"FontSize",12);
.................
}
以上内容是双面打印内容的办法设置
场景四:
在开发过程中必定遇到过打印队列中工作多纸张不够的状况,这个时候获取打印机状态是十分有必要的。
LODOP.SET_PRINT_MODE("CATCH_PRINT_STATUS",true);// 获取 JOB 代码
LODOP.GET_VALUE("PRINT_STATUS_XXX","JOB 代码值")// 通过 JOB 代码获取打印状态信息及最终后果
留神有些型号的打印机返回的状态码和文档中代码阐明不统一请另行作判断,
具体的打印机状态信息请参考打印机状态 <br/>
总结
以上就是作者要分享的对于 lodop 通用的几个场景,篇幅无限,更多利用场景和 Lodop 的性能请参考 lodop 官网的在线样例.