vue实现自动打印功能

最近有个项目需求,需要识别车牌后,自动打印派车单。最终选择使用Lodop实现该自动打印功能。
官网地址:Lodop和C-Lodop官网主站

1. 下载控件

我这里下载的是Windows64版本,根据自己的操作系统自行选择。
Lodop下载界面

2. 安装控件

运行 CLodop_Setup_for_Win64NT_6.571EN.exe 文件,进行安装。
安装结束图示

3. 引用LodopFuncs.js

以下是 LodopFuncs.js 代码。

//用双端口加载主JS文件Lodop.js(或CLodopfuncs.js兼容老版本)以防其中某端口被占:
var MainJS ="CLodopfuncs.js",
    URL_WS1   = "ws://localhost:8000/"+MainJS,                //ws用8000/18000
    URL_WS2   = "ws://localhost:18000/"+MainJS,
    URL_HTTP1 = "http://localhost:8000/"+MainJS,              //http用8000/18000
    URL_HTTP2 = "http://localhost:18000/"+MainJS,
    URL_HTTP3 = "https://localhost.lodop.net:8443/"+MainJS;   //https用8000/8443

//==检查加载成功与否,如没成功则用http(s)再试==
//==低版本CLODOP6.561/Lodop7.043及前)用本方法==
function checkOrTryHttp() {
  if (window.getCLodop)  return true;
  var head = document.head || document.getElementsByTagName("head")[0] || document.documentElement;
  var JS1 = document.createElement("script")
     ,JS2 = document.createElement("script")
     ,JS3 = document.createElement("script");
  JS1.src = URL_HTTP1;
  JS2.src = URL_HTTP2;
  JS3.src = URL_HTTP3;
  JS1.onerror = function(e) {
      if (window.location.protocol !== 'https:')
          head.insertBefore(JS2, head.firstChild); else
          head.insertBefore(JS3, head.firstChild);
  }
  JS2.onerror = JS3.onerror=function(){
    var JSelf = document.createElement("script");
    JSelf.src = "/"+MainJS; //JSelf让其它电脑通过本机打印(仅适用CLodop自带例子)
    document.head.insertBefore(JSelf, document.head.firstChild);
  }
  head.insertBefore(JS1,head.firstChild);
}

//==加载Lodop对象的主过程:==
(function loadCLodop(){
  if (!window.WebSocket && window.MozWebSocket) window.WebSocket=window.MozWebSocket;
  //ws方式速度快(小于200ms)且可避免CORS错误,但要求Lodop版本足够新:
  try {
      var WSK1=new WebSocket(URL_WS1);
      WSK1.onopen = function(e) {setTimeout(checkOrTryHttp,200); }
      WSK1.onmessage = function(e) {if (!window.getCLodop) eval(e.data);}
      WSK1.onerror = function(e) {
           var WSK2=new WebSocket(URL_WS2);
           WSK2.onopen = function(e) {setTimeout(checkOrTryHttp,200);}
           WSK2.onmessage = function(e) {if (!window.getCLodop) eval(e.data);}
           WSK2.onerror= function(e) {checkOrTryHttp();}
      }
  } catch(e){
    checkOrTryHttp();
  }
})();

//==获取LODOP对象的主过程:==
function getLodop(oOBJECT, oEMBED) {
    var LODOP;
    try {
        LODOP = window.getCLodop();
        if (!LODOP && document.readyState !== "complete") {
            alert("C-Lodop没准备好,请稍后再试!");
            return;
        }
        //清理原例子内的object或embed元素,避免乱提示:
        if (oEMBED && oEMBED.parentNode)  oEMBED.parentNode.removeChild(oEMBED);
        if (oOBJECT && oOBJECT.parentNode)oOBJECT.parentNode.removeChild(oOBJECT);
        return LODOP;
    } catch (err) {
        console.error("getLodop出错:" + err);
    }
}

export { getLodop }; //导出getLodop

将 LodopFuncs.js引入至项目中

import { getLodop } from "@/utils/LodopFuncs";

4. 初始化Lodop

export default {
    data() {
        return {
            lodop: null,
            PRINT_STATUS_OK: null,
        }
    },
    created() {
        this.lodop = getLodop();
    },
    methods: {
        print() {
            console.log("初始化打印参数...")
            //SET_PRINT_MODE("PRINT_DUPLEX",2);0-不控制 1-不双面 2-双面(长边装订) 3-小册子双面(短边装订_长边水平)
            //SET_PRINT_MODE("PRINT_DEFAULTSOURCE",1);1-纸盒 4-手动 7-自动 0-不控制
            //SET_PRINT_PAGESIZE(intOrient,intPageWidth,intPageHeight,strPageName);
            // intOrient:打印方向及纸张类型
            // 1---纵向打印,固定纸张; 
            // 2---横向打印,固定纸张;  
            // 3---纵向打印,宽度固定,高度按打印内容的高度自适应(见样例18);
            // 0---方向不定,由操作者自行选择或按打印机缺省设置。
            this.lodop.SET_LICENSES("", "13F0BE65846276CB60111433C6280000", "", "");
            this.lodop.PRINT_INIT("车辆派遣单_" + this.applicationNo);
            //this.lodop.SET_PRINT_PAGESIZE(0, 0, 0,"A5 (148 x 210mm)");
            this.lodop.SET_PRINT_MODE("PRINT_DUPLEX", 1);
            this.lodop.SET_PRINT_MODE("PRINT_DEFAULTSOURCE", 1);

            //console.log(this.$refs['printDomA'].$el.innerHTML)
            //this.lodop.SET_PRINT_MODE("POS_BASEON_PAPER",true);
            // var csstyle = "<style>.table {border: 1px solid #000;width: 100 %;}.table table {width: 100 %;margin - right: auto;margin - left: auto;border - collapse: collapse;border: 1px solid #000;font - size: 14px;}.table table th {font - weight: normal;font - size: 16px;}.table table td {padding: 5px;} <style>";
            this.lodop.ADD_PRINT_HTM("1mm", "1mm", "RightMargin:1mm", "BottomMargin:1mm", this.$refs['printDomA'].$el.innerHTML);
            //this.lodop.NewPage();
            // this.lodop.ADD_PRINT_HTM(10, 10, "100%", 25, this.$refs['printDomB'].$el.innerHTML);
            this.lodop.SET_PRINT_STYLE("Horient", 2);
            this.lodop.SET_PRINT_STYLE("Vorient", 2);
            //打印份数
            this.lodop.SET_PRINT_COPIES(1);
            // console.log("PrinterName", this.lodop.GET_PRINTER_NAME(0))
            // console.log("Duplex", this.lodop.GET_PRINTER_NAME("0:Duplex"))
            // console.log("PaperSize", this.lodop.GET_PRINTER_NAME("0:PaperSize"))
            // console.log("Orientation", this.lodop.GET_PRINTER_NAME("0:Orientation"))
            // console.log("FormName", this.lodop.GET_PRINTER_NAME("0:FormName"))
            // console.log("DefaultSource", this.lodop.GET_PRINTER_NAME("0:DefaultSource"))
            // 打印预览
            console.log("开始打印:", this.applicationNo)
            // 预   览  this.lodop.PREVIEW();
            // 自动打印  this.lodop.PRINT();
            this.PRINT_STATUS_OK = this.lodop.PRINT();
        },
         addTravelPrint() {
            addTravelPrint({ matterFormId: this.matterFormId,remark:this.applicationNo }).then((res) => {
                console.log(res);
            })
        }
    },
    watch: {
        PRINT_STATUS_OK(value) {
            if (value) {
                console.log("打印成功",value);
                this.addTravelPrint();
            }
        }

    }
};

备注:该控件若需跳过预览,会出现“试用版”水印,如需去除,请购买正式软件。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值