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