Electron實(shí)現(xiàn)靜默打印小票的流程詳解
Electron實(shí)現(xiàn)靜默打印小票
靜默打印流程

1.渲染進(jìn)程通知主進(jìn)程打印
//渲染進(jìn)程 data是打印需要的數(shù)據(jù)
window.electron.ipcRenderer.send('handlePrint', data)
2.主進(jìn)程接收消息,創(chuàng)建打印頁(yè)面
//main.ts
/* 打印頁(yè)面 */
let printWindow: BrowserWindow | undefined
/**
* @Author: yaoyaolei
* @Date: 2024-06-07 09:27:22
* @LastEditors: yaoyaolei
* @description: 創(chuàng)建打印頁(yè)面
*/
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', () => {
//打印頁(yè)面創(chuàng)建完成后不需要顯示,測(cè)試時(shí)可以調(diào)用show查看頁(yè)面樣式(下面有我處理的樣式圖片)
// 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) => {
//主進(jìn)程接受渲染進(jìn)程消息,向打印頁(yè)面?zhèn)鬟f數(shù)據(jù)
if (printWindow) {
printWindow!.webContents.send('data', obj)
} else {
createPrintWindow().then(() => {
printWindow!.webContents.send('data', obj)
})
}
})
3.打印頁(yè)面接收消息,拿到數(shù)據(jù)渲染頁(yè)面完成后通知主進(jìn)程開(kāi)始打印
<!doctype html>
<html>
<head>
<meta charset="UTF-8" />
<title>打印</title>
<style>
</style>
</head>
<body>
</body>
<script>
window.electron.ipcRenderer.on('data', (_, obj) => {
//這里是接受的消息,處理完成后將html片段放在body里面完成后就可以開(kāi)始打印了
//樣式可以寫(xiě)在style里,也可以內(nèi)聯(lián)
console.log('event, data: ', obj);
//這里自由發(fā)揮
document.body.innerHTML = '處理的數(shù)據(jù)'
//通知主進(jìn)程開(kāi)始打印
window.electron.ipcRenderer.send('startPrint')
})
</script>
</html>
這個(gè)是我處理完的數(shù)據(jù)樣式,這個(gè)就是print.html


4.主進(jìn)程接收消息開(kāi)始打印,并且通知渲染進(jìn)程打印狀態(tài)
ipcMain.on('startPrint', () => {
printWindow!.webContents.print(
{
silent: true,
margins: { marginType: 'none' }
},
(success) => {
//通知渲染進(jìn)程打印狀態(tài)
if (success) {
mainWindow.webContents.send('printStatus', 'success')
} else {
mainWindow.webContents.send('printStatus', 'error')
}
}
)
})

完畢~
以上就是Electron實(shí)現(xiàn)靜默打印小票的流程詳解的詳細(xì)內(nèi)容,更多關(guān)于Electron靜默打印小票的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
手拉手教你如何處理vue項(xiàng)目中的錯(cuò)誤
在項(xiàng)目開(kāi)發(fā)中經(jīng)常遇到各種報(bào)錯(cuò),每次總是通過(guò)這樣或那樣的辦法解決掉,這篇文章主要給大家介紹了關(guān)于如何處理vue項(xiàng)目中錯(cuò)誤的相關(guān)資料,需要的朋友可以參考下2022-06-06
基于Vue實(shí)現(xiàn)卡片無(wú)限滾動(dòng)動(dòng)畫(huà)
這篇文章主要為大家詳細(xì)介紹了如何利用Vue制作出卡片無(wú)限滾動(dòng)動(dòng)畫(huà),文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)有一定幫助,需要的可以參考一下2022-05-05
Vue計(jì)算屬性中reduce方法實(shí)現(xiàn)遍歷方式
這篇文章主要介紹了Vue計(jì)算屬性中reduce方法實(shí)現(xiàn)遍歷方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-03-03
vue.js頁(yè)面加載執(zhí)行created,mounted的先后順序說(shuō)明
這篇文章主要介紹了vue.js頁(yè)面加載執(zhí)行created,mounted的先后順序說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-11-11
Vue $attrs & inheritAttr實(shí)現(xiàn)button禁用效果案例
這篇文章主要介紹了Vue $attrs & inheritAttr實(shí)現(xiàn)button禁用效果案例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-12-12
如何在vite初始化項(xiàng)目中安裝scss以及scss的使用
今天想要給vite項(xiàng)目,添加全局的scss變量文件引用,這樣我們?cè)谑褂胹css變量和函數(shù)的時(shí)候就不需要每個(gè)組件都取引用了,下面這篇文章主要給大家介紹了關(guān)于如何在vite初始化項(xiàng)目中安裝scss以及scss使用的相關(guān)資料,需要的朋友可以參考下2022-10-10
基于Vue2實(shí)現(xiàn)簡(jiǎn)易的省市區(qū)縣三級(jí)聯(lián)動(dòng)組件效果
這是一個(gè)基于Vue2的簡(jiǎn)易省市區(qū)縣三級(jí)聯(lián)動(dòng)組件,可以控制只顯示省級(jí)或只顯示省市兩級(jí),可設(shè)置默認(rèn)值等。提供原始省市縣代碼和名稱數(shù)據(jù),適用于各種有關(guān)城市區(qū)縣的應(yīng)用。需要的朋友可以參考下2018-11-11
vue3父組件異步props傳值子組件接收不到值問(wèn)題解決辦法
這篇文章主要給大家介紹了關(guān)于vue3父組件異步props傳值子組件接收不到值問(wèn)題的解決辦法,需要的朋友可以參考下2024-01-01

