如何使用 Node.js 将 HTML 转换为 PDF?

2025年5月2日 | 阅读 4 分钟

在本文中,我们将讨论如何在 Node.js 中将 HTML 转换为 PDF。

引言

Node.js 作为 JavaScript 的运行时环境,因其能够以最少的资源生成健壮的应用程序而迅速声名鹊起。开发者面临的最简单且最常见的问题是将 HTML 内容转换为 PDF 文件。此功能对于发票、报告、证书或任何需要为打印格式化的文档都是必需的。在这篇文章中,我们将使用 puppeteer 模块在 Node.js 中将 HTML 转换为 PDF。

语法

参数

在使用 Puppeteer 将 HTML 转换为 PDF 时,关键参数包括:

  • Path(路径):它是一个控制参数,用于定义结果 PDF 文件的文件名和目录。
  • 示例: 'output.pdf'
  • Format(格式):它指定 PDF 页面的大小。
  • 常用值:'A4', 'Letter', 'Legal'。
  • Margin(边距):它提供了 PDF 文档布局的规范。它包含所有边距的定义,例如 { top: '1cm', right: '1cm', bottom: '1cm', left: '1cm' }。
  • printBackground(打印背景):定义转换后的 PDF 是否包含背景图形。
  • 示例: true 或 false。
  • Landscape(横向):它描述了 PDF 的方向。
  • 示例: True 表示横向,False 表示纵向(默认)。
  • Scale(缩放):它改变 PDF 中内容的尺寸。
  • 示例: 1(默认)表示 100% 缩放。

示例

让我们举个例子来说明如何在 Node.js 中将 HTML 转换为 PDF。

输出

PDF generated successfully: example.pdf

优点

  • 自动化工作流:它可以轻松地集成到更复杂的系统中,用于填写和转换 HTML 模板为 PDF 文档,例如发票或报告。
  • 自定义样式:如果选择的输出格式是 PDF,可以使用 CSS 来更丰富地格式化输出。
  • 可伸缩性:由于 Node.js 是一个异步框架,因此可以高效地处理多个 PDF 生成请求。
  • 跨平台:js 和 Puppeteer 完全兼容不同的操作系统。
  • 精确性:像 Puppeteer 这样的浏览器使用无头浏览器渲染 HTML,因此该库能跟上当前的版本。

用例

  • 发票生成:它可以自动生成电子商业账单。
  • 报告生成:它可以从网页上显示的数据中提取更多信息,用于生成报告。
  • 证书和徽章:它可以为里程碑(例如在线课程或在线活动)创建和颁发证书。
  • 导出功能:它允许用户以 PDF 格式保存网页内容,例如文章或表单。
  • 法律文件:它可以自动创建合伙协议、保密协议以及其他法律协议。

最佳实践

  • 优化 HTML 和 CSS:尽量不要使 HTML 结构及其 CSS 规则过于复杂,以尽量减少遇到渲染问题的可能性。
  • 使用绝对 URL:确保所有图像和其他资源(如字体)都使用绝对链接,因为有时它们在编译后的 PDF 中可能不可用。
  • 跨设备测试:建议在运行 PDF 之前,在多个设备和不同浏览器上测试 HTML 的外观和感觉。
  • 调整边距和缩放:可以更改 PDF 的参数以适应不同的封面和内容以及尺寸。
  • 错误处理:它确保有有效的方法来管理和报告与创建 PDF 相关的任何错误发生。

挑战

  • 复杂布局:调整多功能元素和构建复杂布局也经常出现一些缺点,例如某些部分被挤压或未正确显示。
  • 资源加载:如果文件中的路径或网络管理不当,图像、字体或样式表可能无法从外部下载。
  • 大文件:创建包含大量内容或高质量图像的大型 PDF 需要时间和大量资源。
  • 无头浏览器设置:使用无头浏览器时,Puppeteer 需要更多配置,尤其是在资源有限的生产服务器上运行时。

结论

总之,HTML 到 PDF 的 Node.js 转换是 Node.js 中管理文档生成灵活性的最有效方法之一。借助 Puppeteer 等工具,可以轻松支持现代 Web 技术,并且实现这一目标相当直观简单。通过学习如何将 HTML 转换为 PDF,我们可以为我们的 Node.js 项目添加报告生成、发票、内容导出等功能,使其成为一项非常有用的技能。无论我们是在开发在线商店还是商业智能软件,了解此功能都将有助于改进我们的应用程序。