文章背景:

作者接触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代码获取打印状态信息及最终结果

注意有些型号的打印机返回的状态码和文档中代码说明不一致请另行作判断,
详细的打印机状态信息请参考打印机状态

总结

以上就是作者要分享的关于lodop通用的几个场景,篇幅有限,更多应用场景和Lodop的功能请参考lodop官网的在线样例.

关于Lodop的使用场景浅谈相关推荐

  1. 分布式服务架构的设计方案下—通过业务场景浅谈分布式设计思路

    文章目录 分布式业务场景分析 分布式系统提高承载量的基本手段 并发模型(多线程.异步) 缓存/缓冲 硬件故障 资源利用率优化 软件服务内容更新 数据统计 目录服务 消息队列服务(ActiveMQ.Ze ...

  2. 浅谈无人机的应用场景

    随着技术的发展,无人机的应用场景不断扩展.我们时常在新闻里能看到无人机在各行各业的应用,就如今年的春晚,据说也采用了无人机的技术来操控.那,无人机还有哪些应用场景呢?下面我们就来详细了解一下无人机的应 ...

  3. java bitset用途_浅谈Java BitSet使用场景和代码示例

    搜索热词 @H_502_0@一.什么是BitSet? @H_502_0@ 注:以下内容来自JDK API: @H_502_0@ BitSet类实现了一个按需增长的位向量.位Set的每一个组件都有一个b ...

  4. 算力限制场景下的目标检测实战浅谈

    作者:张钊宁 本文为极市原创,转载请注明作者和出处. 原文:算力限制场景下的目标检测实战浅谈 本篇文章为张博19年1月18日在极市直播分享的文字详细整理. 算力限制场景主要是指在嵌入式设备,也就是算力 ...

  5. 浅谈NB-IoT应用场景及方案

    浅谈NB-IoT应用场景及方案   ​说起NB-IoT相信大家一定都不陌生,可谓是近来LPWAN技术中的热门.对于NB-IoT高覆盖.低功耗.低成本的优势这里就不在赘述了.本文主要介绍NB-IoT的应 ...

  6. 浅谈区块链技术应用场景

    浅谈区块链技术应用场景 摘要 一,区块链技术简介 二,区块链技术基础 1. 点对点之间传输信息的网络 2. 非对称加密技术 3. 共识机制 三,基于软件层面区块链技术应用场景 应用层 区块链技术与身份 ...

  7. 直播回顾 | 子芽CCF TF:云原生场景下软件供应链风险治理技术浅谈

    CCF TF(技术前线委员会,Tech Frontier Committee)是中国计算机学会(CCF)为企业界计算机专业人士创建的企业间常态化合作交流平台,创始委员由Intel.LinkedIn.M ...

  8. 浅谈iframe的优缺点及应用场景

    浅谈iframe的优缺点及应用场景 对iframe的优缺点及应用场景的一点小结 浅谈iframe的优缺点及应用场景 iframe 创建包含另外一个文档的内联框架(即行内框架),简而言之,iframe标 ...

  9. 浅谈几种区块链网络攻击以及防御方案之其它网络攻击

    旧博文,搬到 csdn 原文:http://rebootcat.com/2020/04/16/network_attack_of_blockchain_other_attack/ 写在前面的话 自比特 ...

最新文章

  1. c语言中void delay0.5(),单片机彩灯是怎样点亮
  2. ubuntu9.10安装Tweak
  3. 转:Hash, MAC,HMAC说明
  4. 一步步学习操作系统(1)——参照ucos,在STM32上实现一个简单的多任务(“啰里啰嗦版”)...
  5. SharePoint 2013创建应用程序时IIS端口文件夹下没文件
  6. VINS状态估计篇-视觉sfm初始化
  7. java中ftp文件上传和中文乱码解决
  8. 圆章能随便刻吗_自己晒干的蒲公英能长期当茶随便喝吗?医生:3个危害不请自来...
  9. 作为开发者发布小程序_如何建立个人品牌作为新开发者
  10. 数字化转型鸿沟如何消除?ROMA Connect融合集成,联接企业应用现在与未来
  11. Windows Server 2016-管理Active Directory复制任务
  12. java arraylist6_java 集合 ArrayList
  13. WordPress如何开启用户注册功能
  14. mpvue微信小程序引入腾讯地图sdk
  15. pcie扰码的作用_扰码讲解
  16. 什么是ISP(网络业务提供商)?
  17. sass-ihrm项目-系统用户权限设计概述-部门微服务、部门前端
  18. sge中的windows选项
  19. Hopkins Statistic判断irir数据集聚类性能
  20. K成本中心PO总账科目矛盾报错

热门文章

  1. 零基础导入自己YOLOv3或YOLOv3-Tiny模型
  2. The 2019 Asia Nanchang First Round Online Programming Contest - B. Fire-Fighting Hero
  3. OpenDDS踩坑(2)-DCPSInfoRepo ERROR add_domain_participant returned invalid id
  4. springboot(07)邮件发送(qq邮箱)
  5. 智慧养老:一套完整的养老院人员定位解决方案,全面解决养老院人员管理的弊端-新导智能
  6. Ubuntu20.4下x264、x265、fdk-aac和FFmpeg4.3源码编译安装
  7. 在计算机网络数据传输时最佳交换数据方式,计算机网络基础:数据通信技术之数据交换技术(二)...
  8. python开发鸡兔同笼
  9. Catia 端面凸轮设计
  10. 大地形中草绘制的思想