如何在Node.js中填寫PDF表單欄位

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

在Node.js中以程式化填寫PDF表單,使您能夠自動化文件工作流程:從使用資料庫記錄填入申請表,到大規模生成個性化證書。 IronPDF for Node.js 提供了一個直觀的API,用於載入現有的PDF、將值寫入表單欄位,並在您的JavaScript環境中保存完整的文件。

本指南涵蓋了完整工作流程:安裝套件、應用授權金鑰、填寫文字欄位、複選框、下拉選單和單選按鈕、平面化表單欄位以鎖定值,並保存輸出。 所有程式碼範例使用@ironsoftware/ironpdf套件。

快速入門:在Node.js中填寫PDF表單

安裝套件,然後在幾行內載入並填寫表單:

//:path=/static-assets/pdf/content-code-examples/nodejs/how-to/nodejs-fill-pdf-form/install.sh
npm install @ironsoftware/ironpdf
//:path=/static-assets/pdf/content-code-examples/nodejs/how-to/nodejs-fill-pdf-form/install.sh
npm install @ironsoftware/ironpdf
SHELL
:path=/static-assets/pdf/content-code-examples/nodejs/how-to/nodejs-fill-pdf-form/quickstart.js
const { PdfDocument, IronPdfGlobalConfig } = require("@ironsoftware/ironpdf");

IronPdfGlobalConfig.getConfig().licenseKey = "YOUR-LICENSE-KEY-HERE";

(async () => {
    const pdf = await PdfDocument.fromFile("./form.pdf");
    await pdf.setFormFieldValue("firstName", "Jane");
    await pdf.setFormFieldValue("email", "jane@example.com");
    await pdf.saveAs("./filled-form.pdf");
})();
JAVASCRIPT

在Node.js中填寫PDF表單需要哪些先決條件?

在運行以下程式碼範例之前,確認三件事已到位:支持的Node.js版本、IronPDF授權金鑰和IronPdfEngine二進制文件。

Node.js版本:IronPDF需要Node.js 18或更高版本。 從Node.js官方網站下載當前的LTS版本。 該庫使用Node.js的非同步I/O進行所有PDF操作,因此await或Promise串聯是整個過程的標準模式。 舊版本的Node.js不支持,因為該套件依賴於需要Node.js 18+的原生ESM和async_hooks功能。

授權金鑰:有效的IronPDF授權金鑰可以解鎖完整的API。 開始免費試用以獲取開發和測試的金鑰,或者購買授權以用於生產。 有關部署選項(環境變數、配置文件、密鑰管理器),請參閱使用授權金鑰指南。

IronPdfEngine:Node.js套件包括IronPdfEngine,一個跨平台的渲染引擎,負責實際的PDF處理。 特定於平台的安裝和備註(Windows、Linux、macOS)在使用IronPdfEngine文件中。

如何在Node.js程式碼中設置授權金鑰?

在應用程式啟動時應用授權金鑰,在任何PdfDocument調用之前:

:path=/static-assets/pdf/content-code-examples/nodejs/how-to/nodejs-fill-pdf-form/license-setup.js
const { IronPdfGlobalConfig } = require("@ironsoftware/ironpdf");

// Apply once at startup -- before any PdfDocument operations
IronPdfGlobalConfig.getConfig().licenseKey = process.env.IRONPDF_LICENSE_KEY;
JAVASCRIPT

將金鑰儲存在環境變數中(如上所示,使用process.env.IRONPDF_LICENSE_KEY)可使憑證不會進入源程式碼控制。 快速入門概覽涵蓋了針對不同部署環境的其他初始化模式。


如何安裝IronPDF for Node.js?

安裝IronPDF for Node.js只需一個npm命令。 在您的專案目錄中運行它:

//:path=/static-assets/pdf/content-code-examples/nodejs/how-to/nodejs-fill-pdf-form/install-full.sh
npm install @ironsoftware/ironpdf
//:path=/static-assets/pdf/content-code-examples/nodejs/how-to/nodejs-fill-pdf-form/install-full.sh
npm install @ironsoftware/ironpdf
SHELL

該套件附帶了TypeScript型別聲明,因此TypeScript專案可獲得完整的IntelliSense支持,而不需要單獨的@types套件。 Windows、Linux和macOS的特定平台二進制文件會在安裝期間自動下載。 npm上的@Iron Software/ironpdf套件列出了所有已發布的版本和對等依賴項。

.d.ts聲明意味著IntelliSense在VS Code和其他支持TypeScript語言服務的編輯器中開箱即用。

有關將IronPDF新增到現有單一程式碼倉庫或基於Docker的工作流程的說明,請參閱IronPDF for Node.js文件


如何以程式化方式填寫PDF表單?

載入PDF並將值寫入其表單欄位需要三個非同步調用:saveAs()。 下面的例子填寫了一個多欄位的申請表,並可選擇將其平面化,以便在交付後不能更改這些值。

完整表單填寫範例看起來如何?

下列範例載入包含多個欄位型別的PDF,填寫它們,並保存結果。 要專注於建立表單而不是填寫表單,請參閱PDF表單範例頁面

//:path=/static-assets/pdf/content-code-examples/nodejs/how-to/nodejs-fill-pdf-form/fill-pdf-form.js
const { PdfDocument, IronPdfGlobalConfig } = require("@ironsoftware/ironpdf");

IronPdfGlobalConfig.getConfig().licenseKey = process.env.IRONPDF_LICENSE_KEY;

async function fillApplicationForm() {
    // Load the PDF containing form fields
    const pdf = await PdfDocument.fromFile("./forms/application-form.pdf");

    // Discover available field names before filling
    const fieldNames = await pdf.getFormFieldNames();
    console.log("Form fields:", fieldNames);

    // Text fields
    await pdf.setFormFieldValue("firstName", "Jane");
    await pdf.setFormFieldValue("lastName", "Doe");
    await pdf.setFormFieldValue("email", "jane.doe@example.com");
    await pdf.setFormFieldValue("phone", "+1-555-987-6543");

    // Date field
    await pdf.setFormFieldValue("dateOfBirth", "03/22/1988");

    // 複選框 fields -- pass "true" or "false" as strings
    await pdf.setFormFieldValue("agreeToTerms", "true");
    await pdf.setFormFieldValue("subscribeNewsletter", "false");

    // Dropdown / select field
    await pdf.setFormFieldValue("country", "United States");

    // Multi-line text area
    await pdf.setFormFieldValue("comments", "Application submitted via automated workflow.");

    // Flatten the form to lock values -- prevents further editing
    // await pdf.flattenAllFormFields();

    await pdf.saveAs("./output/filled-application.pdf");
    console.log("Form saved.");
}

fillApplicationForm().catch(console.error);
//:path=/static-assets/pdf/content-code-examples/nodejs/how-to/nodejs-fill-pdf-form/fill-pdf-form.js
const { PdfDocument, IronPdfGlobalConfig } = require("@ironsoftware/ironpdf");

IronPdfGlobalConfig.getConfig().licenseKey = process.env.IRONPDF_LICENSE_KEY;

async function fillApplicationForm() {
    // Load the PDF containing form fields
    const pdf = await PdfDocument.fromFile("./forms/application-form.pdf");

    // Discover available field names before filling
    const fieldNames = await pdf.getFormFieldNames();
    console.log("Form fields:", fieldNames);

    // Text fields
    await pdf.setFormFieldValue("firstName", "Jane");
    await pdf.setFormFieldValue("lastName", "Doe");
    await pdf.setFormFieldValue("email", "jane.doe@example.com");
    await pdf.setFormFieldValue("phone", "+1-555-987-6543");

    // Date field
    await pdf.setFormFieldValue("dateOfBirth", "03/22/1988");

    // 複選框 fields -- pass "true" or "false" as strings
    await pdf.setFormFieldValue("agreeToTerms", "true");
    await pdf.setFormFieldValue("subscribeNewsletter", "false");

    // Dropdown / select field
    await pdf.setFormFieldValue("country", "United States");

    // Multi-line text area
    await pdf.setFormFieldValue("comments", "Application submitted via automated workflow.");

    // Flatten the form to lock values -- prevents further editing
    // await pdf.flattenAllFormFields();

    await pdf.saveAs("./output/filled-application.pdf");
    console.log("Form saved.");
}

fillApplicationForm().catch(console.error);
JAVASCRIPT

調用getFormFieldNames()後,返回的陣列告訴您PDF作者使用的欄位名稱。 這是避免在未建立的表單中的欄位名稱出現拼寫錯誤的最快方法。

提示在開發過程中調用getFormFieldNames()一次,以便列印PDF中的確切欄位名稱。 硬插錯誤名稱是表單被填寫後欄位顯示空白的最常見原因。


Icon Quote related to 完整表單填寫範例看起來如何?

我最喜歡的程式庫是IronPDF。它允許快速高效地操作PDF文件。它還有許多有價值的功能,例如導出到PDF/A格式和數位簽署PDF文件。

Milan Jovanovic related to 完整表單填寫範例看起來如何?

Milan Jovanovic

Microsoft MVP

查看案例研究
Icon Quote related to 完整表單填寫範例看起來如何?

IronOCR意味著我們每年可以從手動處理中節省$40,000,同時提高生產力,釋放資源以進行高影響的任務。我會強烈推薦它。

Brent Matzelle related to 完整表單填寫範例看起來如何?

Brent Matzelle

首席技術官,OPYN

查看案例研究
Icon Quote related to 完整表單填寫範例看起來如何?

IronSuite在我們的運營中扮演著至關重要的角色。這些工具增加了包括建立平面圖和改善庫存管理在內的業務效率。

David Jones related to 完整表單填寫範例看起來如何?

David Jones

首席軟體工程師,Agorus Build

查看案例研究

如何處理不同的表單欄位型別?

IronPDF支持標準的AcroForm欄位型別:文字框、複選框、單選按鈕、下拉選單、列表框和簽名欄位。 setFormFieldValue()方法接受所有型別的字串值;對於複選框和單選按鈕欄位,接受的值取決於PDF中欄位的特定定義。

下表顯示每個欄位型別的值格式:

PDF AcroForm欄位型別及其接受的值格式
欄位型別值格式範例
文字/多行任意字串"Jane Doe"
複選框"true""false""true"
單選按鈕選項的導出值"Female"
下拉選單(組合)選項的顯示文字"United States"
列表框(多選)字串陣列["Option1", "Option2"]
日期/數字字串表示"2024-06-15"

複選框和單選按鈕如何運作?

複選框接受"false"以取消勾選。 單選按鈕接受選項的導出值,以進行選擇——該導出的字串通常可在PDF的欄位屬性中看到,並且與顯示標簽不同。

//:path=/static-assets/pdf/content-code-examples/nodejs/how-to/nodejs-fill-pdf-form/field-types.js
const { PdfDocument, IronPdfGlobalConfig } = require("@ironsoftware/ironpdf");

IronPdfGlobalConfig.getConfig().licenseKey = process.env.IRONPDF_LICENSE_KEY;

async function handleFieldTypes() {
    const pdf = await PdfDocument.fromFile("./forms/complex-form.pdf");

    // Radio button -- use the field's export value, not its display label
    await pdf.setFormFieldValue("gender", "Female");

    // 複選框
    await pdf.setFormFieldValue("termsAccepted", "true");

    // Dropdown
    await pdf.setFormFieldValue("preferredContact", "Email");

    // Numeric field -- pass the number as a string
    await pdf.setFormFieldValue("invoiceAmount", "1250.00");

    // Date picker
    await pdf.setFormFieldValue("appointmentDate", "2024-06-15");

    await pdf.saveAs("./output/complex-form-filled.pdf");
}

handleFieldTypes().catch(console.error);
//:path=/static-assets/pdf/content-code-examples/nodejs/how-to/nodejs-fill-pdf-form/field-types.js
const { PdfDocument, IronPdfGlobalConfig } = require("@ironsoftware/ironpdf");

IronPdfGlobalConfig.getConfig().licenseKey = process.env.IRONPDF_LICENSE_KEY;

async function handleFieldTypes() {
    const pdf = await PdfDocument.fromFile("./forms/complex-form.pdf");

    // Radio button -- use the field's export value, not its display label
    await pdf.setFormFieldValue("gender", "Female");

    // 複選框
    await pdf.setFormFieldValue("termsAccepted", "true");

    // Dropdown
    await pdf.setFormFieldValue("preferredContact", "Email");

    // Numeric field -- pass the number as a string
    await pdf.setFormFieldValue("invoiceAmount", "1250.00");

    // Date picker
    await pdf.setFormFieldValue("appointmentDate", "2024-06-15");

    await pdf.saveAs("./output/complex-form-filled.pdf");
}

handleFieldTypes().catch(console.error);
JAVASCRIPT

多選列表框欄位遵循相同的模式。 當一個欄位允許多重選擇時,傳入字串陣列而不是單個值。 簽名欄位可以收到一個代表簽名圖像的base64編碼影像字串。

getFormFieldNames()列出文件中的實際名稱。


如何在填寫後平面化PDF表單欄位?

平面化PDF表單將所有欄位值合併到靜態頁面內容中,移除交互式層。 生成的文件無法進一步編輯,這樣可以防止分發過程中意外更改,並確保在所有PDF查看器中一致呈現。

在設置所有欄位值後,保存之前,調用flattenAllFormFields()關於已載入的文件:

//:path=/static-assets/pdf/content-code-examples/nodejs/how-to/nodejs-fill-pdf-form/flatten-form.js
const { PdfDocument, IronPdfGlobalConfig } = require("@ironsoftware/ironpdf");

IronPdfGlobalConfig.getConfig().licenseKey = process.env.IRONPDF_LICENSE_KEY;

async function fillAndFlattenForm() {
    const pdf = await PdfDocument.fromFile("./forms/contract.pdf");

    // Fill the required fields
    await pdf.setFormFieldValue("signerName", "Jane Doe");
    await pdf.setFormFieldValue("signatureDate", "2024-06-15");
    await pdf.setFormFieldValue("agreementAccepted", "true");

    // Flatten -- converts interactive fields to static content
    await pdf.flattenAllFormFields();

    await pdf.saveAs("./output/contract-signed.pdf");
    console.log("Contract flattened and saved.");
}

fillAndFlattenForm().catch(console.error);
//:path=/static-assets/pdf/content-code-examples/nodejs/how-to/nodejs-fill-pdf-form/flatten-form.js
const { PdfDocument, IronPdfGlobalConfig } = require("@ironsoftware/ironpdf");

IronPdfGlobalConfig.getConfig().licenseKey = process.env.IRONPDF_LICENSE_KEY;

async function fillAndFlattenForm() {
    const pdf = await PdfDocument.fromFile("./forms/contract.pdf");

    // Fill the required fields
    await pdf.setFormFieldValue("signerName", "Jane Doe");
    await pdf.setFormFieldValue("signatureDate", "2024-06-15");
    await pdf.setFormFieldValue("agreementAccepted", "true");

    // Flatten -- converts interactive fields to static content
    await pdf.flattenAllFormFields();

    await pdf.saveAs("./output/contract-signed.pdf");
    console.log("Contract flattened and saved.");
}

fillAndFlattenForm().catch(console.error);
JAVASCRIPT

平面化適用於最終交付——簽署後的合同、發放後的證書或獲批後的發票。 對於需要進一步審核的檔,在最終確認前跳過flattenAllFormFields(),並不使用它進行保存。

警告平面化是一個不可逆的操作,保存在副本上。 如果您需要重新生成文件,請保留原始的未填寫的PDF作為範本。


PDF表單自動化的常見用例是什麼?

自動表單填寫消除了高量文件工作流程中的手動資料輸入。 以下情景涵蓋了開發者最常使用IronPDF實現的模式。

申請處理:從資料庫或REST API中提取申請人資料,並填寫金融服務、保險或政府提交流程的PDF表單。 使用PDF合併範例合併填寫的表單,以生成單個多頁的提交包。

發票和收據生成:填寫發票模板,輸入項目明細、客戶詳細資訊和計算總額。 使用HTML頁眉和頁腳範例中的技術新增頁眉和頁腳。

證書和憑證生成:個性化證書模板,填寫接收者姓名、完成日期和課程標題。 使用數位簽名範例新增安全性,以防止發行後被篡改。 PDF/A標準通常在需要長期存檔的受管產業中使用。

報告生成功能:填充報告模板,輸入分析資料或調查結果。 對於需從頭開始構建PDF佈局而不是填寫現有表單的情況,請參閱HTML轉PDF教學。


在Node.js中填寫PDF表單的下一步是什麼?

本指南演示了如何載入PDF,填寫文字欄位、複選框、下拉選單和單選按鈕,平面化表單以鎖定值,並保存完整文件。 相同的PdfDocument例項支持進一步操作——新增數位簽名、壓縮輸出或提取文字——而不需要重新載入文件。

開始免費試用以在您的專案中測試IronPDF,或查看授權選項以找到適合您部署的方案。

準備好看看您還能做什麼嗎? 在這裡查看完整的Node.js教學系列:Node.js中HTML轉PDF

常見問題

在Node.js中填寫PDF表單需要哪些前置條件?

您需要Node.js 18或更高版本、IronPDF授權金鑰(可免費試用)、以及IronPdfEngine二進制文件。該引擎包含在@ironsoftware/ironpdf包中,並在安裝過程中自動下載。

我如何安裝IronPDF用於Node.js?

在您的專案目錄中運行npm install @ironsoftware/ironpdf。該命令將安裝該包及其針對Windows、Linux和macOS的特定平台二進制文件。包含TypeScript型別聲明。

我如何發現PDF表單中的字段名稱?

在使用PdfDocument.fromFile()載入PDF後調用await pdf.getFormFieldNames()。該方法返回文件中所有字段名稱字串的陣列。PDF字段名稱是大小寫敏感的,因此請使用返回的準確字串。

複選框和單選按鈕接受什麼值格式?

複選框接受字串"true"來選中,"false"來取消選中。單選按鈕接受目標選項的匯出值作為字串。使用getFormFieldNames()並檢查PDF字段屬性以找到正確的匯出值。

我如何防止已填寫的PDF表單被編輯?

在設置所有字段值後並在saveAs()之前調用await pdf.flattenAllFormFields()。平面化會將字段值合併到靜態頁面內容中並移除互動式表單層。該操作在保存的文件上是不可逆的。

我可以在Node.js中與TypeScript一起使用IronPDF嗎?

可以。@ironsoftware/ironpdf包中附帶TypeScript聲明(.d.ts文件),因此您可以在VS Code和其他編輯器中獲得完整的型別檢查和IntelliSense,而無需安裝單獨的型別包。

Darrius Serrant
全端軟體工程師(WebOps)

Darrius Serrant擁有邁阿密大學的電腦科學學士學位,並在Iron Software擔任全端WebOps行銷工程師。從小就對程式設計有興趣,他認為計算既神秘又易於理解,成為創意和問題解決的完美媒介。

在Iron Software,Darrius喜歡創造新事物並簡化複雜的概念,使其更易於理解。作為我們的常駐開發人員之一,他還志願教學,將他的專業知識傳授給下一代。

對Darrius來說,他的工作是有意義的,因為它有價值且對社會有真正的影響。

準備好開始了嗎?
版本: 2026.6 剛剛發布
Still Scrolling Icon

還在滾動嗎?

想要快速的證據嗎?
運行範例觀看您的HTML變為PDF。