Files
XCDesktop/electron/services/pdfGenerator.ts
2026-03-08 01:34:54 +08:00

47 lines
1.2 KiB
TypeScript

import { BrowserWindow } from 'electron';
/**
* 生成 PDF 的服务
* @param htmlContent 完整的 HTML 字符串
* @returns PDF 文件的二进制数据
*/
export async function generatePdf(htmlContent: string): Promise<Uint8Array> {
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();
}
}