如何在 Java 中填写 PDF 表单

如何在 Java 中填写 PDF 表单(教程)

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

IronPDF使Java开发者能够通过加载已有的PDF、使用setFieldValue()设置值,并保存填充的文档,程序化地填写PDF表单。 这使得在业务应用中自动化文档处理变得简单。

快速入门:用 Java 填写 PDF 表单

```java {title="FillPDFForm.java"} //:path=/static-assets/pdf/content-code-examples/how-to/java-fill-pdf-form-tutorial/quickstart.java // 1.在 Maven 项目中添加 IronPDF 依赖关系 // 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模板中。 包括[Apache PDFBox](https://pdfbox.apache.org)、iText和IronPDF在内的多种Java PDF库处理这项任务。 本指南说明了如何使用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。

打开`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.render.ChromePdfRenderOptions以访问表单填充API。 有关云平台上的部署指导,请参阅AWSAzureGoogle Cloud指南。

IronPdf.licenseKey系统属性,以避免运行时授权验证延迟。

如何使用HTML在Java中创建和填写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

第一个块使用setCreatePdfFormsFromHtml(true)告诉渲染引擎将HTML <input>元素视为活动的PDF表单字段而不是静态文本。 渲染后的PDF被保存为可重复使用的模板。 第二个块加载该模板,按名称调用每个字段的getForm().setFieldValue(),并将结果写入单独的输出文件,保持原始模板不受影响,以供将来使用。

输出结果是什么样的?

第一次渲染出的PDF包含两个空文本字段,在任何PDF阅读器中均可完全编辑。

简单的PDF表单展示具有可编辑的名字和姓氏文本输入字段,蓝色框,由IronPDF从HTML渲染

运行setFieldValue()后,两个字段都填充了提供的数据:

IronPDF Java 输出:名字字段为 Minnie、姓氏字段为 Mouse 的 PDF 表单,显示成功填写的表单数据

如何填写我没有创建的现有PDF表单?

许多现实世界的工作流程会接收第三方PDF模板(政府表格、保险文件、供应商合同),其中已包含命名字段。 加载和填充这些表单的过程是相同的:使用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"被视为不同的字段。

请注意IronPDF的FormField对象的列表。 每个对象都公开getName(), getType(), 和getValue()。 这些在构建从外部数据源(如数据库或CSV文件)读取字段名称的动态表单填充例程时非常有用。

Icon Quote related to 如何填写我没有创建的现有PDF表单?

我最喜欢的这种库是 IronPDF。它允许快速高效地操作 PDF 文件。它还具有许多有价值的功能,比如导出为 PDF/A 格式和数字签名 PDF 文档。

Milan Jovanovic related to 如何填写我没有创建的现有PDF表单?

Milan Jovanovic

微软MVP

查看案例研究
Icon Quote related to 如何填写我没有创建的现有PDF表单?

IronOCR 意味着我们每年可以节省 $40,000 的人工处理成本,同时提高生产力,并释放资源用于高影响任务。我强烈推荐它。

Brent Matzelle related to 如何填写我没有创建的现有PDF表单?

Brent Matzelle

首席技术官,OPYN

查看案例研究
Icon Quote related to 如何填写我没有创建的现有PDF表单?

Iron Suite 在我们的运营中起着至关重要的作用。这些工具提高了业务各方面的效率,包括创建平面图和改善库存管理。

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()没有勾选复选框或选择单选按钮,则导出值字符串可能错误。 使用getValue()以检索正确的字符串。)]}

如何在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()检查字段的可用选项。 传递与字段定义中任何选项不匹配的值,将保持选择不变,而不抛出异常,因此在批量运行之前验证导出值可避免隐性数据丢失。

提示为了检查组合框的所有可用选项,将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。对于单选框组,每个选项共享同一字段名称但具有唯一导出值。如果字段无响应,请检查getValue()在手动选中的PDF副本上查找正确的字符串。

如何填写下拉列表字段?

使用选项的导出值调用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文件。