加载完成之前,您已经打印了此页面。
我的方法:1.创建一个主窗口和一个(不可见的)工作窗口
import {app, BrowserWindow, Menu, ipcMain, shell} from "electron";const os = require("os");const fs = require("fs");const path = require("path");let mainWindow: Electron.BrowserWindow = undefined;let workerWindow: Electron.BrowserWindow = undefined;async function createWindow() { mainWindow = new BrowserWindow(); mainWindow.loadURL("file://" + __dirname + "/index.html"); mainWindow.webContents.openDevTools(); mainWindow.on("closed", () => { // close worker windows later mainWindow = undefined; }); workerWindow = new BrowserWindow(); workerWindow.loadURL("file://" + __dirname + "/worker.html"); // workerWindow.hide(); workerWindow.webContents.openDevTools(); workerWindow.on("closed", () => { workerWindow = undefined; });}// retransmit it to workerWindowipcMain.on("printPDF", (event: any, content: any) => { console.log(content); workerWindow.webContents.send("printPDF", content);});// when worker window is readyipcMain.on("readyToPrintPDF", (event) => { const pdfPath = path.join(os.tmpdir(), 'print.pdf'); // Use default printing options workerWindow.webContents.printToPDF({}).then((data) { fs.writeFile(pdfPath, data, function (error) { if (error) { throw error } shell.openItem(pdfPath) event.sender.send('wrote-pdf', pdfPath) }) }).catch((error) => { throw error; })});2,mainWindow.html
<head></head><body> <button id="btn"> Save </button> <script> const ipcRenderer = require("electron").ipcRenderer; // cannot send message to other windows directly https://github.com/electron/electron/issues/991 function sendCommandToWorker(content) { ipcRenderer.send("printPDF", content); } document.getElementById("btn").addEventListener("click", () => { // send whatever you like sendCommandToWorker("<h1> hello </h1>"); }); </script></body>3,worker.html
<head> </head><body> <script> const ipcRenderer = require("electron").ipcRenderer; ipcRenderer.on("printPDF", (event, content) => { document.body.innerHTML = content; ipcRenderer.send("readyToPrintPDF"); }); </script></body>


