VUE使用lodop实现前端打印页面指定内容

vue+lodop单独打印和全部打印以及批量打印 打印实现表格格式 1.下载lodop插件 下载后得到LodopFuncs.js 放到工具utils(任意文件夹)文件夹。2.下载斑马打印机驱动(找厂商提供或者官网找到对应型号下载即可)下载好之后选择安装。情况:斑马打印机 lodop第三方打印插件 vue3 表格形式包含二维码。4.效果预览 标签大小和适配自己调整为标签纸大小适应即可。3.准备就绪 代码如下。 阅读详情

最近做项目,遇到一个需要页面无需下载在线打印Word的功能,最初尝试直接打印页面,会导致将整个页面都打印出来,不符合要求。后期客户要求要使用lodop,这样打印与页面展示Word两个方面都是未知的东西,那就查资料设计实现方式吧,这里重点记录打印的实现,总的来说有三步。

 

1.去lodop的下载地址下载安装适合自己电脑的插件,传送门:http://www.c-lodop.com/download.html​​​​​​

注意!这里我认为该官网下载有个不友好的地方

 打印组件,即一些样例,需要在win32版的这个这个发行包中下载,也就是解压出来的这些东西

 但是插件的运行程序却需要使用win64版的,这让我一开始绕了一圈,不知道是操作不对还是确实这样,有大神可以指导一下。下载后点击安转这个执行程序即可成功安装插件。

2.将js引入我们的前端项目,我这里引入了两个,直接上图上代码:

 lodop.js:

var CreatedOKLodop7766 = null

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] >= 41 || 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] >= 41) 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.lodop.net/download/CLodop_Setup_for_Win32NT_https_3.046Extend.zip' download target='_self'>执行安装</a>,安装后请刷新页面。</font>"
  const strCLodopUpdate =
    "<br><font color='#FF00FF'>CLodop云打印服务需升级!点击这里<a href='http://www.lodop.net/download/CLodop_Setup_for_Win32NT_https_3.046Extend.zip' download target='_self'>执行升级</a>,升级后请刷新页面。</font>"
  let LODOP
  try {
    const isIE =
      navigator.userAgent.indexOf('MSIE') >= 0 ||
      navigator.userAgent.indexOf('Trident') >= 0
    if (needCLodop()) {
      try {
        // eslint-disable-next-line no-undef
        LODOP = getCLodop()
        // eslint-disable-next-line no-empty
      } catch (err) {}
      if (!LODOP && document.readyState !== 'complete') {
        alert('C-Lodop没准备好,请稍后再试!')
        return
      }
      if (!LODOP) {
        if (isIE) document.write(strCLodopInstall)
        else {
          document.body.innerHTML =
            strCLodopInstall + document.body.innerHTML
        }
        return
      } else {
        // eslint-disable-next-line no-undef
        if (CLODOP.CVERSION < '3.0.4.3') {
          if (isIE) document.write(strCLodopUpdate)
          else {
            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 && navigator.userAgent.indexOf('x64') >= 0
      // =====如果页面有Lodop就直接使用,没有则新建:==========
      // eslint-disable-next-line eqeqeq
      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.body.innerHTML =
            strHtmChrome + document.body.innerHTML
        }
        if (navigator.userAgent.indexOf('Firefox') >= 0) {
          document.body.innerHTML =
            strHtmFireFox + document.body.innerHTML
        }
        if (is64IE) document.write(strHtm64_Install)
        else if (isIE) document.write(strHtmInstall)
        else {
          document.body.innerHTML =
            strHtmInstall + document.body.innerHTML
        }
        return LODOP
      }
    }
    if (LODOP.VERSION < '6.2.2.3') {
      if (!needCLodop()) {
        if (is64IE) document.write(strHtm64_Update)
        else if (isIE) document.write(strHtmUpdate)
        else {
          document.body.innerHTML =
            strHtmUpdate + document.body.innerHTML
        }
      }
      return LODOP
    }
    // ===如下空白位置适合调用统一功能(如注册语句、语言选择等):===

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

doPrint.js:

import { getLodop } from '@t/lodop' // 这块就是引用的上面一大坨暴露出来的方法喽

const PrintAccount = (qrTitle, codetype, url, code) => {
  const qrAccount = `${url}/#/?type=${codetype}&code=${code}`
  // 调用打印对象
  let LODOP
  // eslint-disable-next-line prefer-const
  LODOP = getLodop()
  // 打印页面配置
  LODOP.SET_PRINT_MODE('PRINT_NOCOLLATE', 1)
  LODOP.SET_PRINT_PAGESIZE(3, '5.7cm', '2cm', 2)

  // 条码内容
  LODOP.ADD_PRINT_TEXT(3, 32, 127, 20, qrTitle)
  LODOP.SET_PRINT_STYLEA(0, 'FontSize', 15)
  LODOP.ADD_PRINT_BARCODE(26, 15, 170, 147, 'QRCode', qrAccount)
  // LODOP.ADD_PRINT_TEXT(159, 11, 163, 42, qrAccount)
  // LODOP.SET_PRINT_STYLEA(0, 'FontSize', 11)
}

export { PrintAccount }

3.代码引用:

页面不用下载实现打印Word,这里我采用的方法是页面画出Word架构,动态替换关键字,然后打印该页面。

画好页面模板后,引用刚才新建的js方法,给出一个打印按钮,给按钮赋值一个click操作即可。

直接上预览打印与最终实现打印的vue页面代码:

画要被打印的Word框架:

引用打印js方法:

 打印按钮的click方法与实现:

 

 整篇原始代码:

<template>
  <div class="app-container">
      <el-button id='yulan' type="info"@click="printPdf" :tbId="tbId" v-print="'#printMe'">打印</el-button>
    <!--startprint-->
      <div id="printMe">
        <div class="text general"><p class="MsoNormal" style="text-align: center;"><strong><span
          style="font-size: 12.0pt; font-family: 宋体;">民事起诉状<span lang="EN-US"></span></span></strong></p>
          <p class="MsoNormal" style="text-align: center;"><strong><span style="font-size: 12.0pt; font-family: 宋体;"
                                                                         lang="EN-US">&nbsp;</span></strong></p>
          <p class="MsoNormal" style="text-indent: 24.0pt; mso-char-indent-count: 2.0; line-height: 150%;"><span
            style="font-size: 12.0pt; line-height: 150%; font-family: 宋体;">原告<span lang="EN-US">XXX</span>,女,<span
            lang="EN-US">XXXX</span>年<span lang="EN-US">X</span>月<span lang="EN-US">X</span>日出生,身份证号码<span lang="EN-US">XXXXXXXXXXXX</span>,<span
            lang="EN-US">X</span>族,住<span lang="EN-US">XX</span>省<span lang="EN-US">XX</span>市<span
            lang="EN-US">XX</span>区<span
            lang="EN-US">XX</span>路<span lang="EN-US">XX</span>号。电话:<span lang="EN-US">XXXXXX</span>。<span
            lang="EN-US"></span></span></p>
          <p class="MsoNormal" style="text-indent: 24.0pt; mso-char-indent-count: 2.0; line-height: 150%;"><span
            style="font-size: 12.0pt; line-height: 150%; font-family: 宋体;">被告<span lang="EN-US">XXX</span>,男,<span
            lang="EN-US">XXXX</span>年<span lang="EN-US">X</span>月<span lang="EN-US">X</span>日出生,身份证号码<span lang="EN-US">XXXXXXXXXXXX</span>,<span
            lang="EN-US">X</span>族,户籍地:<span lang="EN-US">XX</span>省<span lang="EN-US">XX</span>市<span
            lang="EN-US">XX</span>区<span lang="EN-US">XX</span>路<span lang="EN-US">XX</span>号,现住<span
            lang="EN-US">XX</span>省<span lang="EN-US">XX</span>市<span lang="EN-US">XX</span>区<span
            lang="EN-US">XX</span>路<span
            lang="EN-US">XX</span>号。电话:<span lang="EN-US">XXXXXX</span>。<span lang="EN-US"></span></span></p>
          <p class="MsoNormal" style="line-height: 150%;"><strong><span
            style="font-size: 12.0pt; line-height: 150%; font-family: 宋体;">诉讼请求:<span
            lang="EN-US"></span></span></strong>
          </p>
          <p class="MsoNormal" style="text-indent: 24.0pt; mso-char-indent-count: 2.0; line-height: 150%;"><span
            style="font-size: 12.0pt; line-height: 150%; font-family: 宋体;" lang="EN-US">1</span><span
            style="font-size: 12.0pt; line-height: 150%; font-family: 宋体;">、请求判令被告归还借款人民币<span lang="EN-US">XXXX</span>元及银行同期存款利息<span
            lang="EN-US">XXX</span>元。<span lang="EN-US"></span></span></p>
          <p class="MsoNormal" style="text-indent: 24.0pt; mso-char-indent-count: 2.0; line-height: 150%;"><span
            style="font-size: 12.0pt; line-height: 150%; font-family: 宋体;" lang="EN-US">2</span><span
            style="font-size: 12.0pt; line-height: 150%; font-family: 宋体;">、判被告承担本案的诉讼费用。<span
            lang="EN-US"></span></span>
          </p>
          <p class="MsoNormal" style="line-height: 150%;"><strong><span
            style="font-size: 12.0pt; line-height: 150%; font-family: 宋体;">事实与理由:<span
            lang="EN-US"></span></span></strong></p>
          <p class="MsoNormal" style="text-indent: 24.0pt; mso-char-indent-count: 2.0; line-height: 150%;"><span
            style="font-size: 12.0pt; line-height: 150%; font-family: 宋体;">原、被告系朋友关系,<span lang="EN-US">XX</span>年<span
            lang="EN-US">X</span>月<span lang="EN-US">X</span>日被告以资金紧缺为由向原告借款<span lang="EN-US">XXXX</span>元,有被告出具的借条为凭。原告于<span
            lang="EN-US">X</span>年<span lang="EN-US">X</span>月间多次向被告催讨借款,被告均以各种理由推拖,至今尚欠原告借款<span
            lang="EN-US">XXXX</span>元。为了维护自身的合法权益,根据《民事诉讼法》第<span
            lang="EN-US">108</span>条向贵院提起诉讼,请求法院依法判决。<span lang="EN-US"></span></span></p>
          <p class="MsoSalutation" style="line-height: 150%;"><span
            style="font-size: 12.0pt; line-height: 150%; font-family: 宋体;" lang="EN-US">&nbsp;&nbsp;&nbsp; </span><span
            style="font-size: 12.0pt; line-height: 150%; font-family: 宋体;">此致<span lang="EN-US"></span></span></p>
          <p class="MsoNormal" style="line-height: 150%;"><span
            style="font-size: 12.0pt; line-height: 150%; font-family: 宋体;" lang="EN-US">XXX</span><span
            style="font-size: 12.0pt; line-height: 150%; font-family: 宋体;">人民法院<span lang="EN-US"></span></span></p>
          <p class="MsoNormal" style="line-height: 150%;"><span
            style="font-size: 12.0pt; line-height: 150%; font-family: 宋体;" lang="EN-US">&nbsp;</span></p>
          <p class="MsoNormal" style="line-height: 150%;"><span
            style="font-size: 12.0pt; line-height: 150%; font-family: 宋体;" lang="EN-US">&nbsp;</span></p>
          <p class="MsoNormal" style="line-height: 150%;"><span
            style="font-size: 12.0pt; line-height: 150%; font-family: 宋体;" lang="EN-US">&nbsp;</span></p>
          <p class="MsoNormal" style="line-height: 150%;"><span
            style="font-size: 12.0pt; line-height: 150%; font-family: 宋体;" lang="EN-US">&nbsp;</span></p>
          <p class="MsoNormal" style="line-height: 150%;"><span
            style="font-size: 12.0pt; line-height: 150%; font-family: 宋体;" lang="EN-US">&nbsp;</span></p>
          <p class="MsoNormal" style="line-height: 150%;"><span
            style="font-size: 12.0pt; line-height: 150%; font-family: 宋体;" lang="EN-US">&nbsp;</span></p>
          <p class="MsoNormal" style="text-indent: 28.5pt; line-height: 150%;"><span
            style="font-size: 12.0pt; line-height: 150%; font-family: 宋体;" lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span
            style="font-size: 12.0pt; line-height: 150%; font-family: 宋体;">具状人:<span lang="EN-US">XXX(</span>签名<span
            lang="EN-US">)</span></span></p>
          <p class="MsoNormal" style="text-indent: 28.5pt; line-height: 150%;"><span
            style="font-size: 12.0pt; line-height: 150%; font-family: 宋体;" lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;X</span><span
            style="font-size: 12.0pt; line-height: 150%; font-family: 宋体;">年<span lang="EN-US">X</span>月<span
            lang="EN-US">X</span>日<span lang="EN-US"></span></span></p>
          <p><span
            style="font-size: 10.5pt; mso-bidi-font-size: 12.0pt; font-family: &quot;Times New Roman&quot;; mso-fareast-font-family: 宋体; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA;"
            lang="EN-US"><br style="mso-special-character: line-break; page-break-before: always;"></span></p></div>
      </div>
    <!--endprint-->
  </div>
</template>
<style scoped>
</style>
<script>
   import { getLodop } from '@/utils/lodop'
export default {
  name: 'Register',
  components: {
  },
  data() {
    return {
    }
  },
  created() {
  },
      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("printMe").innerHTML);
//    LODOP.PRINT();
              LODOP.PREVIEW();
          },
      }

}

</script>

页面效果:

点击打印,执行js方法后启动插件:

 

 

至此,电脑连接打印机后,便可完成前端打印操作。工作之余,匆匆记录,如有不对请多指教。

vue 通过 Lodop/C-Lodop 打印 pdf、小票、条码、html内容 Lodop/C-Lodop 是一款 web 端打印控件,需在官网购买序列号安装使用。可打印 pdf 文档、条码、表格、html 等Lodop官网:// 引入 LodopFuncs.js 中的 getLodop 方法data() {return {},// 初始化 LODOPif (!}, 1000)},methods: {// 打印小票(包含条形码)// 判断是否有可用打印插件return// 初始化语句this.LODOP.PRINT_INIT('打印任务名,比如住院号') 阅读详情

相关推荐

[亲测]vue使用C-lodop打印总结

按照我步骤走不迷路 1.先来到官方网站 下图中的1点击下载,下载后安装,傻瓜式安装方式就不再阐述了 下图中的2点击下载,下载后大概的看一下(内容不是很重要但是还是需要看的) 2.找到你安装好的C-lodop,将其启动 如下图 3.访问本地的教程,这里默认你的8000端口之前没有被占用,即使被占用那就访问18000端口,若仔细看文档的都知道,访问成功如下图仔细琢磨以下内容,他给的代码是js的,不...

Armymans的博客 2万+

使用vue进行Lodop打印的一些方法

一个基于 Vue、ElementUi、C-Lodop 的打印模板设计器。实现打印模板的设计、预览和打印功能。示例。

程序员诚哥 9062

Vue.js :使用LODOP打印表格文件

用到的打印工具是LODOP。 项目环境是vue-cli搭建的,组件库是ant design vue。 1、在需要打印的页面引入插件。 <script> import { getLodop } from '@/utils/LodopFuncs' </script> 2、绘制要打印的表格内容 此处不要用组件库的<a-table>去写,用原生的<table> <caption> <tr> <th> <td>等标签去

小五 1663

vue如何使用lodop

如何在Vue中使用lodop 最近在项目中需要打印,lodop是web端常用的打印工具,安装打印机驱动之后,连接打印机,看是否能实现正常打印。 打开lodop官网,http://www.lodop.net/index.html 下载lodop客户端。 把lodopFuncs拷贝到utils文件夹下, import { getLodop } from '@t/lodop' //这块就是引用的上面一大坨暴露出来的方法喽 const PrintAccount = (qrTitle, codetype, url

qq_43575827的博客 6947

前端打印小票Lodop完整解决方案

在现代的前端打印应用中,用户需求的多样化和技术的快速发展要求打印服务必须同时满足高效、稳定和易于操作的需求。Lodop技术服务系统提供了一套完善的打印解决方案,它的服务理念主要体现在以下几个方面:效率优先:Lodop通过减少打印前的准备工作,实现快速配置和打印。简单易用:即使是初学者,也能够通过简单的参数配置实现复杂的打印任务。高度定制:用户可以根据自己的需求对打印模板进行高度定制,以适应不同的打印场景。从技术角度来看,Lodop的技术优势包括:高性能渲染。

weixin_32661831的博客 1958

adas硬件_ADAS智能辅助驾驶系统硬件在环(HIL)测试之硬件介绍

这篇主要分享的是ADAS融合系统的HIL测试系统的硬件结构及其作用,其主要包括上位机、机柜、雷达模拟器系统、雷达暗箱系统以及视频暗箱。 上位机 上位机主要运行HIL测试系统的相关软件,测试人员所有的前期准备工作与测试操作均在上面进行,并监控测试结果,其通过网口实现与NI实时机的通信,上位机将VeriStand项目工程下载至NI实时机运行。机柜 机柜主要由可编程电源...

weixin_39580748的博客 2242

通过Vue的动态组件实现打印模板设计器结合lodop打印

lodop是目前最流行的打印Web打印组件,可以直接打印html 如何为lodop添加打印模板 一般打印功能都有打印模板和数据源,利用Vue的动态组件,我们就可以为lodop添加打印模板,实现按需打印 1,编写一个html,在显示数据的地方用Vue语法替换例如:{{printData.UserName}},把这个html保存到数据库就是打印模板了 2,界面定义一个div存放动态组件,把数据源Json加载到Vue中,加载打印模板生成组件,让lodop打印这个div就可以了

包子大叔的笔记 1万+

自研SSD固件:从零实现固态硬盘底层存储控制系统

本文探讨了自主开发SSD固件的可行性及实现方案。分析表明,虽然NAND Flash控制协议标准化且存在开源参考实现,但开发仍面临FTL设计复杂度高、性能调优等挑战。推荐采用FPGA平台(如Xilinx Zynq-7000)搭配SLC NAND Flash的方案,预计开发周期9-12个月。系统采用分层架构设计,包含主机接口层、FTL层和闪存接口层,核心模块需实现NAND Flash底层驱动、地址映射管理和垃圾回收等功能。文中提供了关键数据结构和基础驱动代码示例,包括页读写、块擦除等操作。该方案着重解决NAND

电脑管家 1882

在UniApp中使用Lodop实现APP打印标签功能

在当今移动互联网时代,移动应用程序已经成为人们日常生活中不可或缺的一部分。随着移动设备性能的不断提升和移动网络的普及,越来越多的企业和个人开始将业务扩展到移动端。UniApp 作为一种新兴的跨平台移动应用开发框架,为开发人员提供了快速构建高质量移动应用的能力。它支持一次开发,多端运行,可以大大提高开发效率。然而,在实际应用中,我们经常会遇到需要在移动应用中实现打印功能的需求。例如,在物流行业,快递员需要在移动设备上打印快递单;在餐饮行业,服务员需要在移动设备上打印点菜单等。

Mr.Hua的博客 9525

PAT|中国大学MOOC-浙江大学翁恺-C语言程序设计习题集(更新中)

##2-0. 整数四则运算 时间限制:400 ms 内存限制:65536 kB 代码长度限制:8000 B 判题程序:Standard 作者:乔林(清华大学) 本题要求编写程序,计算2个正整数的和、差、积、商并输出。题目保证输入和输出全部在整型范围内。 输入格式: 输入在一行中给出2个正整数A和B。 输出格式: 在4行中按照格式“A 运算符 B = 结果”顺序输出和、差、积、商。 输入样例: 3 ...

小鱼波波波 6万+

STM32H7 Flash擦除后数据读取异常的缓存问题解析

本文深入分析了STM32H7系列芯片在Flash擦除后数据读取异常的缓存问题,揭示了由于数据缓存(D-Cache)和指令缓存(I-Cache)导致的数据一致性问题。通过详细的解决方案,包括手动维护缓存一致性和操作期间禁用缓存,帮助开发者有效解决这一常见但棘手的嵌入式开发难题。

weixin_29158413的博客 392

vue项目使用LODOP打印小票功能

毕业后第一份工作是做后台管理系统的,项目中要求有打印小票功能,然而我并不知道,该怎么写,百度了很多。一开始在网上查到很多都在用electron+vue我以为我可以用这个呢,搞了两天,才发现这是做桌面软件的,后来查到lodop才开始用的,在这里我得先感谢我的后端,因为如果没有我这个后端,我有可能转行了。现在我把在项目中怎么实现的说一下,我做的很糙,希望能对你们有些帮助。 **第一步**创建一个叫...

maomi199的博客 5256

生物信息学工具链搭建:用conda一键搞定MCScanX所有依赖(Ubuntu20.04实测)

本文详细介绍了在Ubuntu20.04系统上使用conda一键部署MCScanX及其所有依赖的高效方法,解决了传统源码编译安装中的依赖冲突问题。通过conda环境管理工具,研究者可以快速搭建生物信息学工具链,实现基因组共线性分析的高效运行,显著提升研究效率。

backprop5master的博客 247

Vue 项目中使用Lodop进行打印

配置文件与地址 Lodop 插件下载、打印设计都在这个网址上面进行,过程不做过多赘述,相信大家在看文章前应该对Lodop有了一定的了解 Vue中引入Lodop所需的配置文件 建议在项目中建一个自己的工具方法文件夹,使用方便 相信大家在截图中已经看到了,有个lodop.js的文件,没错!核心的一大坨都在里面,这里直接上代码 var CreatedOKLodop7766 = null ...

班大师 4336

环境配置 |Jupyter lab/Jupyter Notebook 安装与设置

ipynb使用Jupyterlab/Jupyter Notebook 来编写程序时的文件,在使用时,可以现转换为标准的.py的python文件。

weixin_44649780的博客 5770

森林冰火人html源码,森林冰火人单人版(源码)

【实例简介】java小游戏——森林冰火人,单人游戏, 实现人物行走,跳跃,吃水晶,具有计时功能,积分功能,倒计时结束游戏失败。【实例截图】【核心代码】森林冰火人单人版├── bin│ ├── game│ │ ├── Help.class│ │ ├── Logon.class│ │ ├── Main.class│ │ ├── Mykey.class│ │ ...

weixin_42507981的博客 6196

vue项目中使用lodop实现打印

先说一下Lodop 是什么东西吧 官网有详细介绍我就不多说啦 官网:http://www.lodop.net/ Lodop(标音:劳道谱,俗称:露肚皮)是专业WEB控件,用它既可裁剪输出页面内容,又可用程序代码直接实现 复杂打印。控件功能强大,却简单易用,所有调用如同JavaScript扩展语句, 废话不多说直接上代码 1.去官网下载lodop并且安装...

为啥不能换名字的博客 4699

vue实现lodop打印功能

vue实现lodop打印功能 为什么使用lodop 公司开发一个功能需要直接打印文件,并且可以指定打印机,lodop可以满足需求 lodop是什么(摘自官网) 有人说她是Web打印控件,因为她能打印、在浏览器中以插件的形式出现,用简单一行语句就把整个网页打印出来; 有人说她是打印编程接口,因为她介于浏览器和打印设备之间,是个通道和桥梁,几乎能想到的打印控制事项都能做到; 有人说她是JavaScript的扩展,因为她所有功能就那么几个语句,和JS语法一样,一看就明白个究竟; 有人说她是报表打印工具,因为那个

qq_37708668的博客 3886

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

批量打印html文档,vue项目中使用Lodop实现批量打印html页面和pdf文件

1.Lodop是什么?Lodop(标音:劳道谱,俗称:露肚皮)是专业WEB控件,用它既可裁剪输出页面内容,又可用程序代码直接实现复杂打印。控件功能强大,却简单易用,所有调用如同JavaScript扩展语句,主要接口函数如下:●PRINT_INIT(strPrintTaskName)打印初始化●SET_PRINT_PAGESIZE(intOrient,intPageWidth,intPageHeig...

weixin_26851157的博客 2834

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

vue + Lodop 制作可视化设计页面 实现打印设计功能(四)

vue + Lodop 制作可视化设计页面

Qiyandays的博客 2445

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

使用VUE前端开发Lodop打印程序,实现网页打印模块

使用VUE前端开发和Lodop打印程序,实现网页打印模块

weixin_44594816的博客 1780

vue项目中如何利用lodop控件实现多页打印

针对windows环境下的vue项目中如何利用lodop控件实现打印的功能,不支持mac环境 下载安装 首先去lodop官网下载中心下载相关的包,完成安装 重点关注前四个文件,安装第一个文件,在第二个文件和第三个文件中根据电脑系统选一个安装。将第四个文件放在项目的assets文件夹下面。 代码中使用 由于不好控制分页的时候,切纸的位置,于是换了一种方式,代码控制每一页的内容的地方使用LODOP.NewPageA();实现手动分页,这种方式可以保证切纸位置不会跑偏。 //首先引入相关的js import

hmmmmm的博客 3219

vue 打印_Vue 集成报表工具Lodop

Lodop是一款web端的报表打印控件, 可以在web端调用诸多跟打印相关的设置及功能,通过它我们可以在web端实现报表设计、打印,获取打印机状态、可用打印机等等功能这个方案有以下特点:1. 快速设计各种复杂的单据2. 通过js控制,可实现复杂逻辑的打印处理3. 兼容多端:小程序、原生App、H54. 可预览或直接静默式打印5. 兼容多种打印机,便携式打印、桌面设计打印...等等下一篇文章还会结合...

weixin_39966602的博客 2645

lodop转到其他html页面,vue项目中使用Lodop实现批量打印html页面和pdf文件

1.Lodop是什么?Lodop(标音:劳道谱,俗称:露肚皮)是专业WEB控件,用它既可裁剪输出页面内容,又可用程序代码直接实现复杂打印。控件功能强大,却简单易用,所有调用如同JavaScript扩展语句,主要接口函数如下:●PRINT_INIT(strPrintTaskName)打印初始化●SET_PRINT_PAGESIZE(intOrient,intPageWidth,intPageHeig...

weixin_35128928的博客 1475
上一篇: 帆软实现单元格可编辑内容并保存
下一篇: windows下Redis启动闪退问题解决经验汇总
mmm.c
博客等级 码龄9年 117粉丝 62原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值