import { BrowserWindow } from 'electron'; /** * 生成 PDF 的服务 * @param htmlContent 完整的 HTML 字符串 * @returns PDF 文件的二进制数据 */ export async function generatePdf(htmlContent: string): Promise { const printWin = new BrowserWindow({ show: false, webPreferences: { nodeIntegration: false, contextIsolation: true, sandbox: false, // 与 main.ts 保持一致,确保脚本执行权限 } }); try { await printWin.loadURL(`data:text/html;charset=utf-8,${encodeURIComponent(htmlContent)}`); // 等待资源加载完成 (由 generatePrintHtml 注入的脚本控制) await printWin.webContents.executeJavaScript(` new Promise(resolve => { const check = () => { if (window.__PRINT_READY__) { resolve(); } else { setTimeout(check, 100); } } check(); }) `); const pdfData = await printWin.webContents.printToPDF({ printBackground: true, pageSize: 'A4', margins: { top: 0, bottom: 0, left: 0, right: 0 } }); return pdfData; } finally { // 确保窗口被关闭,防止内存泄漏 printWin.close(); } }