electron打印大概有两种:
第一种:通过window的webcontent对象,使用此种方式需要单独开出一个打印的窗口,可以将该窗口隐藏,但是通信调用相对复杂。
第二种:使用页面的webview元素调用打印,可以将webview隐藏在调用的页面中,通信方式比较简单。
两个对象调用打印方法的使用方式都一样。
本文是通过第二种方法实现静默打印。

注意: 渲染进程通信需要使用ipcRenderer,页面只能通过require引入ipcRenderer,必须得支持node,如果你的electron版本 > 6.0的话使用webview需要配置webviewTag。我的配置如下

new BrowserWindow({webPreferences: {// 允许使用nodenodeIntegration: true,contextIsolation: false,// 允许使用remoteenableRemoteModule: true,// 允许跨域webSecurity: false,// 允许使用webviewwebviewTag: true}})

1. 首先获取打印机列表

在需要获取打印机列表的页面请求获取


const { ipcRenderer } = require("electron")// 发送给主进程消息
ipcRenderer.send('allPrint')ipcRenderer.once('printName',(event,data)=>{console.log(data) // data就是返回的打印机数据列表
})

主进程 main.js 中2

// 监听渲染进程发送的消息
ipcMain.on('allPrint',()=>{// 获取到打印机列表const printers = win.webContents.getPrinters()// 把获取的打印机列表发送给渲染进程win.webContents.send('printName',printers)
})

由于我是再page1渲染进程中又打开的子渲染进程page2 (若只有page1渲染进程可以跳过这一步)

 // 监听获取打印机列表中发送给page2
ipcRenderer.on('printName',(event, data)=>{page2Win.webContents.send('printName', data)
})

 2.页面引用webview

<template><el-button @click="printView">开始打印</el-button><webview ref="printWebview" :src="url" nodeintegration hidden>
</template>
<script>import { defineComponent, reactive, toRefs, onMounted, ref, unref} from "vue"import config from "@/common/lib/config"const { ipcRenderer } = require("electron")export default defineComponent({setup(){let data = reactive({url: process.env.CVE_ENV === 'development' ? config.dev_url.print : config.pro_url.print})const printWebview = ref(null)onMounted(()=>{getPrint()})const printView = () =>{unref(printWebview).print({//是否是静默打印silent: true,printBackground: true,deviceName: '你的获取的打印机列表的打印机名称',})}//获取打印机列表const getPrint = () => {ipcRenderer.send('allPrint')ipcRenderer.once('printName',(event,data)=>{console.log(data) //data就是返回的打印机数据列表})}return {...toRefs(data),printWebview,printView}}})
</script>

 当然看完上面的你可能不知道webview引入的页面从哪里来,接着往下看

3.配置vite.config.js

export default defineConfig({// publicDir,resolve: {// 目录别名配置alias: {"@": path.resolve(__dirname, "src")},},build:{rollupOptions: {// 多页应用配置input: {main: path.resolve(__dirname, 'index.html'), // 主应用入口// 这里这个打印页面需要再vite中配置多页面应用settle: path.resolve(__dirname, 'projects/settle/index.html'), // 结算中心print: path.resolve(__dirname, 'projects/settle/print.html') // 小票打印页面},external: ['electron'], // 告诉 Rollup 不要去打包 electron}},optimizeDeps: {exclude: ['electron'], // 告诉 Vite 不要转换 electron},plugins: [vue({script: {refSugar: true}})]
})

然后再你的根目录下创建projects文件夹,再projects文件夹下面创建settle文件夹 settle文件夹下面创建print.html 这个入口文件地址和你vite配置的多页应用入口文件地址对应就行

附上我上面使用webview开发环境和编译后的环境地址

// 开发环境运行地址dev_url: {print: `http://localhost:${process.env.CVE_PORT || 3000}/projects/settle/print.html`,},// 生产环境运行地址pro_url:{print: "app://./projects/settle/print.html"}

最后附上print.html内容

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>电子小票</title>
</head>
<body id='bd'>张三
</body>
<script>//引入ipcRenderer对象const {ipcRenderer} = require('electron')//监听渲染线程传过来的webview-print-render事件ipcRenderer.on('webview-print-render', (event, deviceInfo) => {console.log(deviceInfo)//当图片插入到页面后,通过ipcRenderer对象的sendToHost方法和渲染线程通讯,告诉渲染线程打印的内容已经准备完毕,请开始打印操作ipcRenderer.sendToHost('webview-print-do')})
</script>
</html>

electron+vue3+vite2 如何使用打印相关推荐

  1. Electron+Vue3+Vite+Element-Plus,保持软后台全速运行(解决循环过多导致的界面不刷新问题,保证窗口失去焦点后setTimeOut可用)

    文章目录 Electron+Vue3+Vite+Element-Plus,保持软后台全速运行(解决循环过多导致的界面不刷新问题,保证窗口失去焦点后setTimeOut可用) 问题描述 问题一 大循环界 ...

  2. electron@7.2.4实现打印功能

    一.background.js,项目入口配置文件 import { app, protocol, BrowserWindow, ipcMain } from 'electron'/* * * 省略多数 ...

  3. 前端实战:electron+vue3+ts开发桌面端便签应用

    前端时间我的一个朋友为了快速熟悉 Vue3 开发, 特意使用 electron+vue3+ts 开发了一个桌面端应用, 并在 github 上开源了, 接下来我就带大家一起了解一下这个项目, 在文章末 ...

  4. 详解从零搭建企业级 vue3 + vite2+ ts4 框架全过程

    大厂技术  高级前端  Node进阶 点击上方 程序员成长指北,关注公众号 回复1,加入高级Node交流群 本文不仅仅是搭建个脚手架这么简单,还会带你了解每一步.甚至每一个配置项的作用,和每个配置的知 ...

  5. vue3.0+vant3仿快手/抖音短视频|Vue3+Vite2聊天/直播实例

    vue3.0-douyin 基于vue3.x开发仿抖音app界面小视频+直播聊天实例. 基于Vue3框架技术搭建一款仿抖音APP界面小视频+直播实战案例.运用到了vite2+vue3.0.5+vuex ...

  6. vue3+vite2多页面多路由 注意

    无法实现多页面多路由的源码分析 createWebHistory和createWebHashHistory的区别 首先是createWebHistory /** * Creates an HTML5 ...

  7. electron+vue3全家桶+vite项目搭建【一】使用开源项目快速搭建基础工程

    文章目录 指引 1.创建工程 2.安装依赖 3.运行工程 4.打包工程 指引 项目地址 视频讲解 1.创建工程 直接用开源的electron构建脚手架:https://github.com/elect ...

  8. electron+vue3全家桶+vite项目搭建【九】集成vite-plugin-mock-server 模拟后端请求

    文章目录 引入 1.引入依赖 2.集成插件 3.测试接口请求 引入 后端接口出的太慢?问题不大,咱们可以借助vite-plugin-mock-server插件自己写接口,返回商量好的格式,后续联调直接 ...

  9. electron+vue3全家桶+vite项目搭建【八】集成mockjs模拟数据

    引入 造数据是很麻烦的事情,我们可以把造数据的流程交给mockjs去做 视频讲解 mock.js官网 demo项目地址 1.引入依赖 # 安装mockjs的依赖 npm install mockjs ...

最新文章

  1. 提质升级·万祥军:中国与拉美谋定国际农民丰收节贸易会
  2. android 6.0 logcat机制(三)logd处理请求log
  3. MySQL(四)复合查询与联合查询
  4. windows消息队列C语言,08年计算机二级C语言辅导:vc操作微软消息队列的方法
  5. 二进制,十进制的相互转换方法
  6. 剑指offer面试题42. 连续子数组的最大和(动态规划)
  7. python自学行吗-python自学行吗 有哪些用处
  8. 两台Windows7的笔记本,充分利用自带无线网卡共享上网。
  9. 【转】详解GAN代码之逐行解析GAN代码
  10. 求四科平均成绩c语言,c语言实验报告评语大全
  11. 大华电子秤客户端开发文档_『飞桨』全流程开发工具PaddleX
  12. ANDROID仿淘宝商品浏览滑(拖)动查看详情界面
  13. 联想笔记本进BIOS
  14. 互联网史话----十亿美金之51
  15. 上焦如雾实际上是指何项作用_广西中医药大学赛恩斯新医药学院《中医基础理论》期考试卷卷16...
  16. Qt下绘制PPI扫描的雷达图
  17. 机器学习在学生成绩预测模型上的应用
  18. 机器学习第四章之逻辑回归模型
  19. 机器学习之聚类算法——聚类效果评估可视化
  20. iOS开发:简易天气预报

热门文章

  1. chrome插件(Markdown Nice):用 markdown 写微信公众号
  2. 英语拼读规则,不错的英语教学网站
  3. SQL的select 语句的执行顺序
  4. linux文件名小写变大写命令,通过Ubuntu命令行将文件名转换为小写
  5. 树莓派教程——树莓派连接并打开摄像头
  6. 前端搞一个扭蛋抽奖小动画?
  7. 修改服务器cimc地址,UCSC系列服务器的CIMC设置.PDF
  8. 通过下面语句创建employee数据库和dept(部门表)、emp(员工表)、salgrade(工资等级表)34题
  9. 7-87 时间换算 (15 分)
  10. Cassandra Cql