如何在 Java 中填寫 PDF 表單

如何在 Java 中填寫 PDF 表單(教學)

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

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.PdfDocumentcom.ironsoftware.ironpdf.render.ChromePdfRenderOptions,以存取表單填寫 API。 有關雲端平台的部署指引,請參閱 AWSAzureGoogle Cloud 的指南。

提示在 Docker 或容器化環境中使用 IronPDF 時,請在首次 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"));
    }
}
JAVA

第一個區塊使用 ChromePdfRenderOptionssetCreatePdfFormsFromHtml(true),指示渲染引擎將 HTML <input> 元素視為可互動的 PDF 表單欄位,而非靜態文字。 生成的 PDF 會儲存為可重複使用的範本。 第二個區塊會載入該範本,針對每個欄位依名稱呼叫 getForm().setFieldValue(),並將結果寫入獨立的輸出檔案,同時保留原始範本供日後使用。

翻譯成果應呈現何種樣貌?

首次渲染會產生一個包含兩個空白文字欄位的 PDF 檔案,可在任何 PDF 閱讀器中完全編輯。

由 IronPDF 根據 HTML 渲染的簡易 PDF 表單,顯示帶有藍色邊框的可編輯姓名與姓氏文字輸入欄位

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

IronPDF Java output: PDF form with Minnie in the First name field and Mouse in the Last name field, showing successfully filled form data

如何填寫非由我建立的現有 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"));
    }
}
JAVA

若要找出現有 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());
        }
    }
}
JAVA

在寫入資料前先列印欄位名稱,可避免 setFieldValue() 在名稱不匹配時發生無聲失敗。 PDF 文件中的欄位名稱區分大小寫,因此 "firstname""FirstName" 會被視為不同的欄位。

請注意IronPdf 的 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"));
    }
}
JAVA

核取方塊的匯出值通常為 "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"));
    }
}
JAVA

當下拉式選單的匯出值與可見標籤不一致時,請使用 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"));
    }
}
JAVA

執行 flatten() 後,輸出 PDF 中將不再包含任何互動式表單欄位。 由於移除了表單欄位的覆蓋層,文件大小通常會隨之減少。 已扁平化的 PDF 檔案可安全地進行分發,收件者無法編輯其中提交的數值。

Java 中的 PDF 表單填寫下一步該怎麼做?

IronPDF 提供了一個專注且減少冗餘代碼的 API,用於在 Java 中填寫 PDF 表單。 getForm() 方法可直接存取文字欄位、核取方塊、單選按鈕及下拉式清單。 當需要進行歸檔時,flatten() 會將所有已填入的資料鎖定為靜態內容。

若要了解 PDF 文件工作流程的後續階段,請參閱以下指南:

立即開始 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() 並傳入該欄位的匯出值字串。核取方塊的匯出值通常為 YesOn。對於單選按鈕群組,每個選項共用相同的欄位名稱,但具有唯一的匯出值。若該欄位無回應,請檢查手動勾選的 PDF 副本中的 getValue() 來找出正確的字串。

如何填寫下拉式清單欄位?

請傳入選項的匯出值來呼叫 setFieldValue(fieldName, optionValue)。匯出值通常即為選項的顯示文字。若要透過程式碼列出可用選項,請將 FormField 轉換為 FormComboBoxField,並呼叫 getOptions()

「將 PDF 表單扁平化」會產生什麼效果?

「扁平化」功能會將所有互動式表單欄位轉換為靜態、不可編輯的內容。請在儲存前呼叫 getForm().flatten()。生成的 PDF 檔案無法被收件者編輯,此功能符合許多歸檔與合規工作流程的需求。

IronPDF 能否填寫由其他工具建立的表單?

是的。PdfDocument.fromFile() 可載入任何標準的可填寫 PDF 檔案,無論其如何建立。在呼叫 setFieldValue() 之前,請使用 getForm().getFields() 檢查欄位名稱,因為欄位名稱區分大小寫,且會因表單建立者而異。

Curtis Chau
技術撰稿人

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

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

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

還在捲動嗎?

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