如何在 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 表單。 常見的應用情境是:當應用程式透過使用者介面收集用戶資料時,必須將這些資料以 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 是一款用於建立、編輯及處理 PDF 文件的 [Java PDF 函式庫](https://ironpdf.com/java/)。 它可整合至任何基於 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 的指南。
IronPdf.licenseKey 呼叫之前設定 PdfDocument 系統屬性,以避免執行時發生授權驗證延遲。如何在 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() 未用於勾選核取方塊或選取單選按鈕,則輸出值字串可能有誤。 請在 PDF/A 檔案的手動檢查副本中,列出包含 getFields() 的欄位並檢視 getValue(),以取得正確的字串。)]如何使用 Java 填寫 PDF 表單中的下拉式清單?
下拉式清單欄位(亦稱為組合式下拉選單欄位)使用與文字欄位相同的 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 提供了一個專注且減少冗餘代碼的 API,用於在 Java 中填寫 PDF 表單。 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() 檢查欄位名稱,因為欄位名稱區分大小寫,且會因表單建立者而異。


