1.获取打印机列表
// /在主线程下,通过ipcMain对象监听渲染线程传过来的getPrinterList事件
electron.ipcMain.on('getPrinterList', () => {
//主线程获取打印机列表
const list = win.webContents.getPrinters()
//通过webContents发送事件到渲染线程,同时将打印机列表也传过去
win.webContents.send('getPrinterList', list)
渲染进程-调用
//监听主线程获取到打印机列表后的回调
ipcRenderer.once('getPrinterList', (event, data) => {
//data就是打印机列表
printList.value = data
console.log(data, 'da')
2.打印前的准备
2-1 主进程 开启渲染进程使用node模块
2-2 vue.config.js文件中新增配置,开启渲染进程使用node模块
2-3 目录 使用SumatraPDF进行打印 官网链接Sumatra PDF reader download page
3.以上的准备工作做完后,我们就可以开始正式进入打印功能了,代码如下,其中的主要思路就是讲返回返回的PDF文件下载到我们项目本地,然后使用node开启打印工具进行打印,打印结束后删除PDF文件,从而完成打印功能
electron.ipcMain.on('printPdf', (e, url) => {
let pdfPath = path.join(__static, url.slice(url.lastIndexOf('/') + 1))
request(url, (err) => {
if (!err) {
cp.exec(
`SumatraPDF.exe -print-to "XP-80C" -print-settings " noscale" "${pdfPath}"`,
windowsHide: true,
cwd: path.join(__static, 'SumatraPDF')
(e) => {
if (e) {
throw e
/* 打印完成后删除创建的临时文件 */
fs.unlink(pdfPath, () => {})
}).pipe(fs.createWriteStream(pdfPath))
渲染进程--调用
ipcRenderer.send('printPdf', 后端获取的PDF文件)
注意点:不能使用绝对路径,打包后绝对路径会报错,需要使用 __static,如果使用__static报错是因为代码校验没有进行配置,需要配置下面的代码即可。
globals: {
__static: true
如果遇到像效果图左边一样打印的数据整体变小,需要到打印插件将打印倍数改为1x,改为正常大小,默认进行了缩小
font-awesome:4.7.0
第一步:创建本地存储,用于存储添加的小票机。本人使用的是sqlite3。在小编的另一篇文章中写到了。我在这里再描述一下。(settingsDb.js)
const {dbconnect} = require('./utils/db')
const { v5: uuidv5, v4: uuidv4} = requi.
第一种:通过window的webcontent对象,使用此种方式需要单独开出一个打印的窗口,可以将该窗口隐藏,但是通信调用相对复杂。
第二种:使用页面的webview元素调用打印,可以将webview隐藏在调用的页面中,通信方式比较简单。
两个对象调用打印方法的使用方式都一样。
本文是通过第二种方法实现静默打印。
三、实现过程:
1、要实现打印功能,首先要知道我们的设备上有哪些打印机。方法是:在渲染线程通过electron的ipcRenderer对象发送事件到主线
前言:该文章需要一定的electron基础同学。如需了解更多相关信息,请移步electron官方文档。
一、需求:
公司项目需要通过electron调用系统打印机,实现打印小票的功能。
二、分析:
electron打印大概有两种:
第一种:通过window的webcontent对象,使用此种方式需要单独开出一个打印的窗口,可以将该窗口隐藏,但是通信调用相对复杂。
第二种:使用页面的we...
需要换一种实现了,查到electron有静默打印的方式有两种
第一种:通过window的webcontent对象,使用此种方式需要单独开出一个打印的窗口,可以将该窗口隐藏,但是通信调用相对复杂
上篇讲了如何写一个 node addon,这篇开始讲述如何调用 Win32 Spooler API 实现打印的完整功能。项目的代码在 https://gitee.com/csling/win32-printer,用 c++ 编写。下面一步一步来讲解。
主要文件 2 个:
win32_printer.cc : 定义 node 的接口,接受参数和返回数据结构win32_printer.h:接口的具体实现,调用 Win32 Spooler API 管理打印任务。
如何定义 node 接口,传参.
一、background.js,项目入口配置文件
import { app, protocol, BrowserWindow, ipcMain } from 'electron'
* 省略多数默认配置
//在主线程下,通过ipcMain对象监听渲染线程传过来的getPrinterList事件
ipcMain.on('getPrinterList', (event) => {
//主线程获取打印机列表
const list = wi
Electron中的打印功能有以下几种方式:webContents的print和printToPDF方法、webview标签的print和printToPDF方法、iframe的print方法。关于print方法,webContents、webview和iframe都是调用的浏览器自带的打印功能,虽然Electron文档中罗列了很多打印配置项,但实际使用时看不到实际效果,打印的最终效果也较差。而printToPDF方法效果就好很多。
winprints = new BrowserWindow({ show: false });
console.log(winprints.webContents.getPrinters())
获取到的结果为:
name: 'Zebra_LP2844',
description: 'Zebra LP2844',