前面已经说过,如何简单使用lodop了,今天说一下如何获得lodop的打印状态?

在教程里面找了半天,摸索出来了一套。

template:

        <!-- 实验代码 -->
<div>job码</div>
<input type="text" v-model="jobCode">
<div id="printarea" v-html="bb" v-show="false"></div>
<el-button @click="print()">打印</el-button>
<el-button @click="preview()">预览</el-button>

data:

  

        bb:`<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<style> </style>
<body>
<div style="text-align:center;font-family:'楷体';">
<div style="font-size:24px;font-weight:600;">交通会</div>
<div style="font-size:24px;font-weight:500;margin-top:70px;">大萨达所大所大萨达所大所所大萨达所大所</div>
</div> </body>
</html>`,
       jobCode:'1',//job码
printStatus:0,//打印状态
methods:
     createPrintCode(){
LODOP = getLodop();
// 打印初始化
LODOP.PRINT_INIT("打印任务名称");
// 设置字体
LODOP.SET_PRINT_STYLE("FontSize",18);
// 设置加粗
LODOP.SET_PRINT_STYLE("Bold",1);
// 设置纸张大小 打印方向/width/height
LODOP.SET_PRINT_PAGESIZE(0,"100mm","100mm","商品标签");
//在指定位置加文本
// LODOP.ADD_PRINT_TEXT(50,"20%",260,39,"打印页面部分内容");
// 增加超文本项top/left/width/height(高度自适应,设小了有效,大了无效)
LODOP.ADD_PRINT_HTM("20mm","10mm","80mm","600mm",document.getElementById("printarea").innerHTML);
},
print(){//打印
var self=this;
this.createPrintCode();
LODOP.SET_PRINT_MODE("CATCH_PRINT_STATUS",true);//执行该语句之后,PRINT指令不再返回那个所谓“打印成功”
if (LODOP.CVERSION) {//判断c_lodop是否存在,安装了c-lodop就会存在
LODOP.On_Return=function(TaskID,Value){
console.log("TaskID:"+TaskID);
console.log("Value:"+Value);//job代码
self.jobCode=Value;
var timer = setInterval(function(){
console.log("每次轮询的状态:"+self.printStatus);
if(self.printStatus!=0||self.printStatus!=false){
clearInterval(timer);
return;
}
self.getStatusValue(Value);
},300);
};
LODOP.PRINT();
return;
} else{
console.log("c-lodop出错了");
}
},
getStatusValue(job){//根据job代码,获取是否打印成功
var self=this;
LODOP.On_Return=function(TaskID,Value){
console.log("TaskID:"+TaskID);
console.log("打印成功状态:"+Value);//打印成功状态
self.printStatus=Value;
};
LODOP.GET_VALUE("PRINT_STATUS_OK",job);
},
preview(){//预览
this.createPrintCode();
// 预览
LODOP.PREVIEW();
// 直接打印
// LODOP.PRINT();
},

下面来简单说一下,lodop插件可以实现静默打印,免费的时候,静默打印会带水印。

调起静默打印很简单,但是如何知道打印机打印成功呢?

看了看,lodop的例子,我们可以获得打印状态,如果想更智能点,需要去循环查询此状态,一旦返回成功的状态,我们就可以进行下一步处理了!!

第一次调用:    LODOP.On_Return=function(TaskID,Value){},就是给lodop加了个回调函数,TaskID:代表任务id,value是job代码,我也不大理解job代码,不过用它可以去查询,打印状态!!

那么,这个job代码在哪用呢?
看上面代码可以知道,在getStatusValue(job)方法中用到了它,这个方法里又一次给lodop加了个回调函数,参数和第一次调用名字完全一样,但是加完这个回调函数后,下面还写了一句代码:
LODOP.GET_VALUE("PRINT_STATUS_OK",job);
这句代码是 根据job代码 查询打印状态的,调用完这句后,就会触发那个回调函数了,嗯此时的回调内 反回来的value值,就是打印的状态(成功:1或true 失败:0或false),这个值可以用一个全局变量接住,当我们点击打印时,就循环查询这个状态,一旦,返回的状态时成功状态,那么终止循环查询。

具体可以参考,教程的45讲

判断本地c-lodop服务是否启动,可以在

LODOP = getLodop();后加一个判断

如果c-lodop服务没启动,这个值就会是undefined

如果启动了,会有值!!!

 

判断打印机是否忙碌:“PRINT_STATUS_BUSY”

      getStatusValue(valueName,job){//根据job代码,获取是否打印成功
var self=this;
LODOP.On_Return=function(TaskID,Value){
console.log("TaskID:"+TaskID);
console.log(valueName+":"+Value);
self.printStatus=Value;
};
LODOP.GET_VALUE(“PRINT_STATUS_BUSY”,job);
},

下面,再上一个完整的demo,在vue中使用:

<template>
<div class="dashboard-container">
<!-- 实验代码 -->
<div>job码</div>
<div id="printarea" v-html="bb" v-show="false"></div>
<el-button @click="print(1,bb)" :disabled="Boolean(printStatus)">打印</el-button>
<el-button @click="preview()">预览</el-button>
<el-button @click="print(count,bb)" :disabled="Boolean(printStatus)">重复打印</el-button>
<input type="text" v-model.number="count">
<!-- <el-button @click="reqeatPrint()">分任务连续打印</el-button> -->
<el-button @click="breakPagetPrint(printList)">分页连续打印</el-button>
<!-- 遮罩层 -->
<div class="dayinShadow" v-show="shadowShow">
<i class="el-icon-close" @click="closeShadow()" style="cursor:pointer;float:right;font-size:30px;margin:30px;"></i>
正在打印中...
</div>
<!-- 实验代码 -->
</div>
</template> <script>
var LODOP; export default {// 实验代码
watch:{
},
data(){
return {
// 实验代码
bb:`<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<style> </style>
<body>
<div style="text-align:center;font-family:'微软雅黑';">
<div style="font-size:24px;font-weight:600;">xx</div>
<div style="font-size:20px;font-weight:500;margin-top:50px;">xx市</div>
<!-- <img src="http://cmsppt.hoohui.cn/qrCode/1564626553.png" /> -->
</div>
</body>
</html>`,
cc:`<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<style> </style>
<body>
<div style="text-align:center;font-family:'微软雅黑';">
<div style="font-size:24px;font-weight:600;">xx</div>
<div style="font-size:20px;font-weight:500;margin-top:50px;">xx市</div>
</div>
</body>
</html>`,
printList:[],//打印数组
printStatus:0,//打印状态
shadowShow:false,//遮罩显示与否
count:1,//打印份数
// 实验代码
}
},
created(){
this.printList.push(this.bb);
this.printList.push(this.cc);
console.log(this.printList)
},
mounted(){ },
methods:{
createPrintCode(count,htmlStr){
var self=this;
LODOP = getLodop();
return new Promise(function(resolve,reject){
if (LODOP.CVERSION) {//是否能检测到c-lodop的版本号
if(!LODOP){//c-lodop如果没启动,则不能打印
alert("请启动c-lodop服务");
return;
}
// 打印初始化
LODOP.PRINT_INIT("打印任务名称");
if(count){//设置重复打印要放在初始化后面
LODOP.SET_PRINT_COPIES(count);
}
// 设置纸张大小 打印方向/width/height
LODOP.SET_PRINT_PAGESIZE(0,"100mm","100mm","商品标签");
// 增加超文本项top/left/width/height(高度自适应,设小了有效,大了无效)
LODOP.ADD_PRINT_HTM("40mm","10mm","80mm","600mm",htmlStr);
resolve();
} else{
alert("请下载c-lodop");
}
})
}, breakPagetPrint(htmlList=[]){//分页连续打印
var self=this;
if(htmlList.length==0){return};
self.shadowShow=true;
LODOP = getLodop();
if (LODOP.CVERSION) {//是否能检测到c-lodop的版本号
if(!LODOP){//c-lodop如果没启动,则不能打印
alert("请启动c-lodop服务");
return;
}
LODOP.PRINT_INIT("分页打印任务");//初始化在循环中
// 设置纸张大小 打印方向/width/height
LODOP.SET_PRINT_PAGESIZE(0,"100mm","100mm","商品标签");
// 增加超文本项top/left/width/height(高度自适应,设小了有效,大了无效)
for(let i=0,len=htmlList.length;i<len;i++){
LODOP.ADD_PRINT_HTM("40mm","10mm","80mm","600mm",htmlList[i]);
LODOP.NewPage();
}
self.carryPrint();//执行打印命令
} else{
alert("请下载c-lodop");
}
},
print(count,htmlStr){//打印
var self=this;
if(!htmlStr){alert("没有要打印的内容"); return;};
self.shadowShow=true;
this.createPrintCode(count,htmlStr).then(function(){
self.carryPrint();
})
},
carryPrint(){//执行打印命令
var self=this;
LODOP.SET_PRINT_MODE("CATCH_PRINT_STATUS",true);//执行该语句之后,PRINT指令不再返回那个所谓“打印成功”,才能获取到打印状态
LODOP.On_Return=function(TaskID,Value){//TaskID:任务id,Value:job代码
var timer = setInterval(function(){
if(self.printStatus!=0 || self.printStatus!=false){
clearInterval(timer);
self.printStatus=0;
self.shadowShow=false;
return;
}
// PRINT_STATUS_BUSY
self.getStatusValue("PRINT_STATUS_OK",Value);//查询打印任务完成状态
},500);
};
LODOP.PRINT();
},
getStatusValue(valueName,job){//根据job代码,获取是否打印成功
var self=this;
LODOP.On_Return=function(TaskID,Value){//TaskID:任务id,Value:打印成功状态
//弹出层弹出时,而打印机没正常打印,此时为了能关闭弹窗,需要强行把打印状态改成1(完成状态)
self.printStatus = self.shadowShow ? Value : 1;
console.log("打印成功状态:"+self.printStatus);
};
LODOP.GET_VALUE(valueName,job);
},
preview(){//预览
this.createPrintCode().then(function(){
LODOP.PREVIEW();
})
},
closeShadow(){//强制关闭遮罩层
this.printStatus=1;//强制打印状态变为1
this.shadowShow=false;//强制遮罩成关闭
},
reqeatPrint(){//分任务连续打印
var self=this;
LODOP = getLodop();
for(let i=0,len=self.printList.length;i<len;i++){
LODOP.PRINT_INIT("循环打印任务");//初始化在循环中
// 设置字体
LODOP.SET_PRINT_STYLE("FontSize",18);
// 设置加粗
LODOP.SET_PRINT_STYLE("Bold",1);
// 设置纸张大小 打印方向/width/height
LODOP.SET_PRINT_PAGESIZE(0,"100mm","100mm","商品标签");
// 增加超文本项top/left/width/height(高度自适应,设小了有效,大了无效)
LODOP.ADD_PRINT_HTM("40mm","10mm","80mm","600mm",self.printList[i]);
LODOP.PRINT();
}
},
}
}
</script> <style lang="scss" scoped>
.dashboard {
.dayinShadow{
position: fixed;
top:0;
left:0;
right:0;
bottom:0;
background:rgba(0,0,0,.5);
z-index: 1200;
color:#ffffff;
font-size:20px;
text-align:center;
line-height:800px;
}
</style>
 

前端使用lodop如何获取打印状态的更多相关文章

  1. LODOP获取打印状态码和时间列表

    之前有博文介绍获取打印状态码和打印状态码的含义,相关博文:LODOP获取打印机状态码和状态码含义测试.此外 ,也有获取状态码及其变化的方法,可以获取打印状态码的列表,列表包含每个状态和每个状态的时间. ...

  2. 前端使用lodop插件进行打印设置

    先前梳理了后台打印导出参考:https://www.cnblogs.com/yyk1226/p/9856032.html,但是没有显示出来打印预览页面. 本章使用Lodop插件进行打印设置,实现打印机 ...

  3. LODOP获取打印机状态码和状态码含义测试

    由于打印机千差万别,打印机执行的标准也不一样,LODOP获取的打印状态码也可能不同,安装了个打印机驱动实际测试一下,测试的打印机驱动是Brother Color Type3 Class Driver. ...

  4. lodop和c-lodop通过打印状态和任务不在队列获取打印成功

    之前的博文有通过判断pirnt的返回值,判断加入队列算打印成功,建议使用这种简单的判断方法.此外还有其他判断方法,例如通过PRINT_STATUS_OK判断,但是这个状态不是所有打印机能支持这种判断成 ...

  5. LODOP获取打印成功,是否加入队列

    之前博文介绍过获取打印机状态码 LODOP获取打印机状态码和状态码含义测试,但是打印机种类千差万别,状态码不一定准确,特别是打印成功的状态码,获取任务不在队列,可以判断打印成功,删除任务也是任务不在队 ...

  6. asp.net Lodop实现批量打印

    1.列表(前台) <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="w_stu ...

  7. 如何在使用 RemoteWebDriver 打开网页的同时获取 Http 状态码

    最近一直在用Selenium这个开源项目写一些web 自动化的小玩意.本来一直运行的挺好,直到有一天突然发现资源抓取失败了,翻看日志才发现,原来本该正常打开的页面返回了504错误所以自然失败了.如何避 ...

  8. lodop判断是否打印成功

    需要引用js <script src="js/jquery-3.3.1.js"></script> <script src="js/Lodo ...

  9. iOS 获取网络状态

    在iOS开发者,获取网络状态比较常用 -(NSString *)getNetWorkStates{ UIApplication *app = [UIApplication sharedApplicat ...

随机推荐

  1. CentOS7 服务器连接超时自动断开问题解决

    背景 现在的客户们都开始使用云服务器了,还要通过堡垒机才给访问权限,这种方式访问方式以前都是银行的"专利",不过也间接说明其他行业的信息化也越来越普及了.今天主要是因为分配给我的这 ...

  2. Admui相关第三方插件

    ace 版本:1.2.3au 官网:https://github.com/ajaxorg/ace-builds/ 许可:BSD 依赖:无 DataAPI:data-pulgin="ace&q ...

  3. HTTP抓包

    1 概述 wireshark:全平台抓包工具,需要图形化界面,十分强大: httpry:http抓包插件,功能一般,操作简单: tcpdump:强大的抓包插件,支持多种网络协议. 2 httpry ( ...

  4. DataGridView绑定数据、删除数据

    定义学生类: using System; using System.Collections.Generic; using System.Linq; using System.Text; using S ...

  5. MySql翻页查询

    分页查询在网页中随处可见,那原理是什么呢?下面简单介绍一下基于MySql数据库的limit实现方法. 首先明确为什么要使用分页查询,因为数据庞大,查询不可能全部显示在页面上,如果全部显示在页面上,也会 ...

  6. VBA决策(十)

    决策允许程序员控制脚本或其中一个部分的执行流程.执行由一个或多个条件语句控制.以下是在大多数编程语言中找到的典型决策结构的一般形式. VBA提供了以下类型的决策声明. 点击以下链接来查看它们的详细信息 ...

  7. List · leetcode-24. 交换相邻节点

    题面 Given a linked list, swap every two adjacent nodes and return its head. You may not modify the va ...

  8. MySQL在command line Client下的一些命令

    MySQL在command line Client下的一些命令 通过CMD进入到本地数据库: mysql -h localhost -u -root -p 参数说明: -h 要连接的服务器的主机名或I ...

  9. C语言判断一个32位的数据,有多少位是1,然后用串口发送出来

    今天遇到了一个问题,遇到一个32位的数据,写一个子函数来判断它的多少位是1.我的思路一开始是把这个数据变成一个32位容量的数组然后每个位去比较是不是1,如果是1,就用另一个变量加1.最后返回这个变量. ...

  10. L1与L2正则化

    目录 过拟合 结构风险最小化原理 正则化 L2正则化 L1正则化 L1与L2正则化 参考链接 过拟合 机器学习中,如果参数过多.模型过于复杂,容易造成过拟合. 结构风险最小化原理 在经验风险最小化(训 ...