electron+vue 实现静默打印

这篇具有很好参考价值的文章主要介绍了electron+vue 实现静默打印。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

我的electron版本:^12.0.0; vue版本:^3.2.13。

我是通过webview实现的。

实现原理:webview类似于iframe,其实是electron中的一个内嵌窗口,打印的也就是这个内嵌窗口的内容。

所以共需要两个文件:一个是vue文件,主要承担数据预处理工作;第二个是html文件,主要承担显示打印内容工作。两个文件直接通讯,并没有通过主进程。

唯一需要主进程和渲染进程通讯的是获取打印机列表。

开始正式开发.........................

第一步:在backgroud.js中打开webview,electron5.0后默认停用webview,所以需要在配置文件中配置为默认开启。

  const win = new BrowserWindow({
    width: 1920,
    height: 1080,
    fullscreen: true,//全屏显示
    webPreferences: {
      nodeIntegration: true,
      contextIsolation: false,
      webviewTag: true, // 允许使用 webview 标签
    },
    frame: false, //客户端窗口顶部菜单去掉
  });

第二步:vue.config.js中设置html加载器,如果不设置,项目启动后会报无法加载html文件。

首先使用 npm install html-loader,然后再进行配置。

  chainWebpack: (config) => {
    config.module.rule()
      .test(/\.html$/)
      .use('html-loader')
      .loader('html-loader')
  },

第三步:主进程和渲染进程通讯,获取打印机列表。

//主进程
import {ipcMain } from "electron";
  
ipcMain.on("getPrintList", () => {
    win.webContents.send("printList", win.webContents.getPrinters());
  });
//渲染进程
import { ipcRenderer } from "electron";

getPrintList() {
  ipcRenderer.send("getPrintList");
  ipcRenderer.once("printList", (event, data) => {
     this.printlist = data; //printList需要在data中预定义,printlist: []。返回的data就是打印机列表
  });
},

第四步:vue文件的处理,主要工作包括:数据的预处理,引用html文件,发布打印命令。

<webview
      :src="src"
      ref="webview"
      nodeintegration
      style="position: absolute;right: 200vh;top: 0;"
      :style="{ width: pageSize.with + 'mm', height: pageSize.height + 'mm' }"
    />



import raw from "@/views/components/print/print.html?raw";//此处就是html文件地址
import { ElMessage, ElMessageBox, ElNotification } from "element-plus";
import { ipcRenderer } from "electron";

  data() {
    return {
      printlist: [], //上一步需要预定义的打印机列表
      src: "",
      pageSize: {
        with: 210,
        height: 297,
      },
    };
  },

methods:{
//数据处理,注意传递数据的方式:$为key,后为数据。
handleData(){
     this.src = URL.createObjectURL(
        new Blob(
          [
            raw
              .replace("$1", "数据测试")
          ],
          {
            type: "text/html",
          }
        )
      );
    },

//打印,自定义一个button调用函数即可进行打印
    print() {
      let webview = this.$refs.webview;//首先通过ref获取webview标签
      let deviceName = "";//设置默认打印机
      for (let index = 0; index < this.printlist.length; index++) {
        if (this.printlist[index].isDefault) {
          deviceName = this.printlist[index].name;//遍历打印机集合,将默认打印机名字赋值给deviceName
        }
      }
      ElMessage({
        message: "即将使用打印机   "+deviceName,
        grouping: true,
        type: "success",
      });
      if (this.printlist.length) {
        webview.print({
          silent: true,//静默打印设置为true
          deviceName: deviceName,
          margins: {
            marginType: "none",
          },
          pageRanges: [{ from: 0, to: 0 }],
          pageSize: "A4",
        });
      } else {
        message.error("请连接打印机");
      }
    },
}

第五步:html文件的编写。html文件位置要放在第四步指定的位置。

<!DOCTYPE html>
<html lang="zh">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
    <style></style>
  </head>

  <body>
    <div>
<!--$符进行取值-->
        <span>$1</span>
      </table>
    </div>
  </body>
  <style type="text/css">
  </style>
</html>

通过以上五步,即可实现electron的静默打印。文章来源地址https://www.toymoban.com/news/detail-499553.html

到了这里,关于electron+vue 实现静默打印的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 纯前端ELECTRON+VUE+FFMPEG实现多路播放RTSP流

    近期有项目需求前端播放rtsp视频流,项目是由electron+vue3搭建,没有后端,因此需要在前端实现解析rtsp流及播放,经过多方考察最后选用了ffmpeg+jsmpeg方案实现,具体实现是参考了@牧也の旅行 大佬的这篇文章 原文地址 实现的,感谢@牧也の旅行 一直在回复我的各种小白问题,

    2024年02月04日
    浏览(38)
  • 【MySQL8入门到精通】基础篇- Linux系统静默安装MySQL,跨版本升级

    📢📢📢📣📣📣 哈喽!大家好,我是【IT邦德】,江湖人称jeames007,10年DBA工作经验 一位上进心十足的【大数据领域博主】!😜😜😜 中国DBA联盟(ACDU)成员,目前从事DBA及程序编程 擅长主流数据Oracle、MySQL、PG 运维开发,备份恢复,安装迁移,性能优化、故障应急处理等。

    2023年04月09日
    浏览(51)
  • vue使用printJs实现前端打印,以及打印分页实现

    在web端可以直接使用原生调用方法调用打印,但是往往需要单独把需要打印的东西拎出来画一个单独的html,而使用printJs则可选中你需要打印的代码块,进行页面局部打印 我的需求为将表格打印出来,并且超过分页数进行分页展示 以下内容参考了其他博主的实现方法,仅供参考 1.可

    2024年02月03日
    浏览(40)
  • vue实现打印功能

    在Vue应用中调用打印机功能,可以使用 JavaScript 的 window.print() 方法。这个方法会打开打印对话框,然后让我们选择打印设置并打印文档,但是尼这种方法依赖于浏览器的打印功能。 以下是一个简单的示例,演示如何在Vue组件中调用打印功能: 在Vue组件中,将需要打印的内容

    2024年02月12日
    浏览(40)
  • 【vue】实现打印功能

    一、vue-print-nb 官网地址:https://github.com/Power-kxLee/vue3-print-nb 【1】安装 【2】引用 vue2 引用 vue3 引用 【3】API 属性 类型 默认值 必要 可选值 描述 id String - 是 - 范围打印 ID(如果设置url则可以不设置id) url String - 否 - 打印指定的 URL。(不允许同时设置ID popTitle String - 否 - 默认

    2023年04月08日
    浏览(41)
  • vue 实现打印功能

    浏览器原生 API window.print() 可以用于打印当前窗口(window.document)视图内容。调用此方法会产生一个打印预览弹框,用户可以根据具体设置来得到打印结果。 调用 window.print() 会对整个 document.body 进行打印,而我们通常只需要打印一部分页面,可以使用打印插件 vue-print-nb vue

    2024年02月09日
    浏览(39)
  • vue笔记——实现打印功能1

    第一步:安装vue-print-nb,打开项目终端输入 npm install vue-print-nb --save 第二步:打开package.json文件,在dependencies中出现vue-print-nb,说明安装成功,如下图所示。  第三步: 方法一:全局导入 在main.js文件输入以下代码: // 导入vue-print-nb import Print from \\\'vue-print-nb\\\' Vue.use(Print) 第四步

    2024年02月07日
    浏览(37)
  • vue3问题:如何实现打印功能?

      编辑排版  | 宋大狮 平台运营  | 小唐狮 ONE 问题描述 2023年4月22号记,久违了大家。 今天要和大家分享的是关于如何实现表单、表格等自定义内容的打印功能。 最近在后台项目中,有遇到打印详情页的需求,因为开发中此功能用的次数不多,所以放在此处仅做一下记录

    2024年02月09日
    浏览(44)
  • vue-print 实现打印功能

    一、安装 1. Vue2 2. Vue3 二、基本使用 1. 直接打印页面HTML 1)方法 ① 给要打印的部分设置一个 id ② 在打印按钮中添加 v-print=\\\"\\\'#id名\\\'\\\" 2)代码(以表格为例) 2. 个性化设置 1)方法 打印按钮的 v-print 绑定一个对象 2)代码 3)效果展示 ① 预览工具 3. 打印URL 1)方法 ① 给 打印

    2024年02月02日
    浏览(43)
  • vue3-print-nb 实现页面打印(含分页打印)

    全局引入 局部引入 官网地址: https://github.com/Power-kxLee/vue3-print-nb 官网有详细介绍 全页面打印 局部打印 被打印的区域需要被渲染出来,隐藏的元素不能打印 分页打印

    2024年02月09日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包