如何在 Java 中填写 PDF 表单(教程)
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。 有关云平台上的部署指导,请参阅AWS、Azure和Google 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"));
}
}
第一个块使用setCreatePdfFormsFromHtml(true)告诉渲染引擎将HTML <input>元素视为活动的PDF表单字段而不是静态文本。 渲染后的PDF被保存为可重复使用的模板。 第二个块加载该模板,按名称调用每个字段的getForm().setFieldValue(),并将结果写入单独的输出文件,保持原始模板不受影响,以供将来使用。
输出结果是什么样的?
第一次渲染出的PDF包含两个空文本字段,在任何PDF阅读器中均可完全编辑。

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

如何填写我没有创建的现有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"));
}
}
要在现有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"被视为不同的字段。
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"));
}
}
//: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()没有勾选复选框或选择单选按钮,则导出值字符串可能错误。 使用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"));
}
}
当下拉列表导出值与可见标签不同,请使用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"));
}
}
在flatten()运行后,输出PDF中不再有交互式表单字段。 文档大小通常会减少,因为表单字段覆盖层已被移除。 压平PDF可以安全分发,无风险接收者编辑提交的值。
Java中PDF表单填充的下一步是什么?
IronPDF为在Java中填写PDF表单提供了一个专注、低样板的API。 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。对于单选框组,每个选项共享同一字段名称但具有唯一导出值。如果字段无响应,请检查getValue()在手动选中的PDF副本上查找正确的字符串。
如何填写下拉列表字段?
使用选项的导出值调用setFieldValue(fieldName, optionValue)。导出值通常是可见的选项文本。要以编程方式列出可用选项,请将FormField转换为FormComboBoxField并调用getOptions()。
使PDF表单扁平化的功能是什么?
压平将所有交互式表单字段转换为静态、不可编辑的内容。在保存前调用getForm().flatten()。生成的PDF无法被接收者编辑,这是许多存档和合规工作流所要求的。
IronPDF可以填写其他工具创建的表单吗?
是的。PdfDocument.fromFile()加载任何标准的可填写PDF,无论其是如何创建的。在调用setFieldValue()之前,使用getForm().getFields()查看字段名称,因为字段名称区分大小写且不同表单作者之间有所不同。


