添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

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',