详解如何在vue项目中使用lodop打印插件


Posted in Javascript onSeptember 27, 2018

项目中使用到打印的功能。领导推荐使用Lodop

Lodop是什么东东,反正就是可以定制打印的插件。。。

既然是插件,vue的渐进式开发。完全可以拿来化为己用。

如何使用那?先大概看了下开发文档,就是一堆demo,一个js文件,三个安装程序,我擦,这么简单。come on 电脑安装C-Lodop,就可以打印预览来了。

开工,翻来覆去就一个LodopFuncs.js是干货,扔到项目中。就差怎么调里面的方法了。

如何引用,当然得改造喽

LodopFuncs.js 方法改造如下

//====判断是否需要安装CLodop云打印服务器:====
export function needCLodop(){  ......  }

//====获取LODOP对象的主过程:====
export function getLodop(oOBJECT,oEMBED){  ......  }

完事,然后就是怎么使用了

在具体的调用页面

import {getLodop} from '../common/LodopFuncs'

......
  methods: {
 
   printPdf() {
    this.CreateOneFormPage();
//    LODOP.PRINT();
    LODOP.PREVIEW();
   },
   CreateOneFormPage() {
    LODOP = getLodop();
    LODOP.PRINT_INIT("订货单");
    LODOP.SET_PRINT_STYLE("FontSize", 18);
    LODOP.SET_PRINT_STYLE("Bold", 1);
    LODOP.ADD_PRINT_TEXT(50, 231, 260, 39, "打印页面部分内容");
    LODOP.ADD_PRINT_HTM(88, 200, 350, 600, 
                    document.getElementById("form1").innerHTML);  

   },
  }
......

你以为就这么多。对的就这

现在碰见个指令打印问题,在项目中直接把部分指令都打印出来了,不能打印出正常样式,™
现在都是驱动打印机,暂时不考虑指令的....

常见问题:浏览器alert警告lodop打印出错之类的,首先得把lodop本地服务打开。

鉴于好多人提问,完整的代码还是贴出来吧。(没修改什么东西啊....)

LodopFuncs.js

var CreatedOKLodop7766=null;

//====判断是否需要安装CLodop云打印服务器:====
export function needCLodop(){
 try{
  var ua=navigator.userAgent;
  if (ua.match(/Windows\sPhone/i) !=null) return true;
  if (ua.match(/iPhone|iPod/i) != null) return true;
  if (ua.match(/Android/i) != null) return true;
  if (ua.match(/Edge\D?\d+/i) != null) return true;

  var verTrident=ua.match(/Trident\D?\d+/i);
  var verIE=ua.match(/MSIE\D?\d+/i);
  var verOPR=ua.match(/OPR\D?\d+/i);
  var verFF=ua.match(/Firefox\D?\d+/i);
  var x64=ua.match(/x64/i);
  if ((verTrident==null)&&(verIE==null)&&(x64!==null))
   return true; else
  if ( verFF !== null) {
   verFF = verFF[0].match(/\d+/);
   if ((verFF[0]>= 42)||(x64!==null)) return true;
  } else
  if ( verOPR !== null) {
   verOPR = verOPR[0].match(/\d+/);
   if ( verOPR[0] >= 32 ) return true;
  } else
  if ((verTrident==null)&&(verIE==null)) {
   var verChrome=ua.match(/Chrome\D?\d+/i);
   if ( verChrome !== null ) {
    verChrome = verChrome[0].match(/\d+/);
    if (verChrome[0]>=42) return true;
   };
  };
  return false;
 } catch(err) {return true;};
};

//====页面引用CLodop云打印必须的JS文件:====
if (needCLodop()) {
 var head = document.head || document.getElementsByTagName("head")[0] || document.documentElement;
 var oscript = document.createElement("script");
 oscript.src ="http://localhost:8000/CLodopfuncs.js?priority=1";
 head.insertBefore( oscript,head.firstChild );

 //引用双端口(8000和18000)避免其中某个被占用:
 oscript = document.createElement("script");
 oscript.src ="http://localhost:18000/CLodopfuncs.js?priority=0";
 head.insertBefore( oscript,head.firstChild );
};

//====获取LODOP对象的主过程:====
export function getLodop(oOBJECT,oEMBED){
 var strHtmInstall="<br><font color='#FF00FF'>打印控件未安装!点击这里<a href='install_lodop32.exe' target='_self'>执行安装</a>,安装后请刷新页面或重新进入。</font>";
 var strHtmUpdate="<br><font color='#FF00FF'>打印控件需要升级!点击这里<a href='install_lodop32.exe' target='_self'>执行升级</a>,升级后请重新进入。</font>";
 var strHtm64_Install="<br><font color='#FF00FF'>打印控件未安装!点击这里<a href='install_lodop64.exe' target='_self'>执行安装</a>,安装后请刷新页面或重新进入。</font>";
 var strHtm64_Update="<br><font color='#FF00FF'>打印控件需要升级!点击这里<a href='install_lodop64.exe' target='_self'>执行升级</a>,升级后请重新进入。</font>";
 var strHtmFireFox="<br><br><font color='#FF00FF'>(注意:如曾安装过Lodop旧版附件npActiveXPLugin,请在【工具】->【附加组件】->【扩展】中先卸它)</font>";
 var strHtmChrome="<br><br><font color='#FF00FF'>(如果此前正常,仅因浏览器升级或重安装而出问题,需重新执行以上安装)</font>";
 var strCLodopInstall="<br><font color='#FF00FF'>CLodop云打印服务(localhost本地)未安装启动!点击这里<a href='http://www.c-lodop.com/download/CLodop_Setup_for_Win32NT_https_3.008Extend.zip' target='_self'>执行安装</a>,安装后请刷新页面。</font>";
 var strCLodopUpdate="<br><font color='#FF00FF'>CLodop云打印服务需升级!点击这里<a href='CLodop_Setup_for_Win32NT.exe' target='_self'>执行升级</a>,升级后请刷新页面。</font>";
 var LODOP;
 try{
  var isIE = (navigator.userAgent.indexOf('MSIE')>=0) || (navigator.userAgent.indexOf('Trident')>=0);
  if (needCLodop()) {
   try{ LODOP=getCLodop();} catch(err) {};
   if (!LODOP && document.readyState!=="complete") {alert("C-Lodop没准备好,请稍后再试!"); return;};
   if (!LODOP) {
    // if (isIE) document.write(strCLodopInstall); else
     // document.documentElement.innerHTML=strCLodopInstall+document.documentElement.innerHTML;
    // return;
   } else {

    if (CLODOP.CVERSION<"3.0.0.2") {
     if (isIE) document.write(strCLodopUpdate); else
      document.documentElement.innerHTML=strCLodopUpdate+document.documentElement.innerHTML;
    };
    if (oEMBED && oEMBED.parentNode) oEMBED.parentNode.removeChild(oEMBED);
    if (oOBJECT && oOBJECT.parentNode) oOBJECT.parentNode.removeChild(oOBJECT);
   };
  } else {
   var is64IE = isIE && (navigator.userAgent.indexOf('x64')>=0);
   //=====如果页面有Lodop就直接使用,没有则新建:==========
   if (oOBJECT!=undefined || oEMBED!=undefined) {
    if (isIE) LODOP=oOBJECT; else LODOP=oEMBED;
   } else if (CreatedOKLodop7766==null){
    LODOP=document.createElement("object");
    LODOP.setAttribute("width",0);
    LODOP.setAttribute("height",0);
    LODOP.setAttribute("style","position:absolute;left:0px;top:-100px;width:0px;height:0px;");
    if (isIE) LODOP.setAttribute("classid","clsid:2105C259-1E0C-4534-8141-A753534CB4CA");
    else LODOP.setAttribute("type","application/x-print-lodop");
    document.documentElement.appendChild(LODOP);
    CreatedOKLodop7766=LODOP;
   } else LODOP=CreatedOKLodop7766;
   //=====Lodop插件未安装时提示下载地址:==========
   if ((LODOP==null)||(typeof(LODOP.VERSION)=="undefined")) {
    if (navigator.userAgent.indexOf('Chrome')>=0)
     document.documentElement.innerHTML=strHtmChrome+document.documentElement.innerHTML;
    if (navigator.userAgent.indexOf('Firefox')>=0)
     document.documentElement.innerHTML=strHtmFireFox+document.documentElement.innerHTML;
    if (is64IE) document.write(strHtm64_Install); else
    if (isIE)  document.write(strHtmInstall);  else
     document.documentElement.innerHTML=strHtmInstall+document.documentElement.innerHTML;
    return LODOP;
   };
  };
  if (LODOP.VERSION<"6.0") {
   if (!needCLodop()){
    if (is64IE) document.write(strHtm64_Update); else
    if (isIE) document.write(strHtmUpdate); else
     document.documentElement.innerHTML=strHtmUpdate+document.documentElement.innerHTML;
   };
   return LODOP;
  };
  //===如下空白位置适合调用统一功能(如注册语句、语言选择等):===
  //LODOP.SET_LICENSES("北京XXXXX公司","8xxxxxxxxxxxxx5","","");

  //===========================================================
  return LODOP;
 } catch(err) {alert("getLodop出错:"+err);};
};

页面调用如下

<template>
 <div class="demo">
  <el-button @click="printPdf" >打印</el-button>

  <form id="form1">
   <table border="1" width="300" id="tb01" bgcolor="#CCFFCC" style="border:solid 1px black;border-collapse:collapse"><tr><td width="133" id="mtb001">
    <font face="黑体" color="#FF0000" size="3"><u> 《表单一》 </u></font></td></tr></table>
   <table border="1" width="300" height="106" cellspacing="0" bgcolor="#CCFFFF"style="border-collapse:collapse;table-layout:fixed;border:solid 1px black;"><tr>
    <td width="66" height="16" style="border:solid 1px black"><font color="#0000FF">A</font><font color="#0000FF">等</font></td>
    <td width="51" height="16" style="border:solid 1px black"><font color="#0000FF">B</font><font color="#0000FF">等</font></td>
    <td width="51" height="16" style="border:solid 1px black"><font color="#0000FF">C</font><font color="#0000FF">等</font></td></tr>
    <tr>
     <td width="66" height="16" style="border:solid 1px black">A<sub>01</sub></td>
     <td width="80" height="12" style="border:solid 1px black">中-001</td>
     <td width="51" height="12" style="border:solid 1px black">C1<sup>x</sup></td>
    </tr>
    <tr>
     <td width="66" height="16" style="border:solid 1px black">A<sub>02</sub>Φ</td>
     <td width="80" height="16" style="border:solid 1px black">日-スの</td>
     <td width="51" height="16" style="border:solid 1px black"><font face='Vernada'>7㎥</font></td>
    </tr>
    <tr><td width="66" height="16" style="border:solid 1px black;overflow:hidden">A<sub>03</sub><nobr>over隐藏后面的:1234567890</nobr>
    </td><td width="80" height="16" style="border:solid 1px black;overflow:hidden">韩-안녕</td><td width="51" height="16">C3<sup>x</sup>
    </td></tr> </table>
  </form>
 </div>
</template>

<script>

 import {getLodop} from '../common/LodopFuncs'

 export default {
  name: "demo",
  data() {
   return {}
  },
  methods: {
   // 查询数据
   printPdf() {
    let LODOP = getLodop();
    LODOP.PRINT_INIT("订货单");
    LODOP.SET_PRINT_STYLE("FontSize", 18);
    LODOP.SET_PRINT_STYLE("Bold", 1);
    LODOP.ADD_PRINT_TEXT(50, 231, 260, 39, "打印页面部分内容");
    LODOP.ADD_PRINT_HTM(88, 200, 350, 600,
     document.getElementById("form1").innerHTML);
//    LODOP.PRINT();
    LODOP.PREVIEW();
   },
  }
 }
</script>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
一个javascript图片阅览组件
Nov 09 Javascript
jQuery EasyUI API 中文文档 - Pagination分页
Sep 29 Javascript
Javascript的&amp;&amp;和||的另类用法
Jul 23 Javascript
JavaScript中setTimeout和setInterval函数的传参及调用
Mar 11 Javascript
需灵活掌握的Bootstrap预定义排版类 你精通吗?
Jun 20 Javascript
Javascript类型系统之undefined和null浅析
Jul 13 Javascript
基于BootStrap的前端分页带省略号和上下页效果
May 18 Javascript
在Vue中如何使用Cookie操作实例
Jul 27 Javascript
JavaScript数组排序reverse()和sort()方法详解
Dec 24 Javascript
mpvue 单文件页面配置详解
Dec 02 Javascript
原生js实现密码强度验证功能
Mar 18 Javascript
如何利用js在两个html窗口间通信
Apr 27 Javascript
浅谈在vue中使用mint-ui swipe遇到的问题
Sep 27 #Javascript
Vue引用Swiper4插件无法重写分页器样式的解决方法
Sep 27 #Javascript
swiper在angularjs中使用循环轮播失效的解决方法
Sep 27 #Javascript
解决Vue使用swiper动态加载数据,动态轮播数据显示白屏的问题
Sep 27 #Javascript
vue中使用axios post上传头像/图片并实时显示到页面的方法
Sep 27 #Javascript
如何在 JavaScript 中更好地利用数组
Sep 27 #Javascript
axios 封装上传文件的请求方法
Sep 26 #Javascript
You might like
磨咖啡豆的密诀
2021/03/03 冲泡冲煮
smarty模板判断数组为空的方法
2015/06/10 PHP
YII Framework框架教程之缓存用法详解
2016/03/14 PHP
解决laravel id非自增 模型取回为0 的问题
2019/10/11 PHP
常用js脚本
2006/12/03 Javascript
jQuery获取文本节点之 text()/val()/html() 方法区别
2011/03/01 Javascript
JQuery悬停控制图片轮播——代码简单
2015/08/05 Javascript
js组件SlotMachine实现图片切换效果制作抽奖系统
2016/04/17 Javascript
jquery操作ID带有变量的节点实例
2016/12/07 Javascript
微信小程序 轮播图swiper详解及实例(源码下载)
2017/01/11 Javascript
js处理层级数据结构的方法小结
2017/01/17 Javascript
js放大镜放大购物图片效果
2017/01/18 Javascript
webpack3+React 的配置全解
2017/08/21 Javascript
mui框架移动开发初体验详解
2017/10/11 Javascript
js 中rewrap-ajax.js插件实例代码
2017/10/20 Javascript
使用vue中的v-for遍历二维数组的方法
2018/03/07 Javascript
详解微信小程序scroll-view横向滚动的实践踩坑及隐藏其滚动条的实现
2019/03/14 Javascript
让mocha支持ES6模块的方法实现
2020/01/14 Javascript
详细分析vue响应式原理
2020/06/22 Javascript
[00:30]明星选手化身超级英雄!2018DOTA2亚洲邀请赛全明星赛来临!
2018/04/06 DOTA
Django objects的查询结果转化为json的三种方式的方法
2018/11/07 Python
Ubuntu+python将nii图像保存成png格式
2019/07/18 Python
Django ModelForm组件使用方法详解
2019/07/23 Python
Django后台管理系统的图文使用教学
2020/01/20 Python
python 密码学示例——理解哈希(Hash)算法
2020/09/21 Python
python实现扫雷游戏的示例
2020/10/20 Python
python爬虫快速响应服务器的做法
2020/11/24 Python
实例教程 纯CSS3打造非常炫的加载动画效果
2014/11/05 HTML / CSS
几个Linux面试题笔试题
2016/08/01 面试题
迟到检讨书2000字(精选篇)
2014/10/07 职场文书
工作作风整顿个人剖析材料
2014/10/11 职场文书
安全教育日主题班会
2015/08/13 职场文书
CSS3 菱形拼图实现只旋转div 背景图片不旋转功能
2021/03/30 HTML / CSS
教你用Python写一个植物大战僵尸小游戏
2021/04/25 Python
用Python可视化新冠疫情数据
2022/01/18 Python
最新动漫情报:2022年7月新番定档超过30部, OVERLORD骨王第四季也在其中噢
2022/05/04 日漫