electron+vue 实现静默打印

news/2025/1/15 21:53:50/

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

我是通过webview实现的。

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

那么就需要一个html作为内嵌内容。所以共需要两个文件:一个是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"nodeintegrationstyle="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,//静默打印设置为truedeviceName: 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的静默打印。


http://www.ppmy.cn/news/462596.html

相关文章

商务蓝牙耳机什么牌子的好?商务通话蓝牙耳机推荐

随着时代的发展&#xff0c;人们对自我享受的要求越来越高&#xff0c;比起与三朋好友约会还不如静下心来听听音乐。当然了&#xff0c;一次美好的享受需要性价比好的设备。如果你也想体验蓝牙耳机带来的静谧美好的纯净享受&#xff0c;下面给你带来性价比好、降噪强、高颜值的…

【SpringCloud】Eureka 案例上手稍微带点原理

文章目录 1. 前置工作1.1 搭建 user-server1.1.1 pom1.1.2 po&#xff0c;mapper&#xff0c;controller1.1.3 yml1.1.4 启动类1.1.5 启动并访问 1.2 搭建 order-server1.2.1 pom1.2.2 po mapper controller1.2.3 yml1.2.4 启动类1.2.5 启动并访问 1.3 两个服务通信 2. Eureka2…

c# 从零到精通 dataGridView控件插入数据

c# 从零到精通 dataGridView控件插入数据 using System; using System.Data; using System.Text; using System.Windows.Forms; using System.Windows; using System.Drawing; namespace Test05 { public partial class Form1 : Form { public Form1() { InitializeComponent()…

断触问题分析思路

在使用手机的时候&#xff0c;有时候会出现触碰中断的异常问题&#xff0c;比如点击无效&#xff0c;已经存在的触碰事件突然消失&#xff0c;这种问题很直观&#xff0c;用户体验很差。 如果能够复现问题&#xff0c;抓到实时log&#xff0c;分析起来会清楚很多。可以打开开发…

小米游戏本8代 风扇噪音大解决办法

来源于&#xff1a;https://tieba.baidu.com/p/6772997477 之前困扰了很久&#xff0c;清过灰&#xff0c;换过硅脂&#xff0c;可还是没有什么用&#xff0c;经过不懈努力终于发现了解决方法 右键电源图标&#xff0c;电源选项&#xff0c;更改计划设置&#xff0c;更改高级电…

小米8成功刷入Win11ARM64完整版系统

本文转载自IT之家 IT之家 6 月 29 日消息 今天凌晨&#xff0c;微软面向 Dev 开发频道发布了第一个 Windows 11 Insider Preview 版本&#xff0c;即 Build 22000.51! 微软表示&#xff0c;随着我们在未来几个月内完成产品的定型&#xff0c;我们将与你一起验证这一体验。在这…

小米Note4、小米8、一加6刷机(三方rec+rom+root)

刷机的大致流程&#xff1a; 解手机bootloader锁&#xff08;各个品牌手机解锁方式各不相同&#xff09;刷入三方recovery进入三方rec模式&#xff0c;进行双清刷入rommagisk&#xff08;root&#xff09; 备注&#xff1a;所有的相关刷机包&#xff0c;应和手机机型和系统相匹…

小米8刘海屏适配

1.前言 最近在开发一个小说阅读器APP&#xff0c;在阅读界面碰到了适配问题&#xff0c;把解决问题的方法及过程记录一下。因为我只有小米8一个测试机&#xff0c;所以方法不保证其他手机的兼容性&#xff0c;只是提供一个思路&#xff0c;希望能给到其他人帮助。 2.全面屏适…