如何在 Node.js 中创建 PDF 文件

This article was translated from English: Does it need improvement?
Translated
View the article in English

在Node.js中以编程方式创建PDF文件需要一个能够精确处理HTML渲染的库,支持现代CSS,并且能够与Node的异步模式无缝集成。 IronPDF使用基于Chromium的渲染引擎将HTML内容转换为与Chrome的打印输出匹配的PDF,支持完整的CSS、内联JavaScript和开箱即用的响应布局。

本指南涵盖了完整的工作流程:安装、从HTML字符串、HTML文件和URL生成PDF、配置输出选项,并应用企业特性如页眉、页脚、数字签名和加密。

快速入门:在Node.js中创建PDF

  1. 通过 npm 安装 IronPDF:npm install @ironsoftware/ironpdf
  2. @ironsoftware/ironpdf 导入 PdfDocument
  3. 调用 PdfDocument.fromHtml() 并传入您的 HTML 内容
  4. 调用 .saveAs() 将 PDF 文件写入磁盘
//:path=/static-assets/pdf/content-code-examples/tutorials/nodejs-create-pdf/quickstart.js
import { PdfDocument } from "@ironsoftware/ironpdf";

const pdf = await PdfDocument.fromHtml("<h1>Hello, PDF!</h1><p>Generated with IronPDF.</p>");
await pdf.saveAs("output.pdf");

在生产环境中运行前,请先为您的平台配置 IronPdfEngine。 请参阅IronPdfEngine设置指南以获取Windows、Linux、macOS和Docker的说明。

如何安装 IronPDF for Node.js?

使用 npm 安装 @ironsoftware/ironpdf 包。 该包兼容Node.js 12.0或更高版本,并支持ESM和CommonJS模块格式。

//:path=/static-assets/pdf/content-code-examples/tutorials/nodejs-create-pdf/install.sh
npm install @ironsoftware/ironpdf
//:path=/static-assets/pdf/content-code-examples/tutorials/nodejs-create-pdf/install.sh
npm install @ironsoftware/ironpdf
SHELL

IronPDF for Node.js依赖于IronPDF引擎二进制文件,该文件负责底层的基于Chromium的渲染。 引擎在首次运行时自动下载,但您可以预先安装特定平台的包以避免运行时下载。 这在受限网络环境或基于Docker的CI管道中非常有用:

IronPDF引擎平台包用于在离线或受限环境中进行预先安装
平台
Windows x64@ironsoftware/IronPDF-engine-Windows-x64
Linux x64@ironsoftware/IronPDF-engine-linux-x64
macOS x64@ironsoftware/IronPDF-engine-macos-x64
macOS ARM@ironsoftware/IronPDF-engine-macos-arm64

请注意有效的许可证密钥可以去除生成的PDF中的水印。 请在首次调用 PdfDocument 之前,通过设置 IronPdfGlobalConfig.setConfig({ licenseKey: "YOUR-KEY" }) 来应用此设置。 请按照完整的许可证密钥设置说明。)]

IronPDF 的系统要求是什么?

IronPDF for Node.js在Windows、Linux、macOS和Docker环境下运行于Node.js 12.0或更高版本。 该库支持x64和ARM64架构,使其适用于本地开发和容器化部署。 对于云环境,IronPDF还支持连接到远程IronPDF引擎,而不是在本地运行引擎。


如何在Node.js中从HTML创建PDF?

使用 PdfDocument.fromHtml() 从 HTML 字符串生成 PDF。 该方法支持任何有效的 HTML 代码,包括内联的 <style> 代码块、通过 CDN 加载的外部字体,以及 CSS Grid 或 Flexbox 等布局系统。 Chromium渲染器在生成PDF之前解析所有资源。

//:path=/static-assets/pdf/content-code-examples/tutorials/nodejs-create-pdf/html-string-to-pdf.js
import { PdfDocument } from "@ironsoftware/ironpdf";

const htmlContent = `
  <!DOCTYPE html>
  <html>
  <head>
    <style>
      body { font-family: Arial, sans-serif; margin: 0; padding: 0; }
      .header { background: #2b4c8c; color: white; padding: 24px 32px; }
      .header h1 { margin: 0; font-size: 22px; }
      .body { padding: 32px; }
      table { width: 100%; border-collapse: collapse; margin-top: 16px; }
      th { background: #f0f4fb; text-align: left; padding: 8px 12px; }
      td { padding: 8px 12px; border-bottom: 1px solid #e0e0e0; }
    </style>
  </head>
  <body>
    <div class="header"><h1>Invoice #INV-2025-0042</h1></div>
    <div class="body">
      <p>Date: ${new Date().toLocaleDateString()}</p>
      <table>
        <tr><th>Item</th><th>Qty</th><th>Unit Price</th><th>Total</th></tr>
        <tr><td>IronPDF Enterprise License</td><td>1</td><td>$499.00</td><td>$499.00</td></tr>
        <tr><td>Priority Support (1 year)</td><td>1</td><td>$199.00</td><td>$199.00</td></tr>
      </table>
      <p style="text-align:right; margin-top:16px;"><strong>Total: $698.00</strong></p>
    </div>
  </body>
  </html>`;

// Generate the PDF from the HTML string
const pdf = await PdfDocument.fromHtml(htmlContent);
await pdf.saveAs("invoice.pdf");

PdfDocument.fromHtml() 返回一个 PdfDocument 实例。 调用 saveAs() 并传入目标输出路径以写入文件。该方法为异步操作,因此请使用 await 或链式调用 .then() 处理程序。 Chromium引擎在捕获输出之前处理字体加载、外部样式表和资产解析。 更多模式,请参阅HTML字符串到PDF示例

如何从HTML文件创建PDF?

使用 PdfDocument.fromFile() 从磁盘加载现有的 .html 文件。 这种方法适用于模板化文档,其中HTML与应用程序逻辑分开维护。

//:path=/static-assets/pdf/content-code-examples/tutorials/nodejs-create-pdf/html-file-to-pdf.js
import { PdfDocument } from "@ironsoftware/ironpdf";

// Load an HTML file and render it as a PDF
const pdf = await PdfDocument.fromFile("./templates/report-template.html");
await pdf.saveAs("./output/report.pdf");

渲染器从HTML文件的目录解析相对资产路径,因此本地CSS和图像引用可以在没有额外配置的情况下工作。 有关其他选项,包括如何覆盖资产解析的基本URL,请参阅HTML文件到PDF示例

如何从URL生成PDF?

使用 PdfDocument.fromUrl() 将实时网页渲染为 PDF。 渲染器加载页面作为完整的浏览器会话,执行JavaScript,应用CSS,等待动态内容后再捕获输出。

//:path=/static-assets/pdf/content-code-examples/tutorials/nodejs-create-pdf/url-to-pdf.js
import { PdfDocument } from "@ironsoftware/ironpdf";

// Render a live webpage to PDF
const pdf = await PdfDocument.fromUrl("https://ironpdf.com/nodejs/");
await pdf.saveAs("ironpdf-homepage.pdf");

对于通过 JavaScript 异步加载内容的页面,请配合使用 renderDelay 选项(单位为毫秒),以便在抓取前预留额外时间。 URL到PDF示例展示了延迟配置和身份验证头。


如何配置PDF输出设置?

将配置对象作为第二个参数传递给 PdfDocument.fromFile()PdfDocument.fromUrl()。 配置对象接受纸张大小、页边距、方向和渲染选项。

//:path=/static-assets/pdf/content-code-examples/tutorials/nodejs-create-pdf/pdf-settings.js
import { PdfDocument, PdfPaperSize } from "@ironsoftware/ironpdf";

const config = {
    paperSize: PdfPaperSize.A4,
    marginTop: 25,
    marginBottom: 25,
    marginLeft: 20,
    marginRight: 20,
    landscape: false,
    printBackground: true,
};

const pdf = await PdfDocument.fromHtml("<h1>Configured PDF</h1>", config);
await pdf.saveAs("configured-output.pdf");

关键配置选项包括:

  • paperSize:支持 PdfPaperSize 枚举值(A4、Letter、Legal 及自定义尺寸
  • landscape:设置 true 以横向页面布局显示
  • printBackground:包含 CSS 背景颜色和图片
  • marginTop/Bottom/Left/Right:页面边距(单位:毫米)
  • renderDelay:针对 JavaScript 密集型页面,捕获前需等待的毫秒数

如何向PDF添加页眉和页脚?

通过在配置对象中提供 htmlHeaderhtmlFooter 属性来添加页眉和页脚。 两者都接受完整的HTML字符串,从而实现带有页码、日期和动态文本的样式内容。

//:path=/static-assets/pdf/content-code-examples/tutorials/nodejs-create-pdf/headers-footers.js
import { PdfDocument } from "@ironsoftware/ironpdf";

const config = {
    htmlHeader: {
        htmlFragment: "<div style='text-align:center; font-size:12px; color:#666;'>Quarterly Report - Confidential</div>",
        dividerLine: true,
    },
    htmlFooter: {
        htmlFragment: "<div style='text-align:right; font-size:10px;'>Page {page} of {total-pages}</div>",
        dividerLine: true,
    },
};

const pdf = await PdfDocument.fromHtml("<h1>Q3 Financial Summary</h1><p>See attached tables.</p>", config);
await pdf.saveAs("report-with-headers.pdf");

在页脚 HTML 中使用 {page}{total-pages} 标记; IronPDF在渲染时替换正确的值。有关更多页眉和页脚模式,包括HTML页眉和页脚以及高级页眉技术,请参见链接示例。


如何向PDF添加安全性和元数据?

使用 PdfDocument 安全方法对生成的 PDF 应用密码保护和加密。 该库支持所有者和用户密码,提供打印、复制和编辑的细粒度权限控制。

//:path=/static-assets/pdf/content-code-examples/tutorials/nodejs-create-pdf/security.js
import { PdfDocument } from "@ironsoftware/ironpdf";

const pdf = await PdfDocument.fromHtml("<h1>Confidential Document</h1>");

// Apply password protection with granular permissions
await pdf.securePdf({
    userPassword: "view-password",
    ownerPassword: "admin-password",
    allowUserAnnotations: false,
    allowUserPrinting: true,
    allowUserCopyPasteContent: false,
});

await pdf.saveAs("secured-document.pdf");

加密和解密在应用密码时默认使用AES 256位加密。 对于文档认证工作流,IronPDF还支持使用X.509证书的数字签名

提示对于需要符合长期归档要求的文档,请使用 PdfDocument.fromHtml() 并附上 PDF/A 转换方法。 IronPDF支持PDF/A合规PDF/UA可访问性标准。)]


如何合并和操作现有的PDF?

PdfDocument 提供了用于合并、拆分和修改现有 PDF 文件的方法。 加载包含 PdfDocument.fromFile() 的现有 PDF 文件,并使用相关操作方法添加或删除页面、添加水印或替换文本。

//:path=/static-assets/pdf/content-code-examples/tutorials/nodejs-create-pdf/merge-pdfs.js
import { PdfDocument } from "@ironsoftware/ironpdf";

// Merge two PDF files into one
const merged = await PdfDocument.mergePdf([
    await PdfDocument.fromFile("./report-part1.pdf"),
    await PdfDocument.fromFile("./report-part2.pdf"),
]);

await merged.saveAs("./complete-report.pdf");

PdfDocument.mergePdf() 接受一个 PdfDocument 实例数组,并返回一个合并后的文档。 页面顺序遵循数组顺序,因此输出保留输入文件的顺序。

其他常见的操作操作:

对于高量使用场景,多线程PDF生成可让您并行处理多个文档。 PDF压缩降低文件存储和传输的大小。


如何为复杂内容(如图表和Angular页面)生成PDF?

IronPDF使用完整的Chromium浏览器会话渲染页面,这意味着生成图表、图形或数据可视化的JavaScript库正确渲染,包括JavaScript图表库。 使用像Angular这样的框架构建的单页应用程序也可以通过Angular到PDF示例进行干净转换。

对于包含大量Unicode或多语言输出的文档,IronPDF处理Unicode和国际字符集而无需额外配置。 Google Fonts集成示例展示了如何在渲染的HTML中加载网页字体,以在输出PDF中保持一致的排版。

请注意IronPDF的Chromium渲染器在捕获PDF之前执行JavaScript。 如果您的图表库或单页应用(SPA)在 DOM 加载后需要额外时间来渲染数据,请将 renderDelay 设置为毫秒数,以便页面有足够时间完成渲染。)}]


在Node.js中生成PDF的下一步是什么?

本指南涵盖了IronPDF的核心工作流程:安装库,从HTML字符串、文件和URL生成PDF,配置输出设置,添加页眉和页脚,应用安全策略以及操作现有PDF。

如需继续,请尝试完整的 HTML 转 PDF/A 教程,以深入了解渲染选项;或浏览 API 参考文档,查看 PdfDocument 方法和配置属性的完整列表。

开始您的免费试用以生成无水印的PDF,或查看许可选项以进行生产部署。

常见问题解答

在 Node.js 中创建 PDF 文件的最简单方法是什么?

通过npm install @ironsoftware/ironpdf安装IronPDF,然后使用您的HTML字符串调用PdfDocument.fromHtml(),并使用saveAs()保存结果。该库自动处理所有渲染。

如何安装 IronPDF for Node.js?

在项目目录中运行npm install @ironsoftware/ironpdf。IronPDF引擎二进制文件在首次使用时会自动下载。对于离线或CI环境,请单独安装特定平台的引擎包,例如@ironsoftware/ironpdf-engine-linux-x64

我能否在将 HTML 转换为 PDF 的同时保留 CSS 样式和格式?

是的。IronPDF使用基于Chromium的渲染引擎,将所有CSS样式、外部字体和JavaScript执行保留在HTML到PDF转换中。输出符合Chrome的打印预览行为。

除了基本的HTML转换,IronPDF还提供了哪些PDF功能?

IronPDF支持数字签名、AES 256位加密、具有细粒度权限的密码保护、自定义页眉和页脚带页码标记、PDF合并、页面删除、HTML加印、文本提取、PDF/A合规性和多线程生成。

如何从磁盘上的HTML文件创建PDF?

使用PdfDocument.fromFile('./path/to/template.html')。渲染器将解析HTML文件目录中的相对资源路径,因此无需额外配置,本地CSS和图像引用可以正常工作。

我可以使用IronPDF从现有PDF文件中提取文本吗?

可以。使用PdfDocument.fromFile()加载现有PDF,并使用文本提取方法读取任意页面的内容。IronPDF支持创建新PDF文件和处理现有文档。

IronPDF在渲染HTML时是否支持JavaScript执行?

是的。Chromium渲染器捕获PDF之前会执行JavaScript。对于异步加载内容的页面,请在毫秒中设置renderDelay选项,为页面捕获前提供额外时间。

Darrius Serrant
全栈软件工程师(WebOps)

Darrius Serrant 拥有迈阿密大学的计算机科学学士学位,目前在 Iron Software 担任全栈 WebOps 市场工程师。从小就被编码吸引,他认为计算机既神秘又易于接触,使其成为创意和问题解决的理想媒介。

在 Iron Software,Darrius 喜欢创造新事物,并简化复杂概念以使其更易理解。作为我们常驻的开发者之一,他还自愿教授学生,与下一代分享他的专业知识。

对于 Darrius 来说,他的工作令人满意,因为它被重视并产生真正的影响。

准备开始了吗?
版本: 2026.5 just released
Still Scrolling Icon

还在滚动吗?

想快速获得证据?
运行示例看着你的HTML代码变成PDF文件。