前面已经说过,如何简单使用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. Largest Submatrix 3 CodeForces - 407D (dp,好题)

    大意: 给定矩阵, 求选出一个最大矩形, 满足矩形内每个元素互不相同. 考虑枚举上下左三个边界, 求出最大右边界的位置. 注意到固定上边界, 下边界递推时, 每个左边界对应最大右边界是单调不增的. 所 ...

  2. django 浅谈索引(转)

    https://blog.csdn.net/qq_37049050/article/details/80749381

  3. MH-P虚拟机DSR中安装SQL2008

    双击下载好的安装文件setup.exe.(注意:安装之前请确认是否有安装SQL Server 2008 R2需要的.NET Framework 3.5 SP1,我的环境由于之前有配置安装过,在这里不具 ...

  4. (六)CXF之自定义拦截器

    一.需求分析 客户端在调用服务端的方法时,需要进行用户名和密码验证.此时分为: 客户端请求的时候,要发送用户名密码到服务端 服务端检验用户名密码. 二.案例 前提:本章案例是基于前一章节的例子进一步讲 ...

  5. (一)weblogic11g的安装配置

    一.安装 找到weblogic安装包,小编这里用的是wls1034_win32.exe版本,双击打开 完成后运行快速启动,打开快速启动界面,配置weblogic.如果没有打开,还可以在开始菜单中找到q ...

  6. centOS 7单机安装 kong

    kong 网关 单机部署 环境:centOS 7:依赖:jdk1.8 安装内容:postgresql数据库, kong 网关,nodeJs和npm,kong Dashboard (可视化管理界面) 版 ...

  7. springboot启动流程(十一)aop切面处理过程

    所有文章 https://www.cnblogs.com/lay2017/p/11478237.html 正文 spring的两大核心就是ioc和aop.在关于ioc依赖注入的文章中,我们了解了如何根 ...

  8. python matplotlib绘制六种可视化图表

    1. 折线图 绘制折线图,如果你数据不是很多的话,画出来的图将是曲折状态,但一旦你的数据集大起来,比如下面我们的示例,有100个点,所以我们用肉眼看到的将是一条平滑的曲线. 这里我绘制三条线,只要执行 ...

  9. stm32 待机模式

    低功耗模式 降低系统时钟速度 不使用APBx和AHB外设时,将对应的外设时钟关闭 睡眠模式(Cortex™-M3内核停止,所有外设包括Cortex-M3核心的外设,如NVIC.系统时钟(SysTick ...

  10. 【python+ddt】DDT模块的使用

    ddt模块包含了一个类的装饰器ddt和两个方法的装饰器: data:包含多个你想要传给测试用例的参数: file_data:会从json或yaml中加载数据: unpanck:通常data中包含的每一 ...