如何将 HTML 转换为 PDF

· 5 分钟阅读

从HTML创建PDF对于生成发票、报告、信件、证书以及任何您想用CSS控制布局但以PDF分发的文档都很有用。基于浏览器的HTML到PDF转换器使用您自己浏览器的渲染引擎,所以结果与您在实时预览中看到的相匹配,无需服务器上传。

如何将HTML转换为PDF

  1. 粘贴您的HTML:在编辑器中输入您的HTML代码,包括任何内联CSS或<style>标签。代码可以包括带标题、表格、图像和样式的完整页面结构。
  2. 预览输出:实时预览显示您键入时PDF的确切外观。调整您的HTML和CSS,直到预览与您想要的匹配。
  3. 生成并下载:点击生成按钮在浏览器中创建PDF,然后立即下载。

您可以创建什么

HTML到PDF转换的简史

在早期网络(1995-2005)中,从HTML创建PDF需要服务器端工具:Apache FOP(1999)、PrinceXML(2002)或wkhtmltopdf(2010),所有这些都在后端服务器上运行,需要上传内容。输出质量差异巨大,因为每个渲染引擎实现CSS的方式不同。

2014年,随着jsPDF和html2pdf.js等使用HTML5 Canvas对内容进行光栅化的库,浏览器端转换变得实用。对于简单文档,结果还不错,但在复杂布局和可选文本上失败。

突破是Chromium的无头模式(2017),它公开了Chrome用于普通页面的相同渲染引擎。Puppeteer(Node.js,2017)使开发人员可以访问服务器端Chromium PDF生成。基于浏览器的转换器现在使用带有@page CSS规则的Print API(window.print()),这与Chromium的无头模式使用的路径相同,在预览和PDF之间提供相同的输出。

2026年,基于浏览器的HTML到PDF对于大多数文档来说是正确的选择。服务器端渲染只对非常大的文档(100+页)、自动批处理或当您需要合并来自多个来源的PDF时才有意义。

PDF输出的样式提示

使用内联样式或<style>标签:不加载外部样式表。将您所有的CSS要么内联放在元素上,要么放在HTML的<style>块中。

设置页面边距:使用CSS @page { margin: 20mm; }来控制PDF中内容周围的空白。

使用适合打印的单位:mmcmpt在PDF中比pxrem更可预测。使用mm表示需要匹配现实世界尺寸的边距和间距。

避免视口相关的布局:百分比宽度和固定像素宽度效果最好。视口单位(vwvh)在PDF输出中可能不会按预期表现。

控制分页符:使用page-break-beforepage-break-afterpage-break-inside(或较新的break-beforebreak-afterbreak-inside)来控制新页面的开始位置。break-inside: avoid防止单个块跨页面分割。

使用@media print进行仅PDF规则:@media print { ... }中的任何CSS仅在生成PDF时应用,不在预览中。对于隐藏仅屏幕元素(如导航栏)很有用。

CSS打印模式示例

@page {
  size: A4;
  margin: 20mm 15mm;
}

@media print {
  .no-print { display: none; }
  h1 { page-break-before: always; }
  table { page-break-inside: avoid; }
  a { color: black; text-decoration: none; }
}

body {
  font-family: 'Helvetica', sans-serif;
  font-size: 11pt;
  line-height: 1.4;
  color: #1a1a1a;
}

页面尺寸

常见的@page size值:

添加landscape表示横向方向:size: A4 landscape

常见陷阱

需要考虑的替代方案

对于日常商业文档(发票、报告、证书),浏览器HTML到PDF转换器更快且同样精致。

提示

隐私和机密文件

HTML到PDF转换器完全在您的浏览器中运行。您粘贴的HTML、嵌入的图像和生成的PDF都保留在您的设备上。没有任何东西被上传到服务器、记录或与任何人共享。

这很重要,因为HTML到PDF的输入通常是敏感的:带有客户名称的发票数据、带有定价条款的合同草案、带有财务数字的内部报告、带有个人信息的证书。云HTML到PDF服务按设计将您的HTML发送到他们的服务器,在那里生成PDF,然后发送回来。一些保留输入用于「改进」或分析。对于包含机密信息的文档,基于浏览器的转换器是更安全的选择。

基于浏览器的转换在页面加载后也可以离线工作,并且足够快,可以在您迭代HTML时即时反馈。

常见问题

PDF 会保留我的 CSS 样式吗?

会。转换器会使用您应用的 CSS 渲染 HTML,包括颜色、字体、边距和版式。PDF 看起来像渲染后的网页,而非原始代码。

可以在 PDF 中包含图片吗?

可以。使用 base64(data URI)图片可获得最可靠的结果。外部图片 URL 若可访问且 CORS 兼容也可能有效。

我的 HTML 会发送到服务器吗?

不会。转换完全在您的浏览器中进行。您的代码和生成的 PDF 从不离开您的设备。

支持哪些 CSS 特性?

支持标准 CSS,包括版式、颜色、字体、背景、边框和表格。CSS Grid 的高级功能、复杂动画和某些 Flexbox 边缘情况可能受限。