本地浏览器打印是最轻量、兼容性最好且能保留CSS样式的方式,直接按Ctrl+P/Cmd+P选“另存为PDF”,勾选“背景图形”并设边距为“无”即可;window.print()无法自动导出,批量处理需服务端方案。
直接用浏览器打印功能就能生成 PDF,无需安装软件或调用 API,90% 的静态 HTML 页面都适用。
这是最轻量、兼容性最好、且能保留 CSS 样式(包括 @media print)的方式。关键不是“转”,而是“模拟打印输出”。
Ctrl+P(Windows)或 Cmd+P(macOS)另存为 PDF(Windows)或 保存为 PDF(macOS)背景图形(否则 background-color 和 background-image 会丢失)边距 是否设为“无”,避免内容被截断window.print() 不能直接导出 PDF它只触发浏览器打印对话框,无法跳过 UI 自动保存。想自动化必须借助服务端或桌面工具,前端纯 JS 无权写文件系统。
window.print() 是用户主动行为,受浏览器策略限制,不可静默导出iframe + contentWindow.print() 同样会弹窗,不解决自动保存问题多数免费在线转换网站会把 HTML 发送到他们的服务器渲染,敏感数据可能泄露;且它们通常不支持本地字体、CSS 变量、@supports 或现代 Flex/Grid 布局。
font-face 引用的本地字体路径(url('./fonts/xxx.woff2'))无法加载./images/logo.png)在远程服务端 404position: sticky、aspect-ratio 等新特性,PDF 中错位或塌陷Puppeteer Serverless(如 Vercel + Puppeteer),但已超出“速成”范畴const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto('file:///path/to/your/page.html', { waitUntil: 'networkidle0' });
await page.pdf({ path: 'output.pdf', format: 'A4', printBackground: true });
await browser.close();
})();
真正需要“快速”又“可靠”的场景,就别绕远路——本地浏览器打印是唯一同时满足零配置、保样式、可预览、无隐私风险的操作。复杂布局或动态内容才值得投入 Puppeteer
