当前位置: 代码网 > it编程>前端脚本>Vue.js > Electron实现静默打印小票的流程详解

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

2024年07月03日 Vue.js 我要评论
electron实现静默打印小票静默打印流程1.渲染进程通知主进程打印//渲染进程 data是打印需要的数据window.electron.ipcrenderer.send('handleprint'

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静默打印小票的资料请关注代码网其它相关文章!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com