import { BrowserWindow, ipcMain } from 'electron'; import path from "path"; export function printUtils(data) { return new Promise(async (resolvePrint, rejectPrint) => { let subMainWindow = new BrowserWindow({ show: false, webPreferences: { nodeIntegration: true, // For electron >= 4.0.0 contextIsolation: false, webSecurity: false, enableRemoteModule: true } }); function renderPrintDocument(window, data) { return new Promise(async (resolve, reject) => { ipcMain.on('load-ok', (event, res) => { //在这里可以添加打印的判断条件等...... setTimeout(() => { resolve({ message: 'page-rendered', ...res }); }, 500) }) }) } // If the subMainWindow is closed, reset the `subMainWindow` var to null subMainWindow.on('closed', () => { subMainWindow = null; }); // 加载打印的html文件 subMainWindow.loadFile(path.resolve(__dirname, "./public/print.html")); subMainWindow.webContents.on('did-finish-load', async (res) => { let data = [] return renderPrintDocument(subMainWindow, data) .then(async (result) => { // let width = Math.ceil((result.width) * 264.5833); let height = Math.ceil((result.height + 60) * 264.5833); console.info('height', result, height); subMainWindow.webContents.print({ silent: true, margins: { marginType: 'none' }, printBackground: false, deviceName: options.printerName, copies: 1, }, (success) => { if (success) { resolvePrint({ type: 'success' }) } subMainWindow.close(); }) }) .catch(err => console.warn(33, err)) }) }) }