如何在 Java 中填寫 PDF 表單(教程)
IronPDF 使 Java 開發者能夠程式化地填寫 PDF 表單,方法是載入現有的 PDF,使用 getForm() 存取表單欄位,使用 setFieldValue() 設定值,並保存填寫完的文件。 這使得在商業應用中自動化文件處理變得簡單直接。
快速開始:在 Java 中填寫 PDF 表單
```java {title="FillPDFForm.java"} //: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"));
<div class="hsg-featured-snippet">
<h2>如何在 Java 中填寫 PDF 表單</h2>
<ol>
<li><a class="js-modal-open" data-modal-id="download-modal" href="#download-modal">通過Maven安裝IronPDF Java程式庫</a></li>
<li>使用 <code>PdfDocument.fromFile()</code> 載入包含表單欄位的現有 PDF</li>
<li>使用 <code>getForm()</code> 方法存取表單</li>
<li>使用 <code>setFieldValue(fieldName, value)</code> 設定欄位值</li>
<li>使用 <code>saveAs()</code> 保存填寫完的文件</li>
</ol>
</div>
本文介紹了如何在 Java 中程式化地填寫 PDF 表單。 一個常見場景是應用程式通過 UI 收集使用者資訊,這些資訊需要以 PDF 格式保存以便存檔、合規或後續處理。
在獲取使用者輸入後,應用程式通常需要將這些資料直接注入預先存在的 PDF 模板中。 多個 Java PDF 程式庫可以處理這項任務,包括 [Apache PDFBox](https://pdfbox.apache.org)、iText 和 IronPDF。 本指南解釋了如何使用 IronPDF 填寫帶有文字欄位、複選框、單選按鈕和下拉列表的互動表單。 對於構建相關文件工作流程的開發人員,請參閱[在 Java 中從頭建立 PDF 表單](https://ironpdf.com/java/how-to/create-forms/) 的指南。
## 什麼是 IronPDF for Java?
IronPDF 是一個 [Java PDF 程式庫](https://ironpdf.com/java/),用於建立、編輯和操作 PDF 文件。 它能夠整合到任何基於 Maven 的 Java 專案中,並提供簡潔的 API,使常見的 PDF 任務能夠以最少的樣板程式碼來實現。
該程式庫涵蓋了整個 PDF 生命週期:將 HTML 渲染為 PDF、讀寫表單資料、新增數位簽名、應用安全設置、壓縮文件和列印。 在表單處理中,IronPDF 提供了對 PDF 文件中每一個欄位型別的程式化存取,同時保留原始格式。 這使得它非常適合批量表單處理、使用資料庫記錄預先填充模板或將表單填寫與較大的 Java 工作流程整合。 請參閱 [IronPDF Java API 參考](https://ironpdf.com/java/object-reference/api/) 以獲取完整的可用類和方法列表。
## 如何在 Maven 專案中安裝 IronPDF?
將以下依賴項塊新增到您的 `pom.xml` 文件中以安裝 IronPDF for Java。
打開 `pom.xml` 並將依賴項插入 `<dependencies>` 元素中,然後運行 `mvn install` 以下載程式庫。 可用的版本列於 [Maven Central](https://search.maven.org/artifact/com.ironsoftware/ironpdf)。
```xml
//: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"));
}
}
//: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"));
}
}
//: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());
}
}
}
//: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"));
}
}
//: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"));
}
}
//: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"));
}
}
//: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()檢查欄位名稱。


