如何在 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 檔案及網址產生 PDF、設定輸出選項,以及應用頁首、頁尾、數位簽章和加密等 Enterprise 功能。

快速入門:在 Node.js 中建立 PDF 檔案

  1. 透過 npm 安裝 IronPDF:npm install @ironsoftware/ironpdf
  2. @ironsoftware/ironpdf 匯入 PdfDocument
  3. 請將您的 HTML 內容傳入 PdfDocument.fromHtml()
  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 的操作說明。

如何安裝適用於 Node.js 的 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 Engine 二進位檔,該二進位檔負責處理底層基於 Chromium 的渲染工作。 引擎會在首次執行時自動下載,但您可預先安裝特定平台的套件,以避免執行時才進行下載。 這在受限的網路環境或基於 Docker 的 CI 管道中非常實用:

IronPDF Engine 平台套件,適用於離線或受限環境的預先安裝
平台套件
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 Engine,無需在本地執行引擎。


如何在 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 和圖片引用無需額外配置即可正常運作。 請參閱 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 檔案套用密碼保護與加密。 此函式庫同時支援擁有者密碼與使用者密碼,並針對PRINT、複製及編輯功能提供細粒度的權限控制。

//: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()` 儲存結果。此函式庫會自動處理所有渲染作業。

如何安裝適用於 Node.js 的 IronPDF for Node.js?

請在您的專案目錄中執行 `npm install @ironsoftware/ironpdf`。IronPDF Engine 二進位檔將在首次使用時自動下載。若需在離線或 CI 環境中使用,請另行安裝特定平台的引擎套件,例如 `@ironsoftware/ironpdf-engine-linux-x64`。

能否在保留 CSS 樣式與格式的前提下,將 HTML 轉換為 PDF?

是的。IronPDF 採用基於 Chromium 的渲染引擎,在將 HTML 轉換為 PDF 時,能完整保留所有 CSS 樣式、外部字型及 JavaScript 執行效果。輸出結果與 Chrome 的列印預覽行為一致。

除了基本的 HTML 轉換外,還有哪些 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 選項設定為毫秒數,以在擷取前給予頁面額外時間。

Curtis Chau
技術撰稿人

Curtis Chau 擁有卡爾頓大學(Carleton University)的電腦科學學士學位,專精於前端開發,並精通 Node.js、TypeScript、JavaScript 及 React。他熱衷於打造直觀且美觀的用戶介面,喜歡運用現代框架,並創建結構完善、視覺上吸引人的手冊。

除了開發工作之外,Curtis 對物聯網(IoT)抱有濃厚興趣,致力於探索整合硬體與軟體的創新方法。閒暇時,他喜歡玩遊戲和開發 Discord 機器人,將對科技的熱愛與創意相結合。

準備開始了嗎?
版本: 2026.5 just released
Still Scrolling Icon

還在捲動嗎?

想要快速證明?
執行範例 觀看您的 HTML 變成 PDF。