LODOP打印vue和 js

LODOP 和 C-LODOP 打印
官方网址

官网说明如下

Lodop(标音:劳道谱,俗称:露肚皮)是专业WEB控件,用它既可裁剪输出页面内容,又可用程序代码直接实现
复杂打印。控件功能强大,却简单易用,所有调用如同JavaScript扩展语句,主要接口函数如下:
● PRINT_INIT(strPrintTaskName)打印初始化
● SET_PRINT_PAGESIZE(intOrient,intPageWidth,intPageHeight,strPageName)设定纸张大小
● ADD_PRINT_HTM(intTop,intLeft,intWidth,intHeight,strHtml)增加超文本项
● ADD_PRINT_TEXT(intTop,intLeft,intWidth,intHeight,strContent)增加纯文本项
● ADD_PRINT_TABLE(intTop,intLeft,intWidth,intHeight,strHtml)增加表格项
● ADD_PRINT_SHAPE(intShapeType,intTop,intLeft,intWidth,intHeight,intLineStyle,intLineWidth,intColor)画图形
● SET_PRINT_STYLE(strStyleName, varStyleValue)设置对象风格

● PREVIEW打印预览
● PRINT直接打印
● PRINT_SETUP打印维护
● PRINT_DESIGN打印设计

安装

下载最新版本地址
下载完成后解压安装如下程序:
下载解压后

修改js

官方提供的js文件,只需要进行简单的修改就可以。(我这里只修改这么多。然后写了一个如果客户端未安装或版本低,提供下载的方法(暂时不是很重要))

在这里插入图片描述

代码(测试例子)

lodopFuns.js 就是我们修改的js文件,printUtils.js在里面写样式(测试用的js,随便写几个样式)

代码是其中的一个样式。

// 引入 lodopFuns.js 的 getLodop 方法
import { getLodop } from '@/utils/lodop/lodopFuns'

// strPrintTaskName:打印名称  printDate:打印日期  printModel:打印模块  date:数据
const libraryBarcode = (strPrintTaskName, printModel, data) => {
  const LODOP = getLodop()
  LODOP.PRINT_INIT(strPrintTaskName)
   LODOP.ADD_PRINT_LINE(35, 15, 34, 515, 0, 2)
   // dates() 这里是我获取日期的方法 可以忽略 也可以用官方提供的
    LODOP.ADD_PRINT_TEXT(12, 39, 90, 20, dates())
    LODOP.SET_PRINT_STYLEA(0, 'FontName', '楷体')
    LODOP.SET_PRINT_STYLEA(0, 'FontSize', 8)
    LODOP.ADD_PRINT_TEXT(12, 256, 144, 20, printModel)
    LODOP.SET_PRINT_STYLEA(0, 'FontName', '楷体')
    LODOP.SET_PRINT_STYLEA(0, 'FontSize', 8)
    LODOP.ADD_PRINT_LINE(35, 15, 215, 16, 0, 2)
    LODOP.ADD_PRINT_LINE(214, 15, 215, 515, 0, 2)
    LODOP.ADD_PRINT_LINE(214, 514, 34, 515, 0, 2)
    LODOP.ADD_PRINT_LINE(214, 186, 34, 187, 0, 2)
    LODOP.ADD_PRINT_TEXT(58, 184, 88, 24, '物料编码:')
    LODOP.SET_PRINT_STYLEA(0, 'FontSize', 10)
    LODOP.SET_PRINT_STYLEA(0, 'Alignment', 2)
    LODOP.SET_PRINT_STYLEA(0, 'Bold', 1)
    LODOP.ADD_PRINT_LINE(96, 186, 95, 514, 0, 2)
    LODOP.ADD_PRINT_LINE(157, 188, 156, 514, 0, 2)
    LODOP.ADD_PRINT_TEXT(119, 184, 88, 24, '物料名称:')
    LODOP.SET_PRINT_STYLEA(0, 'FontSize', 10)
    LODOP.SET_PRINT_STYLEA(0, 'Alignment', 2)
    LODOP.SET_PRINT_STYLEA(0, 'Bold', 1)
    LODOP.ADD_PRINT_TEXT(176, 184, 88, 24, '规格尺寸:')
    LODOP.SET_PRINT_STYLEA(0, 'FontSize', 10)
    LODOP.SET_PRINT_STYLEA(0, 'Alignment', 2)
    LODOP.SET_PRINT_STYLEA(0, 'Bold', 1)
    // 这里 A  是用户 写入的数据 物料编码(数据)
    LODOP.ADD_PRINT_TEXT(58, 272, 235, 24,A)
    LODOP.SET_PRINT_STYLEA(0, 'FontSize', 10)
    LODOP.SET_PRINT_STYLEA(0, 'Bold', 1)
    // 这里 “B” 代表的是用户写入的数据 (物料名称(数据))
    LODOP.ADD_PRINT_TEXT(119, 272, 235, 24, B)
    LODOP.SET_PRINT_STYLEA(0, 'FontSize', 10)
    LODOP.SET_PRINT_STYLEA(0, 'Bold', 1)
    // 这里 “C” 代表 用户写入的数据 (规格尺寸) 
    LODOP.ADD_PRINT_TEXT(176, 272, 235, 24,C)
    LODOP.SET_PRINT_STYLEA(0, 'FontSize', 10)
    LODOP.SET_PRINT_STYLEA(0, 'Bold', 1)
    // 打印条码 12345646635345 // 自己设置的数据
    LODOP.ADD_PRINT_BARCODE(44, 21, 169, 173, 'QRCode', ‘12345646635345’)
    
   LODOP.SET_PREVIEW_WINDOW('1', '0', '0', '900px', '600px', '') // 预览窗口

  // LODOP.PRINT() // 直接打印
  // LODOP.PREVIEW() // 打印预览
  LODOP.PRINT_SETUP() // 打印维护
  // LODOP.PRINT_DESIGN() // 打印设计
}
export { libraryBarcode }

PRINT_INIT(strPrintTaskName) 打印初始化

// intTop:距离顶部高度; intLeft :距离左边高度 intWidth:宽度 intHeight :高度 strContent:文本
ADD_PRINT_TEXT(intTop,intLeft,intWidth,intHeight,strContent)增加纯文本项

LODOP.PRINT() // 直接打印(无窗口)
LODOP.PREVIEW() // 打印预览窗口
LODOP.PRINT_SETUP() // 打印维护窗口
LODOP.PRINT_DESIGN() // 打印设计窗口

//12345646635345 设置的数据 QRCode 类型 44, 21, 169, 173 上,左,宽,高
LODOP.ADD_PRINT_BARCODE(44, 21, 169, 173, ‘QRCode’, ‘12345646635345’) //分页

说明 效果图

LODOP.PRINT_DESIGN() // 打印设计窗口 (这是设计的窗口)
在这里插入图片描述
LODOP.PREVIEW() // 打印预览窗口 (这是预览的窗口)
在这里插入图片描述
大致是这个样子。。。。。。。。。。。。。。。。。。。。。。。。。

当然还可以自己写 页面,然后通过官方提供的把h5写入到打印中。不过样式会丢需要把
样式写进去,然后就可以啊。。。。。。。。。。。。。。。。。。。。。。。。。。。。

模板设计

这里可以进行模板设计生成以上代码
模板设计
比如:进入模板设计:点击这个小图标可以进入“生成代码”可以生成那堆样式代码(可以根据需求先练习下画画) 生成后放入代码中就行啦
在这里插入图片描述
在这里插入图片描述

分页

分页的话可以进行强制分页:
// one
LODOP.NEWPAGEA()
// two
LODOP.NEWPAGE()
以上两个分页都可以,
简单区分:[one]分页 不会覆盖数据(即第一页数据没展示完到第二页不会覆盖第二页的内容) 。
[two]分页 会覆盖数据(即第一页数据没展示完到第二页会覆盖第二页的内容) 。
大致这个意思吧。

然后进入分页打印的话,可以进行for循环然后调用【one】【two】分页,最后弹出等等等等等。。。。。。。。。。。。。。。。
或者写 pageSize 啥的等等。。。。。。。。。。。。。
第一种例子:

*//先for*
 for (let i = 0; i < 2; i++) {
    // 打印条码
    LODOP.ADD_PRINT_BARCODE(44, 21, 169, 173, 'QRCode', '231231231')
    LODOP.ADD_PRINT_TEXT('96%', '85%', 200, 22, '第' + 1 + '页/共' + 2 + '页')
    //分页
    LODOP.NEWPAGEA()
  }
  *//最后*
  LODOP.PREVIEW() 

嗯,貌似这个d样子。。。。。。。。。。。。。。。。

差不多就那么多吧,根据需求自己改写就可以啦。
最后说一下注册,呐呐呐,看官网:
添加链接描述

有错误的地方欢迎给俺指一下,俺也是第一次用这玩意。

附上简单修改的lodopFun.js

import { MessageBox } from 'element-ui'

// eslint-disable-next-line no-unused-vars
var CreatedOKLodopObject, CLodopIsLocal, CLodopJsState

// ==判断是否需要CLodop(那些不支持插件的浏览器):==
export function needCLodop() {
  try {
    var ua = navigator.userAgent
    if (ua.match(/Windows\sPhone/i)) { return true }
    if (ua.match(/iPhone|iPod|iPad/i)) { return true }
    if (ua.match(/Android/i)) { return true }
    if (ua.match(/Edge\D?\d+/i)) { 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) && (!verIE) && (x64)) { return true } else if (verFF) {
      verFF = verFF[0].match(/\d+/)
      if ((verFF[0] >= 41) || (x64)) { return true }
    } else if (verOPR) {
      verOPR = verOPR[0].match(/\d+/)
      if (verOPR[0] >= 32) { return true }
    } else if ((!verTrident) && (!verIE)) {
      var verChrome = ua.match(/Chrome\D?\d+/i)
      if (verChrome) {
        verChrome = verChrome[0].match(/\d+/)
        if (verChrome[0] >= 41) { return true }
      }
    }
    return false
  } catch (err) {
    return true
  }
}

// ==加载引用CLodop的主JS,用双端口8000和18000(以防其中一个被占):==
export function loadCLodop() {
  // eslint-disable-next-line eqeqeq
  if (CLodopJsState == 'loading' || CLodopJsState == 'complete') return
  CLodopJsState = 'loading'
  var head = document.head || document.getElementsByTagName('head')[0] || document.documentElement
  var JS1 = document.createElement('script')
  var JS2 = document.createElement('script')
  JS1.src = 'http://localhost:8000/CLodopfuncs.js?priority=1'
  JS2.src = 'http://localhost:18000/CLodopfuncs.js'
  JS1.onload = JS2.onload = function() { CLodopJsState = 'complete' }
  JS1.onerror = JS2.onerror = function(evt) { CLodopJsState = 'complete' }
  head.insertBefore(JS1, head.firstChild)
  head.insertBefore(JS2, head.firstChild)
  CLodopIsLocal = !!((JS1.src + JS2.src).match(/\/\/localho|\/\/127.0.0./i))
}

if (needCLodop()) { loadCLodop() }// 加载

// ==获取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_1 = "<br><font color='#FF00FF'>Web打印服务CLodop未安装启动,点击这里<a href='http://192.168.3.21:80/CLodop_Setup_for_Win32NT.exe' target='_self'>下载执行安装</a>"
  // var strCLodopInstall_2 = "<br>(若此前已安装过,可<a href='CLodop.protocol:setup' target='_self'>点这里直接再次启动</a>)"
  // var strCLodopInstall_3 = ',成功后请刷新本页面。</font>'
  var strCLodopUpdate = "<br><font color='#FF00FF'>Web打印服务CLodop需升级!点击这里<a href='CLodop_Setup_for_Win32NT.exe' target='_self'>执行升级</a>,升级后请刷新页面。</font>"
  var LODOP
  try {
    var ua = navigator.userAgent
    var isIE = !!(ua.match(/MSIE/i)) || !!(ua.match(/Trident/i))
    if (needCLodop()) {
      try {
        // eslint-disable-next-line no-undef
        LODOP = getCLodop()
        // eslint-disable-next-line no-empty
      } catch (err) {}
      if (!LODOP && CLodopJsState !== 'complete') {
        // eslint-disable-next-line eqeqeq
        if (CLodopJsState == 'loading') {
          this.$message({
            message: '网页还没下载完毕,请稍等一下再操作.',
            type: 'warning',
            duration: 1000
          })
        } else {
          this.$message({
            message: '没有加载CLodop的主js,请先调用loadCLodop过程.',
            type: 'warning',
            duration: 1000
          })
        }
        return
      }
      if (!LODOP) {
        // document.body.innerHTML = strCLodopInstall_1 + (CLodopIsLocal ? strCLodopInstall_2 : '') + strCLodopInstall_3 + document.body.innerHTML
        // return
      } else {
        // eslint-disable-next-line no-undef
        if (CLODOP.CVERSION < '4.0.9.6') {
          document.body.innerHTML = strCLodopUpdate + document.body.innerHTML
        }
        if (oEMBED && oEMBED.parentNode) { oEMBED.parentNode.removeChild(oEMBED) }
        if (oOBJECT && oOBJECT.parentNode) { oOBJECT.parentNode.removeChild(oOBJECT) }
      }
    } else {
      var is64IE = isIE && !!(ua.match(/x64/i))
      // ==如果页面有Lodop就直接使用,否则新建:==
      if (oOBJECT || oEMBED) {
        if (isIE) { LODOP = oOBJECT } else { LODOP = oEMBED }
      } else if (!CreatedOKLodopObject) {
        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)
        CreatedOKLodopObject = LODOP
      } else { LODOP = CreatedOKLodopObject }
      // ==Lodop插件未安装时提示下载地址:==
      if ((!LODOP) || (!LODOP.VERSION)) {
        if (ua.indexOf('Chrome') >= 0) { document.body.innerHTML = strHtmChrome + document.body.innerHTML }
        if (ua.indexOf('Firefox') >= 0) { document.body.innerHTML = strHtmFireFox + document.body.innerHTML }
        document.body.innerHTML = (is64IE ? strHtm64_Install : strHtmInstall) + document.body.innerHTML
        return LODOP
      }
    }
    if (LODOP.VERSION < '6.2.2.6') {
      if (!needCLodop()) { document.body.innerHTML = (is64IE ? strHtm64_Update : strHtmUpdate) + document.body.innerHTML }
    }
    // ===如下空白位置适合调用统一功能(如注册语句、语言选择等):==

    // =======================================================
    return LODOP
  } catch (err) {
    MessageBox({
      title: '提示',
      type: 'warning',
      showCancelButton: 'true',
      message: '您还未安装打印控件,点击确认下载打印控件,安装后成功后刷新页面即可打印',
      callback: res => {
        if (res === 'confirm') {
          loadLodop()
        }
      }
    })
  }
}
// 这里可以写 下载地址 ,测试就写了官网
export function loadLodop() {
  window.open('http://www.lodop.net/download.html')
}

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
二维码,条形码,网页各类打印样式控件Lodop 1.如何在页面内嵌入控件见样例一 2.如何选材打印当前页面内容见样例二 3.如何用代码生成打印页见样例三 4.如何打印设计和定位套打见样例四 5.如何控制纸张大小和连续打印见样例五 6.如何输出多页长文档及双面打印见样例六 7.如何定向输出见样例七 8.如何打印图片见样例八 9.如何用程序加载打印维护背景图见样例九 10如何控制打印样式(STYLE)见样例十 11如何直接打印条形码见样例十一 12如何读写本地文件见样例十二 13如何打印旋转内容见样例十三 14如何按URL打印见样例十四 15如何打印表格的页头页尾见样例十五 16如何设置预览窗口大小见样例十六 17如何发打印机指令或直接读写端口见样例十七 18如何打印幅面高度不固定的票据见样例十八 19如何内嵌显示及预览时包含背景图见样例十九 20如何强制分页并预览多页卡片见样例二十 21如何控制打印维护的功能权限见样例二十一 22如何构建自己的纯WEB打印预览见样例二十二 23如何居中打印超文本见样例二十三 24如何选择界面皮肤见样例二十四 25如何指定输出到哪页或仅预览见样例二十五 26如何提高多页打印的性能见样例二十六 27如何导出数据到Excel文件见样例二十七 28如何快速读取客户端系统信息见样例二十八 29如何使用其它长度单位见样例二十九 30如何分页输出页面内容见样例三十 31如何打印表格的分页小计或合计见样例三十一 32如何实现清晰的图表打印见样例三十二 33如何实现甘特图等的图表打印见样例三十三 34如何使用百分比%和满页打印见样例三十四 35如何获得打印结果和程序代码见样例三十五 36如何在设计过程中用js编辑内容见样例三十六 37如何打印公章效果图见样例三十七 38如何用BASE64编码输出图片见样例三十八 39如何打印田字格、上划线等文本见样例三十九 40如何进行数据格式转换见样例四十 41如何把内容关联后按顺序打印见样例四十一 42如何把整页内容缩放打印见样例四十二 43如何分页打印综合表格见样例四十三 44如何缩放打印单个超文本内容见样例四十四 45如何获得打印状态及最终结果见样例四十五 46如何设置右边距和下边距见样例四十六
有人说她是Web打印控件,因为她能打印、在浏览器中以插件的形式出现,用简单一行语句就把整个网页打印出来; 有人说她是打印编程接口,因为她介于浏览器和打印设备之间,是个通道和桥梁,几乎能想到的打印控制事项都能做到; 有人说她是JavaScript的扩展,因为她所有功能就那么几个语句,和JS语法一样,一看就明白个究竟; 有人说她是报表打印工具,因为那个add_print_table语句把报表统计的那点事弄了个明明白白; 有人说她是条码打印工具,因为用了她再也不用后台生成条码图片了,前端一行指令就动态输出清晰准确的条码,一维二维都行; 有人说她是图表打印工具,因为用她能输出几乎能想象的任何图表,虽然没那么豪华,但什么饼图、折线图、柱图甚至复合图等等都不在话下; 有人说她是个小玩意,因为她体积太小了,才2M多,她所包含的其中任何一个对照工具都是她的好几倍(例如条码打印控件、图表控件等); 有人说她是套打教案,因为以Lodop+JS实现套打这种模式,在网上已被吵吵为教科书般的解决方案; 有人说她是Web打印控件的“终结者”,因为接触“她”后再不想别的“她”; 有人说她就是一个Web编程小工具,因为有了她,在BS下的打印终于像cs下那种随意而高效了; 但我们说,她是全国1000多家软件公司的智慧结晶,诞生10年了,几乎每个功能细节都蕴藏着无数开发者的期待和汗水; 她就是Lodop(读音“劳道谱”),没有别的名称,她是web开发的必选伴侣; 今年,她又添了个小兄弟,名叫C-Lodop(可编程的云打印),未来将由他开创......
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值