IRONSOFTWAREHOME

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

Curtis Chau
Curtis Chau
Updated: 2026年6月29日

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

快速入门:用 Java 填写 PDF 表单
//: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"));
Text

这篇文章介绍了如何在Java中用程序填充PDF表单。 一个常见的情况是,当一个应用程序通过用户界面收集用户数据后,必须将其以PDF格式保存以供存档、合规或下游处理。

在捕获用户输入后,应用程序常常需要将该数据直接注入预先存在的PDF模板中。 包括Apache PDFBox、iText和IronPDF在内的多种Java PDF库处理这项任务。 本指南说明了如何使用IronPDF来填充带有文本字段、复选框、单选按钮和下拉列表的交互式表单。 对于构建相关文档工作流程的开发人员,请参阅从头开始在Java中创建PDF表单指南。

什么是 IronPDF for Java?

IronPDF是一个Java PDF库,用于创建、编辑和操作PDF文档。 它集成到任何基于Maven的Java项目中,并提供一个干净的API,使得常见的PDF任务可通过最小化样板轻松实现。

该库涵盖了完整的PDF生命周期:将HTML渲染为PDF,读取和写入表单数据,添加数字签名,应用安全设置,压缩文档,以及打印。 具体到表单处理,IronPDF提供对PDF文档中每种字段类型的编程访问,同时保留原始格式。 这使得它非常适合于批量表单处理、使用数据库记录预填模板,或将表单填写集成到更大的Java工作流程中。 请参阅IronPDF Java API参考以获取完整的可用类和方法列表。

如何在Maven项目中安装IronPDF?

在您的pom.xml文件中添加以下依赖块以安装IronPDF for Java。

打开mvn install来下载库。 可用版本在Maven Central上列出。

//: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>
XML

安装后,在您的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"));
    }
}
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"));
    }
}
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());
        }
    }
}
Java

在写入数据之前打印字段名称可以防止setFieldValue()在名称不匹配时静默失败。 PDF文档中的字段名称区分大小写,因此"FirstName"被视为不同的字段。

请注意: IronPDF的FormField对象的列表。 每个对象都公开getName(), 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"));
    }
}
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"));
    }
}
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"));
    }
}
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()查看字段名称,因为字段名称区分大小写且不同表单作者之间有所不同。

Curtis Chau
技术作家

Curtis Chau 拥有卡尔顿大学的计算机科学学士学位,专注于前端开发,精通 Node.js、TypeScript、JavaScript 和 React。他热衷于打造直观且美观的用户界面,喜欢使用现代框架并创建结构良好、视觉吸引力强的手册。

...
阅读更多

准备开始了吗?

版本:2026.6刚刚发布

免费获取

30天试用密钥 即刻获取。

bullet_checked无需信用卡或创建账户
bullet_test在生产环境中测试
且无水印
bullet_calendar30天完全
功能性产品
bullet_support试用期间提供
24/5技术支持
立即获取您的免费30 天试用密钥
无需信用卡或创建账户
Java Maven PDF 库
using Maven 安装

版本: 2026.6

<dependency>
   <groupId>com.ironsoftware</groupId>
   <artifactId>ironpdf</artifactId>
   <version>2026.6.1</version>
</dependency>
https://central.sonatype.com/artifact/com.ironsoftware/ironpdf/2026.6.1
or
Java PDF JAR
下载 JAR

版本: 2026.6

立即下载

手动安装到您的项目中

Key in blue circle

立即获取免费的 30 天试用版密钥

无任何限制。100% 解锁。无需信用卡。

bullet_checked无需信用卡或创建账户无任何限制。100% 解锁。无需信用卡。
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
预约您的免费现场演示
Booking Badge

深受全球数百万工程师信赖

Iron Software 的客户徽标
获取您的无义务咨询
填写下面的表格或通过sales@ironsoftware.com
您的资料将始终保密。
深受全球数百万工程师信赖
Iron Software 的客户徽标
立即获取您的免费30 天试用密钥
无需信用卡或创建账户