如何在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 表單。 一個常見場景是應用程式通過 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.PdfDocumentcom.ironsoftware.ironpdf.render.ChromePdfRenderOptions 以存取表單填寫 API。 要獲取在雲端平臺上部署的指南,請參閱 AWSAzureGoogle Cloud 的指南。

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

第一個塊使用 ChromePdfRenderOptionssetCreatePdfFormsFromHtml(true) 告訴渲染引擎將 HTML <input> 元素視為活動的 PDF 表單欄位而不是靜態文字。 渲染的 PDF 保存為可重用模板。 第二個塊載入該模板,依次調用 getForm().setFieldValue() 並將結果寫入另一個輸出文件,保持原始模板不變以供未來使用。

輸出看起來如何?

第一次渲染產生了具有兩個空的文字欄位的 PDF,可以在任何 PDF 閱讀器中完全編輯。

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

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

IronPDF Java 輸出:名字欄位為 Minnie、姓氏欄位為 Mouse 的 PDF 表單,顯示成功填入的表單資料

如何填寫我未建立的現有 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 文件)讀取欄位名的動態表單填寫例程時非常有用。

Icon Quote related to 如何填寫我未建立的現有 PDF 表單?

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

Milan Jovanovic related to 如何填寫我未建立的現有 PDF 表單?

Milan Jovanovic

Microsoft MVP

查看案例研究
Icon Quote related to 如何填寫我未建立的現有 PDF 表單?

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

Brent Matzelle related to 如何填寫我未建立的現有 PDF 表單?

Brent Matzelle

首席技術官,OPYN

查看案例研究
Icon Quote related to 如何填寫我未建立的現有 PDF 表單?

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

David Jones related to 如何填寫我未建立的現有 PDF 表單?

David Jones

首席軟體工程師,Agorus Build

查看案例研究

如何在 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() 未選中複選框或選擇單選按鈕,則可能導出值字串不正確。 列出欄位時使用 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"));
    }
}
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 為在 Java 中填寫 PDF 表單提供了一個專注的、低樣板程式碼的 API。 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()檢查欄位名稱。

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

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

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

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

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

還在滾動嗎?

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