diff --git a/dist-electron/main.js b/dist-electron/main.js index 04c71b9..bc9ec83 100644 --- a/dist-electron/main.js +++ b/dist-electron/main.js @@ -1,5 +1,53 @@ "use strict"; const electron = require("electron"); +const path = require("path"); +function printUtils(data) { + return new Promise(async (resolvePrint, rejectPrint) => { + let subMainWindow = new electron.BrowserWindow({ + show: false, + webPreferences: { + nodeIntegration: true, + // For electron >= 4.0.0 + contextIsolation: false, + webSecurity: false, + enableRemoteModule: true + } + }); + function renderPrintDocument(window, data2) { + return new Promise(async (resolve, reject) => { + electron.ipcMain.on("load-ok", (event, res) => { + setTimeout(() => { + resolve({ message: "page-rendered", ...res }); + }, 500); + }); + }); + } + subMainWindow.on("closed", () => { + subMainWindow = null; + }); + subMainWindow.loadFile(path.resolve(__dirname, "./public/print.html")); + subMainWindow.webContents.on("did-finish-load", async (res) => { + return renderPrintDocument().then(async (result) => { + 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)); + }); + }); +} electron.app.whenReady().then(() => { const win = new electron.BrowserWindow({ title: "Main window", @@ -22,13 +70,19 @@ electron.app.whenReady().then(() => { } win.webContents.openDevTools(); electron.app.on("activate", () => { - if (electron.BrowserWindow.getAllWindows().length === 0) + if (electron.BrowserWindow.getAllWindows().length === 0) { createWindow(); + } }); electron.ipcMain.on("quitHandler", (_, msg) => { - console.log(msg); electron.app.quit(); }); + electron.ipcMain.on("printerInfoSync", async (event, params) => { + console.log("接收到打印消息", params); + const res = await printUtils(); + event.returnValue = res; + console.log("已打印", res); + }); }); electron.app.on("window-all-closed", () => { if (process.platform !== "darwin") diff --git a/electron/main.js b/electron/main.js index daeebae..6f6ddce 100644 --- a/electron/main.js +++ b/electron/main.js @@ -1,4 +1,5 @@ import { app, BrowserWindow, ipcMain } from "electron"; +import { printUtils } from './printUtils' app.whenReady().then(() => { const win = new BrowserWindow({ @@ -27,13 +28,21 @@ app.whenReady().then(() => { app.on("activate", () => { // 在 macOS 系统内, 如果没有已开启的应用窗口 // 点击托盘图标时通常会重新创建一个新窗口 - if (BrowserWindow.getAllWindows().length === 0) createWindow(); + if (BrowserWindow.getAllWindows().length === 0) { + createWindow() + }; }); ipcMain.on("quitHandler", (_, msg) => { - console.log(msg); app.quit(); }); + + ipcMain.on('printerInfoSync', async (event, params) => { + console.log('接收到打印消息', params) + const res = await printUtils(params) + event.returnValue = res + console.log('已打印', res) + }) }); app.on("window-all-closed", () => { diff --git a/electron/printUtils.js b/electron/printUtils.js new file mode 100644 index 0000000..7b0f638 --- /dev/null +++ b/electron/printUtils.js @@ -0,0 +1,63 @@ +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)) + }) + }) +} \ No newline at end of file diff --git a/index.html b/index.html index 433866d..2859b32 100644 --- a/index.html +++ b/index.html @@ -1,10 +1,10 @@ - +
- +