如何在 Java 中填寫 PDF 表單(教程)
IronPDF 使 Java 開發者能夠程式化地填寫 PDF 表單,方法是載入現有的 PDF,使用 getForm() 存取表單欄位,使用 setFieldValue() 設定值,並保存填寫完的文件。 這使得在商業應用中自動化文件處理變得簡單直接。
//:path=/static-assets/pdf/content-code-examples/how-to/java-fill-pdf-form-tutorial/quickstart.java
// 1. 將 IronPDF 依賴項添加到您的 Maven 專案中
// 2. 載入您的 PDF 表單
PdfDocument form = PdfDocument.fromFile("form.pdf");
// 3. 填寫表單欄位
form.getForm().setFieldValue("firstname", "John");
// 4. 保存填寫完的 PDF
form.saveAs(Paths.get("filled_form.pdf"));
如何在 Java 中填寫 PDF 表單
- 通過Maven安裝IronPDF Java程式庫
- 使用
PdfDocument.fromFile()載入包含表單欄位的現有 PDF - 使用
getForm()方法存取表單 - 使用
setFieldValue(fieldName, value)設定欄位值 - 使用
saveAs()保存填寫完的文件
本文介紹了如何在 Java 中程式化地填寫 PDF 表單。 一個常見場景是應用程式通過 UI 收集使用者資訊,這些資訊需要以 PDF 格式保存以便存檔、合規或後續處理。
在獲取使用者輸入後,應用程式通常需要將這些資料直接注入預先存在的 PDF 模板中。 多個 Java PDF 程式庫可以處理這項任務,包括 Apache PDFBox、iText 和 IronPDF。 本指南解釋了如何使用 IronPDF 填寫帶有文字欄位、複選框、單選按鈕和下拉列表的互動表單。 對於構建相關文件工作流程的開發人員,請參閱在 Java 中從頭建立 PDF 表單 的指南。
什麼是 IronPDF for Java?
IronPDF 是一個 Java PDF 程式庫,用於建立、編輯和操作 PDF 文件。 它能夠整合到任何基於 Maven 的 Java 專案中,並提供簡潔的 API,使常見的 PDF 任務能夠以最少的樣板程式碼來實現。
該程式庫涵蓋了整個 PDF 生命週期:將 HTML 渲染為 PDF、讀寫表單資料、新增數位簽名、應用安全設置、壓縮文件和列印。 在表單處理中,IronPDF 提供了對 PDF 文件中每一個欄位型別的程式化存取,同時保留原始格式。 這使得它非常適合批量表單處理、使用資料庫記錄預先填充模板或將表單填寫與較大的 Java 工作流程整合。 請參閱 IronPDF Java API 參考 以獲取完整的可用類和方法列表。
如何在 Maven 專案中安裝 IronPDF?
將以下依賴項塊新增到您的 pom.xml 文件中以安裝 IronPDF for Java。
打開 pom.xml 並將依賴項插入 <dependencies> 元素中,然後運行 mvn install 以下載程式庫。 可用的版本列於 Maven Central。
//:path=/static-assets/pdf/content-code-examples/how-to/java-fill-pdf-form-tutorial/maven-dependency.xml
<dependency>
<groupId>com.ironsoftware</groupId>
<artifactId>ironpdf</artifactId>
<version>2024.9.1</version>
</dependency>
安裝後,在您的 Java 類中導入 com.ironsoftware.ironpdf.PdfDocument 和 com.ironsoftware.ironpdf.render.ChromePdfRenderOptions 以存取表單填寫 API。 要獲取在雲端平臺上部署的指南,請參閱 AWS、Azure 和 Google Cloud 的指南。
PdfDocument 調用之前設置 IronPdf.licenseKey 系統屬性,以避免在運行時進行許可證驗證延遲。如何在 Java 中使用 HTML 建立並填寫 PDF 表單?
產生一致結構且可填寫的 PDF 最可靠的方法是用 HTML 定義表單並用 IronPDF 渲染。 該程式庫將 HTML <input> 元素直接轉換為互動式 PDF 表單欄位。
以下程式碼將從 HTML 字串建立一個包含兩個欄位的 PDF 表單,然後填寫兩個欄位:
//:path=/static-assets/pdf/content-code-examples/how-to/java-fill-pdf-form-tutorial/create-and-fill-form.java
import com.ironsoftware.ironpdf.PdfDocument;
import com.ironsoftware.ironpdf.render.ChromePdfRenderOptions;
import java.io.IOException;
import java.nio.file.Paths;
public class App {
public static void main(String[] args) throws IOException {
// Define an HTML form with two text input fields
String formHTML = "<html>"
+ "<body>"
+ "<h2>Editable PDF Form</h2>"
+ "<form>"
+ "First name: <br><input type='text' name='firstname' value=''><br>"
+ "Last name: <br><input type='text' name='lastname' value=''>"
+ "</form>"
+ "</body>"
+ "</html>";
// Enable HTML-to-form-field conversion during rendering
ChromePdfRenderOptions renderOptions = new ChromePdfRenderOptions();
renderOptions.setCreatePdfFormsFromHtml(true);
// Render HTML to PDF and save the blank template
PdfDocument.renderHtmlAsPdf(formHTML, renderOptions)
.saveAs(Paths.get("assets/BasicForm.pdf"));
// Load the template and fill in field values
PdfDocument form = PdfDocument.fromFile(Paths.get("assets/BasicForm.pdf"));
form.getForm().setFieldValue("firstname", "Minnie");
form.getForm().setFieldValue("lastname", "Mouse");
// Save the completed form to a new file
form.saveAs(Paths.get("assets/BasicForm_Filled.pdf"));
}
}
第一個塊使用 ChromePdfRenderOptions 與 setCreatePdfFormsFromHtml(true) 告訴渲染引擎將 HTML <input> 元素視為活動的 PDF 表單欄位而不是靜態文字。 渲染的 PDF 保存為可重用模板。 第二個塊載入該模板,依次調用 getForm().setFieldValue() 並將結果寫入另一個輸出文件,保持原始模板不變以供未來使用。
輸出看起來如何?
第一次渲染產生了具有兩個空的文字欄位的 PDF,可以在任何 PDF 閱讀器中完全編輯。

在執行 setFieldValue() 後,兩個欄位都會用提供的資料填充:

如何填寫我未建立的現有 PDF 表單?
許多實務工作流程會接收到包含名欄位的第三方 PDF 模板(政府表單、保險文件、供應商合同)。 載入和填寫這些文件的過程相同:使用 PdfDocument.fromFile() 載入文件,然後使用 getForm().setFieldValue() 按名稱為每個欄位設置值。
//:path=/static-assets/pdf/content-code-examples/how-to/java-fill-pdf-form-tutorial/fill-existing-form.java
import com.ironsoftware.ironpdf.PdfDocument;
import java.io.IOException;
import java.nio.file.Paths;
public class FillExistingForm {
public static void main(String[] args) throws IOException {
// Load a third-party fillable PDF
PdfDocument form = PdfDocument.fromFile(Paths.get("templates/application.pdf"));
// Set text field values by field name
form.getForm().setFieldValue("applicant_name", "Jane Smith");
form.getForm().setFieldValue("date_of_birth", "1985-06-14");
form.getForm().setFieldValue("reference_number", "REF-2024-00421");
// Save the completed application
form.saveAs(Paths.get("output/application_filled.pdf"));
}
}
要在現有 PDF 中發現欄位名,請在 Adobe Acrobat Reader 中打開文件,右鍵點擊任何欄位,然後選擇"屬性"。 欄位名出現在"常規"選項卡中。 或者,程式化地遍歷所有欄位:
//:path=/static-assets/pdf/content-code-examples/how-to/java-fill-pdf-form-tutorial/list-form-fields.java
import com.ironsoftware.ironpdf.PdfDocument;
import com.ironsoftware.ironpdf.form.FormField;
import java.nio.file.Paths;
public class ListFormFields {
public static void main(String[] args) throws Exception {
PdfDocument form = PdfDocument.fromFile(Paths.get("templates/application.pdf"));
// Print the name and type of every form field
for (FormField field : form.getForm().getFields()) {
System.out.println("Field: " + field.getName()
+ " | Type: " + field.getType());
}
}
}
在寫入資料之前列印欄位名,以防止 setFieldValue() 在名稱不匹配時悄然失敗。 PDF 文件中的欄位名是區分大小寫的,因此 "firstname" 和 "FirstName" 被視為不同的欄位。
getForm().getFields() 返回 FormField 物件的列表。 每個物件公開 getType() 和 getValue()。 這在建立從外部資料源(如資料庫或 CSV 文件)讀取欄位名的動態表單填寫例程時非常有用。如何在 Java 中填寫複選框和單選按鈕?
文字欄位可直接接受字串值,但複選框和單選按鈕需要特定的導出值,這些值是在建立 PDF 時定義的。使用 setFieldValue() 並為每個欄位傳遞正確的導出值字串。
//:path=/static-assets/pdf/content-code-examples/how-to/java-fill-pdf-form-tutorial/fill-checkboxes-radio.java
import com.ironsoftware.ironpdf.PdfDocument;
import java.nio.file.Paths;
public class FillCheckboxesAndRadio {
public static void main(String[] args) throws Exception {
PdfDocument form = PdfDocument.fromFile(Paths.get("templates/survey.pdf"));
// Check a checkbox by setting its exported value (often "Yes" or "On")
form.getForm().setFieldValue("agree_terms", "Yes");
// Select a radio button option by its exported value
form.getForm().setFieldValue("preferred_contact", "email");
form.saveAs(Paths.get("output/survey_filled.pdf"));
}
}
複選框的導出值通常是 "On",或由表單建立者設置的自訂字串。 對於單選按鈕組,組中的每個選項共享相同的欄位名,但有獨特的導出值。 使用上一節中的欄位列示技術來確認確切的導出值,然後再編寫自動填寫例程。
setFieldValue() 未選中複選框或選擇單選按鈕,則可能導出值字串不正確。 列出欄位時使用 getFields() 並在手動選中的 PDF 副本上檢查 getValue() 以獲取正確的字串。如何在 PDF 表單中使用 Java 填寫下拉列表?
下拉列表欄位(也被稱為組合框欄位)使用與文字欄位相同的 API。 將選項的導出值作為字串傳遞給 setFieldValue()。 除非表單欄位建立者定義了單獨的底層值,否則導出值通常是可見的選項文字。
//:path=/static-assets/pdf/content-code-examples/how-to/java-fill-pdf-form-tutorial/fill-dropdown.java
import com.ironsoftware.ironpdf.PdfDocument;
import java.nio.file.Paths;
public class FillDropdown {
public static void main(String[] args) throws Exception {
PdfDocument form = PdfDocument.fromFile(Paths.get("templates/registration.pdf"));
// Set a dropdown/combo box field to a specific option
form.getForm().setFieldValue("country", "United States");
// Set a list box field (multi-select may require comma-separated values)
form.getForm().setFieldValue("subscription_tier", "Professional");
form.saveAs(Paths.get("output/registration_filled.pdf"));
}
}
當下拉列表的導出值與可見的標籤不同時,請使用 getFields() 檢查欄位的可用選項。 傳遞與欄位定義的任何選項不匹配的值將保持選擇不變,不會拋出異常,因此在批量運行之前驗證導出值可避免資料消失而未引起注意。
FormField 轉換為 FormComboBoxField 並調用 getOptions()。 這將返回該下拉列表的有效導出值列表。如何在 Java 中將填寫的 PDF 表單扁平化?
扁平化將所有表單欄位轉換為靜態的、不可編輯的內容。 這防止收件人更改提交的資料,是許多歸檔和合規用途的要求。 IronPDF 支持將表單扁平化作為其 PDF 操控能力 的一部分。
//:path=/static-assets/pdf/content-code-examples/how-to/java-fill-pdf-form-tutorial/flatten-form.java
import com.ironsoftware.ironpdf.PdfDocument;
import java.nio.file.Paths;
public class FlattenForm {
public static void main(String[] args) throws Exception {
PdfDocument form = PdfDocument.fromFile(Paths.get("assets/BasicForm_Filled.pdf"));
// Flatten all form fields -- values become static text
form.getForm().flatten();
form.saveAs(Paths.get("output/BasicForm_Archived.pdf"));
}
}
在運行 flatten() 後,輸出 PDF 中不再有互動式表單欄位。 文件大小通常減少,因為表單欄位覆蓋層已被刪除。 扁平化的 PDF 是可以安全分發的,無需擔心接收者編輯已提交的數值。
Java 中 PDF 表單填寫的下一步是什麼?
IronPDF 為在 Java 中填寫 PDF 表單提供了一個專注的、低樣板程式碼的 API。 getForm() 方法直接存取文字欄位、複選框、單選按鈕和下拉列表。 當需要存檔時,flatten() 將所有填寫的資料鎖定為靜態內容。
對於您的 PDF 文件工作流的下一步,請探索這些指南:
- 在 Java 中從 HTML 建立 PDF 表單:程式化建構自訂表單模板
- 在 Java 中的 HTML 到 PDF 轉換:將完整 HTML 頁面和片段渲染為 PDF 文件
- PDF 安全性和密碼保護:在分發前限制對填寫表單的存取
- Java 中 PDF 的數位簽名:簽署完成的表單以確認其真實性
- IronPDF Java API 參考:完整的類和方法的文件
開始免費試用 IronPDF for Java,以在您自己的專案中測試表單填寫。 當您準備好部署時,查看 IronPDF 的授權選項,以找到適合您團隊需求的計劃。
常見問題
在Java中填寫PDF表單的基本步驟是什麼?
新增IronPDF Maven依賴項,使用PdfDocument.fromFile()載入您的PDF,使用getForm()存取表單欄位,對每個欄位調用setFieldValue(fieldName, value),然後使用saveAs()保存結果。
如何在現有PDF中發現欄位名稱?
在Adobe Acrobat Reader中打開PDF,右鍵單擊任何欄位,並選擇屬性。欄位名稱將顯示在常規選項卡中。或者,調用getForm().getFields()以程式方式迭代所有欄位並列印每個getName()和getType()。
我如何在Java中填寫勾選方框和選項按鈕?
使用setFieldValue()與欄位的導出值字串。勾選方框的導出值通常為Yes或On。對於選項按鈕組,所有選項共享相同的欄位名稱,但有不同的導出值。如果該欄位無法響應,請檢查手動勾選的PDF副本上的getValue()來找到正確的字串。
我如何填寫下拉列表欄位?
調用setFieldValue(fieldName, optionValue)並提供選項的導出值。導出值通常為可見的選項文字。要程式化列出可用選項,將FormField轉換為FormComboBoxField並呼叫getOptions()。
扁平化PDF表單有什麼作用?
扁平化將所有交互式表單欄位轉換為靜態且不可編輯的內容。在保存前調用getForm().flatten()。生成的PDF不能被接收者編輯,這在許多存檔和合規性工作流程中是必需的。
IronPDF可以填寫由其他工具建立的表單嗎?
是的。PdfDocument.fromFile()可以載入任何標準的可填寫PDF,而不管其如何建立。因為欄位名稱區分大小寫且因表單作者而異,所以在調用setFieldValue()之前使用getForm().getFields()檢查欄位名稱。
How can I fill dropdown lists in a PDF form using IronPDF?
Use setFieldValue() to assign the dropdown option's export value. The exact export value should match the option's defined value in the PDF form, with FormComboBoxField.getOptions() providing the list of valid values.
How do I flatten a filled PDF form using IronPDF?
Flattening a filled PDF form with IronPDF can be done by calling form.getForm().flatten() on the PdfDocument, which converts form fields into static text, preventing further editing.
What are some additional features of IronPDF for Java?
Beyond form filling, IronPDF features include rendering HTML to PDF, manipulating PDF security settings, applying digital signatures, and allowing programmatic access to various PDF document elements.
How can I find more resources to further explore IronPDF capabilities?
Explore the [IronPDF Java API reference](https://ironpdf.com/java/object-reference/api/) for detailed documentation, and additional guides on creating forms from HTML, HTML to PDF conversion, and PDF security and digital signing.
Curtis Chau擁有Carleton大學的電腦科學學士學位,專精於前端開發,擁有Node.js、TypeScript、JavaScript和React的專業知識。Curtis熱衷於建立直觀且美觀的使用者介面,喜愛使用現代框架並建立結構良好、視覺吸引力的手冊。