Electron实现静默打印小票的流程详解

 更新时间:2024年06月11日 09:28:53   作者:彷徨的耗子  
很多情况下程序中使用的打印都是用户无感知的,并且想要灵活的控制打印内容,往往需要借助打印机给我们提供的api再进行开发,这种开发方式非常繁琐,并且开发难度较大,本文给大家介绍了Electron实现静默打印小票的流程,感兴趣的朋友可以参考下

Electron实现静默打印小票

静默打印流程

1.渲染进程通知主进程打印

//渲染进程 data是打印需要的数据
window.electron.ipcRenderer.send('handlePrint', data)

2.主进程接收消息,创建打印页面

//main.ts
/* 打印页面 */
let printWindow: BrowserWindow | undefined
/**
 * @Author: yaoyaolei
 * @Date: 2024-06-07 09:27:22
 * @LastEditors: yaoyaolei
 * @description: 创建打印页面
 */
const createPrintWindow = () => {
  return new Promise<void>((resolve) => {
    printWindow = new BrowserWindow({
      ...BASE_WINDOW_CONFIG,
      title: 'printWindow',
      webPreferences: {
        preload: join(__dirname, '../preload/index.js'),
        sandbox: false,
        nodeIntegration: true,
        contextIsolation: false
      }
    })

    printWindow.on('ready-to-show', () => {
      //打印页面创建完成后不需要显示,测试时可以调用show查看页面样式(下面有我处理的样式图片)
      // printWindow?.show()
      resolve()
    })

    printWindow.webContents.setWindowOpenHandler((details: { url: string }) => {
      shell.openExternal(details.url)
      return { action: 'deny' }
    })

    if (is.dev && process.env['ELECTRON_RENDERER_URL']) {
      printWindow.loadURL(`${process.env['ELECTRON_RENDERER_URL']}/print.html`)
    } else {
      printWindow.loadFile(join(__dirname, `../renderer/print.html`))
    }
  })
}

ipcMain.on('handlePrint', (_, obj) => {
   //主进程接受渲染进程消息,向打印页面传递数据
  if (printWindow) {
    printWindow!.webContents.send('data', obj)
  } else {
    createPrintWindow().then(() => {
      printWindow!.webContents.send('data', obj)
    })
  }
})

3.打印页面接收消息,拿到数据渲染页面完成后通知主进程开始打印

<!doctype html>
<html>
<head>
  <meta charset="UTF-8" />
  <title>打印</title>
  <style>
  </style>
</head>

<body>

</body>
<script>
  window.electron.ipcRenderer.on('data', (_, obj) => {
  //这里是接受的消息,处理完成后将html片段放在body里面完成后就可以开始打印了
  //样式可以写在style里,也可以内联
    console.log('event, data: ', obj);
  //这里自由发挥
    document.body.innerHTML = '处理的数据'
  //通知主进程开始打印
    window.electron.ipcRenderer.send('startPrint')
  })
</script>
</html>

这个是我处理完的数据样式,这个就是print.html

4.主进程接收消息开始打印,并且通知渲染进程打印状态

ipcMain.on('startPrint', () => {
  printWindow!.webContents.print(
    {
      silent: true,
      margins: { marginType: 'none' }
    },
    (success) => {
      //通知渲染进程打印状态
      if (success) {
        mainWindow.webContents.send('printStatus', 'success')
      } else {
        mainWindow.webContents.send('printStatus', 'error')
      }
    }
  )
})

完毕~

以上就是Electron实现静默打印小票的流程详解的详细内容,更多关于Electron静默打印小票的资料请关注脚本之家其它相关文章!

相关文章

  • 手拉手教你如何处理vue项目中的错误

    手拉手教你如何处理vue项目中的错误

    在项目开发中经常遇到各种报错,每次总是通过这样或那样的办法解决掉,这篇文章主要给大家介绍了关于如何处理vue项目中错误的相关资料,需要的朋友可以参考下
    2022-06-06
  • 基于Vue实现卡片无限滚动动画

    基于Vue实现卡片无限滚动动画

    这篇文章主要为大家详细介绍了如何利用Vue制作出卡片无限滚动动画,文中的示例代码讲解详细,对我们学习有一定帮助,需要的可以参考一下
    2022-05-05
  • Vue计算属性中reduce方法实现遍历方式

    Vue计算属性中reduce方法实现遍历方式

    这篇文章主要介绍了Vue计算属性中reduce方法实现遍历方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-03-03
  • vue.js页面加载执行created,mounted的先后顺序说明

    vue.js页面加载执行created,mounted的先后顺序说明

    这篇文章主要介绍了vue.js页面加载执行created,mounted的先后顺序说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-11-11
  • vue3项目中使用tinymce的方法

    vue3项目中使用tinymce的方法

    这篇文章主要介绍了vue3使用tinymce的方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-04-04
  • Vue $attrs & inheritAttr实现button禁用效果案例

    Vue $attrs & inheritAttr实现button禁用效果案例

    这篇文章主要介绍了Vue $attrs & inheritAttr实现button禁用效果案例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-12-12
  • 如何在vite初始化项目中安装scss以及scss的使用

    如何在vite初始化项目中安装scss以及scss的使用

    今天想要给vite项目,添加全局的scss变量文件引用,这样我们在使用scss变量和函数的时候就不需要每个组件都取引用了,下面这篇文章主要给大家介绍了关于如何在vite初始化项目中安装scss以及scss使用的相关资料,需要的朋友可以参考下
    2022-10-10
  • vue快速入门基础知识教程

    vue快速入门基础知识教程

    VUE是一套前端框架,免除了原生JavaScript中的DOM操作,简化书写。VUE基于MVVM(Model-View_ViewModel)思想,实现数据双向绑定。Vue的核心库只关注图层.响应式数据绑定和组件化开发是其两大特点。
    2023-01-01
  • 基于Vue2实现简易的省市区县三级联动组件效果

    基于Vue2实现简易的省市区县三级联动组件效果

    这是一个基于Vue2的简易省市区县三级联动组件,可以控制只显示省级或只显示省市两级,可设置默认值等。提供原始省市县代码和名称数据,适用于各种有关城市区县的应用。需要的朋友可以参考下
    2018-11-11
  • vue3父组件异步props传值子组件接收不到值问题解决办法

    vue3父组件异步props传值子组件接收不到值问题解决办法

    这篇文章主要给大家介绍了关于vue3父组件异步props传值子组件接收不到值问题的解决办法,需要的朋友可以参考下
    2024-01-01

最新评论