HTML转PDF:从入门到精通的完整指南

为什么需要将HTML转为PDF?

HTML文档在浏览器中展示灵活,但跨设备、跨平台时可能出现排版错乱。PDF则能保持固定布局,适合打印、存档和分享。无论是网页内容、报表、简历还是电子书,将HTML转为PDF都是常见需求。

HTML转PDF的常用方法

1. 浏览器原生打印(最简单)

在浏览器中打开HTML页面,按 Ctrl+P(Mac: Cmd+P),选择“另存为PDF”即可。优点:无需安装额外软件。缺点:无法批量处理,样式可能因浏览器而异。

2. 命令行工具:wkhtmltopdf

wkhtmltopdf 基于WebKit引擎,可将HTML文件或URL转为PDF。使用示例:wkhtmltopdf input.html output.pdf。支持自定义页眉页脚、页面大小等。适合服务器端批量转换。

3. 无头浏览器:Puppeteer(Node.js)

Puppeteer 是一个Node.js库,控制Chrome无头浏览器。可以精确渲染HTML转PDF,支持CSS、JavaScript。示例代码:

const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto('https://example.com');
await page.pdf({ path: 'output.pdf', format: 'A4' });
await browser.close();
})();

4. Python库:pdfkit / weasyprint

pdfkit是wkhtmltopdf的Python封装,使用方法:pdfkit.from_file('input.html', 'output.pdf')。weasyprint则基于CSS渲染,更轻量。

5. 在线转换工具(无需安装)

如Smallpdf、ILovePDF等网站,上传HTML文件即可转换。注意隐私安全,敏感内容避免使用。

如何选择合适的方式?

  • 临时单次需求:用浏览器打印或在线工具。
  • 开发项目集成:选用Puppeteer或wkhtmltopdf。
  • 高性能批量处理:考虑Puppeteer或Python方案。
  • 样式复杂、含JavaScript:推荐Puppeteer(完整渲染)。

常见问题与技巧

  • 分页控制:使用CSS page-break-before/after 控制分页。
  • 页眉页脚:wkhtmltopdf和Puppeteer均支持自定义。
  • 中文字体:确保操作系统或PDF中嵌入中文字体。
  • 性能优化:避免过多网络请求,可将资源转为本地。

掌握这些方法,你就能轻松应对HTML转PDF的各种场景。