做框架图的网站,查询公司,万站网,景点网站设计与制作文章目录 前言一、LODOP.GET_VALUE(PRINT_STATUS_OK, P_ID)二、LODOP.GET_VALUE(PRINT_STATUS_EXIST, P_ID)三、核心实现代码总结 前言
前面写过Lodop的相关文章 #xff1a; 文章一#xff1a;《Lodop打印控件常用指令记录》 文章二#xff1a;《Vue3hooks快速接入Lodop打… 文章目录 前言一、LODOP.GET_VALUE(PRINT_STATUS_OK, P_ID)二、LODOP.GET_VALUE(PRINT_STATUS_EXIST, P_ID)三、核心实现代码总结 前言
前面写过Lodop的相关文章 文章一《Lodop打印控件常用指令记录》 文章二《Vue3hooks快速接入Lodop打印插件》 今天版本迭代之前打印状态判断依据是否推送到打印队列来判断是否成功这次要优化下 一、LODOP.GET_VALUE(‘PRINT_STATUS_OK’, P_ID)
LODOP.GET_VALUE(‘PRINT_STATUS_OK’, P_ID)判断打印是否成功。
这个状态不是所有打印机能支持这种判断成功这个是通过“状态码包含128”来 判断但是但有些打印机输出完毕状态码不变成128而一直等于20“正在打印16”和“正在删除4”之和所有这种单独用这个PRINT_STATUS_OK判断有些打印机会判断不出来。 这种情况下需要加附加判断判断打印机不在队列为成功。也就是下面LODOP.GET_VALUE(‘PRINT_STATUS_EXIST’, P_ID)
二、LODOP.GET_VALUE(‘PRINT_STATUS_EXIST’, P_ID)
这种方法如果是手动在队列删除了任务也会判断为成功。 但是大多数情况下一般用户不会在打印中途删除任务所以这种方法还可以使用但是这种是根据JOB判断
目前市面上很多软件大多没有提示打印成功的打印机本身如果缺纸卡纸或脱机等打印机本身会有提示音或提示灯windows系统一般会在右下角提示打印错误目前lodop 也不支持mac os系统所以不提示成功也是常见的。但是我这里打印后要标记是否成功传回后端比较严格控制打印数量。而直接简单判断是否推送到打印队列会标记打印成功但打印纸张没有出来的情况改为是否在队列来判断的话可以判断打印脱机的情况还没有出纸
三、核心实现代码
参考官网 Lodop案例45 实现。
我这边是强制使用C-Lodop参考7.Lodop控件升级到C-Lodop云打印 配置相关代码实现。所以下面的代码就不需要考虑Lodop.CVERSION 之类的判断和Lodop 插件的兼容。VIP群友说只用C-Lodop 有时候纸张尺寸切换获取会延迟我目前没用到。这里提一嘴。 letLODOP,P_ID ,TaskID1,TaskID2,t,c 0 //声明为全局变量function PrintWait() {return new Promise(async (resolve, reject) {if (c 0) {console.log(正打印中...)return}// 执行该语句之后PRINT指令不再返回那个所谓“打印成功”才能获取到打印状态LODOP.SET_PRINT_MODE(CATCH_PRINT_STATUS, true)LODOP.On_Return async function (TaskID, Value) {P_ID Valueconsole.log(该任务走的是c-lodop方式job代码为 P_ID)if (P_ID ! ) {c 0const isSucces await C_WaitFor()resolve(isSucces)}}LODOP.PRINT()})}function C_WaitFor() {return new Promise(async (resolve, reject) {c c 1console.log(正等待(JOB代码是 P_ID )打印结果 c 秒)t setTimeout(C_WaitFor, 1000)// 加了这句On_Return 保持多个回调结果LODOP.On_Return_Remain trueLODOP.On_Return function (TaskID, Value) {if (TaskID TaskID1) {if (Value 1) {clearTimeout(t)console.log(走的c-lodop方式PRINT_STATUS_OK判断为打印成功,TaskID:${TaskID},value:${Value})c 0return resolve(true)}} else if (TaskID TaskID2) {if (Value 0) {clearTimeout(t)console.log(走的c-lodop方式判断该该任务已经不在队列已成功或删除任务,TaskID:${TaskID},value:${Value})c 0return resolve(true)}}}// TaskID1 LODOP.GET_VALUE(PRINT_STATUS_OK, P_ID)TaskID2 LODOP.GET_VALUE(PRINT_STATUS_EXIST, P_ID)if (c 20) {clearTimeout(t)console.log(打印超过20秒没捕获到成功状态)c 0ElMessage.warning(Printing is interrupted, please check the printer connection. )return resolve(false)}})}在打印 printA4Paper 函数内判断逻辑加上面代码。而且用 return new Promise(async (resolve, reject) {}) 保证里面 LODOP.On_Return回调之后执行。这样就只会一个一个job推送到打印队列。其中有一个失败就中断。 Tips printA4Paper() 在往期文章《Vue3hooks快速接入Lodop打印插件》 有提到。 总结
以上就是今天的内容了。主要介绍了使用Lodop 打印插件在循环打印的时候实现串行打印并且获取打印结果首先获取job接着判断是否在打印队列中来判断是否打印成功。
参考 http://www.c-lodop.com/demolist/PrintSample45.html http://www.c-lodop.com/demolist/PrintSample45.html https://www.cnblogs.com/huaxie/p/11730651.html