electron-vue 打印预览功能实现

前言:

最近electron-vue项目中遇到打印功能,但是利用浏览器原生的打印功能(window.print())又无法预览打印界面,用户体验极差。后来偶然发现lodop这个神奇的web打印插件,通过把lodop打印插件整合到项目中,解决了问题。不足的是为此用户需要增加一步安装lodop.exe文件的操作。

  • 先生成图片:

    项目中生成的需要打印的内容

  • lodop的预览功能:

    这就是打印预览的效果了

正文开始,接下来说以下具体操作吧。

1. 前往lodop官网下载插件
下载解压后复制LodopFuncs.js到自己的electron-vue项目中(我是复制到了utils目录下面)前往lodop官网

下载解压后的文件

2. 回到项目查看LodopFuncs.js可以看到代码不多内容很简单,注释也很清晰,接下来就要改造这个js文件方便在electron-vue项目中使用
可以看到里面有3个函数,需要在每个函数前面加上export 导出使用:

在这里插入图片描述

在getLodop函数中,将图中的代码注释,不然当用户没安装打印插件时直接在body页面插入这些元素,影响页面布局,然后return false 根据这个值去自定义一些提示用户安装插件的操作:

在这里插入图片描述

到目前为止LodopFuncs.js文件已经修改完成,可以在需要打印的页面使用了

2. 打印页面引入LodopFuncs.js使用

首先要做的就是组件中引入getLodop函数方法:

引入getLodop函数


现在开始使用由于我的项目中需要打印两个地方,分别是二维码和发货清单,所以打印一系列操作单独写一个方法,这里取名为setLodop

/**
 * @param {string} ref
 */
setLodop(ref) {
		//  调用getLodop函数,如果用户未安装打印插件则会返回false
      let LODOP = getLodop();
		//  如果返回false 用户未安装打印插件,弹出dialog提示引导用户跳转到安装页面
        if (!LODOP) {
            this.errorTip='打印控件未安装,请先将安装包根目录打印控件安装!'
            //  显示去安装按钮
            this.showInstall=true
            return this.tipDialog=true
        }
        //  设置元素的打印html打印样式,样式可以像1.二维码打印写行内样式也可以像2.清单打印写在style标签内
        //  个人认为调打印样式是最麻烦的,所以调样式时一定要仔细
      //  1.二维码打印的html及样式
      let QrcodeHtml = `<div 
              style=" width: 100%;
              height:100%;
              display: flex;
              align-items:center;">
            <div style=" width: 100%;
              position: relative;
              display: flex;
              justify-content: center;
              flex-wrap: wrap;">${this.$refs[ref].innerHTML}</div></div>`; //  通过ref获取打印元素html
      // 2. 打印清单
      let adressListHtml = `
<html>
<head>

<style>
 html,body {
height:100%;
width:100%;

}
.printlist_right {
  position: relative;
  width:100%;
  height:100%;
  color: #000;
}

.button_opt {
    display:none;
}
</style>
    </head>
    <body>
    <div class="printlist_right"> ${this.$refs[ref].innerHTML}</div>
    </body>
    </html>`;
      //  设置打印方向 1.纵向 2.横向 这里判断是打印二位码还是打印发货单,因为发货单内容多所以设置横向打印
      let direction = ref === "qrcode" ? 1 : 2;
      //  打印初始化
      LODOP.PRINT_INIT("发货单");
      //  打印方向 及纸张大小设置  这里是a4纸的尺寸
      LODOP.SET_PRINT_PAGESIZE(direction, "210mm", "297mm");
      //  设置打印字体大小及粗细
      LODOP.SET_PRINT_STYLE("FontSize", 18);
      LODOP.SET_PRINT_STYLE("Bold", 1);
      ///参数按顺序分别为,上下间距,左右间距,宽度,高度  
      //  这里根据形参判断是打印二维码 还是发货清单
      ref === "qrcode" && LODOP.ADD_PRINT_HTML(0, 0, "100%", "100%", QrcodeHtml);
      ref === "printlist" && LODOP.ADD_PRINT_HTML(0, 0, "100%", "100%", adressListHtml);
      
      // 最后弹出打印预览界面
      LODOP.PREVIEW();
    },

3. 打印预览功能基本就完成了,最后就是如何更好引导用户安装了,这里说一下我的思路吧
先是回到第一步,把下载的lodop插件文件解压后全部复制到根目录下的static文件夹里面去

复制到static文件夹


在组件中未安装提示框中添加去安装按钮,给去安装按钮绑定事件跳转事件

在这里插入图片描述


弹出错误提示

在这里插入图片描述

去安装按钮绑定的事件
跳转打开浏览器 加载static目录下PrintSample1.html文件

 //  跳转安装打印控件
    goInstall() {
        let path = __static+'/Lodop6.226_Clodop4.127/PrintSample1.html'
        shell.openExternal(path);
    }

跳转到这个页面让用户通过这个页面检测下载安装CLodop_Setup_for_Win32NT.exe文件,可以根据需要自定义修改PrintSample1.html

在这里插入图片描述


其他更高级的功能大家可以自行移步lodop官网查看学习。

原文地址:https://blog.csdn.net/weixin_49258413/article/details/117586405

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


这篇文章主要讲解了“electron打包中的坑如何解决”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“electron...
这篇文章主要介绍“electron打包的坑如何解决”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“electron打包的坑如何...
这篇文章主要为大家分析了VSCode中如何调试Electron应用的主进程代码的相关知识点,内容详细易懂,操作细节合理,具有一定参考价值。如果感兴趣的话,不妨跟着跟...
这篇“如何在VSCode上调试Electron应用的主进程代码”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价
vue-cli+electron一种新的脚手架(vue-electron)vue-electron主要业务逻辑都放在src下的renderer文件夹内,和之前的vue-cli搭建项目流程没有任何区别 GIT地址:https://github.com/SimulatedGREG/electron-vue 搭建项目:1.全局安装脚手架:npminstall--globalvue-cli
1、首先成功安装Node.js。2、配置好环境变量path,参加上一篇博客《NodeJs安装》3、全局安装electron,并测试。如下图
相关代码:https://github.com/WozHuang/Barrage-helper/blob/master/src/main/index.dev.js在SPA逐渐成为构建优秀交互体验应用的主流方式后,使用Electron开发跨平台的软件是一个优秀的解决方案。下面简单介绍一下Electron-vue安装vue-devtool的方式。安装步骤下载vue-de
前言本人是做java开发的(菜鸟),做web项目的朋友们基本上都会遇到同样一个,永远不知道客户会怎么样使用,或者说永远不知道客户会用什么浏览器打开我们做出来的应用,就算你跟他说明了一定得用某某某浏览器打开,还是有人会用别的浏览器打开,这种情况通常我们会去做适配(前端),最近公司有需求
electron-builder是将electron做的桌面应用打包成安装包的插件。一、安装使用yarn安装,使用npm安装的有问题(没有尝试),先安装yarn工具。npminstall-gyarn安装electron-builderyarnaddelectron-builder--save-dev二、配置在package.json 中配置"build":{
来源:https:/ewsn.net/say/electron-asar.html 在electron中,asar是个特殊的代码格式。asar包里面包含了程序猿编写的代码逻辑。默认情况下,这些代码逻辑,是放置在resource/app目录下面的,明文可见,这样的话,也就有了代码加密(asar打包)的需求 asar如何解密加密?electron的asar的
 字体图标丢失问题解决方案 重新打包文件npmrunbuild再次运行electron 
<img:src="item.headUrl"alt=""class="contact-head":onerror="morenImage">data(){return{morenImage:'this.src="static/image/head.png"',//默认头像}}
在electron-vue中使用了字体图标,但是打包成.exe文件后图标不显示,路劲问题把字体图标放到static目录下就可以了,静态图片也一样我原来放在其它地方不行改到static目录就可以了
//设置登录cookiesetCookie(name,value){varDays=30;varexp=newDate();vardate=Math.round(exp.getTime()/1000)+Days*24*60*60;constcookie={url:this.webApi,name:name,value:value,e
vue部分cnpminstall-gvue-clivueinitsimulatedgreg/electron-vuemy-projectelectron下载失败解决办法:单独设置electron为淘宝镜像,npmconfigsetelectron_mirrorhttps:/pm.taobao.org/mirrors/electron/yarnconfigsetelectron_mirrorhttps:/pm.taobao.org
原始的方式打包下载对应的版本号的ReleaseElectron然后把对应的项目方便整理成这样的目录结构(Windows下)node_modules重新安装,不然可能启动失败把整文件夹给别人就可以了如果想改名子可以用改名工具rcedit应用程序打包成一个文件为了缓解windows路径名过长的问题(就
窗口间通信的问题electron窗口通信比nwjs要麻烦的多electron分主进程和渲染进程,渲染进程又分主窗口的渲染进程和子窗口的渲染进程主窗口的渲染进程给子窗口的渲染进程发消息1234567891011subWin.webContents.on('dom-ready', () => {    subWin.webCo
按照上一个问题here,我有一个使用Electron平台和Javascript的桌面应用程序,我使用以下方法将HTML5画布转换为JPEG:<aid="download"download="Path.jpg">DownloadJPG</a>然后,functiondownload(){vardt=canvas.toDataURL('image/jpeg');this.href
一.什么是Electron?它和NW.js的区别是什么?Electron是GitHub开发的桌面应用开发框架,它支持使用HTML、CSS、JavaScript来构建跨平台的桌面应用。Electron和NW.js(NW.js是什么可以百度下)的区别是:1.整合Chromium和Node.js的方式不同。在NW.js中,Chromium是直接被打补丁打进去
1.打开父子模态创建,<button@click="showModalHandler">父子模态窗口</button>/enderer渲染器中主注册事件showModalHandler(){ipcRenderer.send("child-down-modal");}//主进程中触发事件/***父子模态窗口*/letchildDownModal;ipcMain.on(&#