表单域,可以按用途分为多种不同的类型,常见的有文本框、多行文本框、密码框、隐藏域、复选框、单选框和下拉选择框等。下面的示例中,将分享通过Java编程在PDF中添加以及填充表单域的方法。包括:文本框、复选框、单选按钮、列表框、组合框、签名域、按钮等。
这里填充表单域可分为2种情况,一种是在创建表单域时填充,一种是加载已经创建好表单域的文档进行填充。此外,对于已经创建表单域并填写好的文档,也可以设置只读,防止修改、编辑等。
要点概括:
1.创建表单域
2.填充表单域
3.设置表单域只读
工具:Free Spire.PDF for Java(免费版)
Jar文件获取及导入:
方法1:通过官网下载jar文件包。下载后,解压文件,并将lib文件夹下的Spire.Pdf.jar文件导入到java程序。
方法2:可通过maven仓库安装导入到maven项目。
Java代码示例(供参考)
【示例1】 创建并填充PDF表单域
import java.awt.*; import java.awt.geom.Point2D; import java.awt.geom.Rectangle2D; import com.spire.pdf.FileFormat; import com.spire.pdf.PdfDocument; import com.spire.pdf.PdfPageBase; import com.spire.pdf.fields.*; import com.spire.pdf.graphics.*; public class AddFormFieldsToPdf { public static void main(String[] args) throws Exception { //创建PdfDocument对象,并添加页面 PdfDocument doc = new PdfDocument(); PdfPageBase page = doc.getPages().add(); //初始化位置变量 float baseX = 100; float baseY = 0; //创建画刷对象 PdfSolidBrush brush1 = new PdfSolidBrush(new PdfRGBColor(Color.BLUE)); PdfSolidBrush brush2 = new PdfSolidBrush(new PdfRGBColor(Color.black)); //创建TrueType字体 PdfTrueTypeFont font= new PdfTrueTypeFont(new Font("Arial Unicode MS",Font.PLAIN,10),true); //添加文本框 String text = "姓名:";//添加文本 page.getCanvas().drawString(text, font, brush1, new Point2D.Float(0, baseY));//在PDF中绘制文字 Rectangle2D.Float tbxBounds = new Rectangle2D.Float(baseX, baseY , 150, 15);//创建Rectangle2D对象 PdfTextBoxField textBox = new PdfTextBoxField(page, "TextBox");//创建文本框对象 textBox.setBounds(tbxBounds);//设置文本框的Bounds textBox.setText("刘兴");//填充文本框 textBox.setFont(font);//应用文本框的字体 doc.getForm().getFields().add(textBox);//添加文本框到PDF域的集合 baseY +=25; //添加复选框 page.getCanvas().drawString("所在院系:", font, brush1, new Point2D.Float(0, baseY)); java.awt.geom.Rectangle2D.Float rec1 = new java.awt.geom.Rectangle2D.Float(baseX, baseY, 15, 15); PdfCheckBoxField checkBoxField = new PdfCheckBoxField(page, "CheckBox1");//创建第一个复选框对象 checkBoxField.setBounds(rec1); checkBoxField.setChecked(false);//填充复选框 page.getCanvas().drawString("经管系", font, brush2, new Point2D.Float(baseX + 20, baseY)); java.awt.geom.Rectangle2D.Float rec2 = new java.awt.geom.Rectangle2D.Float(baseX + 70, baseY, 15, 15); PdfCheckBoxField checkBoxField1 = new PdfCheckBoxField(page, "CheckBox2");//创建第二个复选框对象 checkBoxField1.setBounds(rec2); checkBoxField1.setChecked(true);//填充复选框 page.getCanvas().drawString("创新班", font, brush2, new Point2D.Float(baseX+90, baseY)); doc.getForm().getFields().add(checkBoxField);//添加复选框到PDF baseY += 25; //添加列表框 page.getCanvas().drawString("录取批次:", font, brush1, new Point2D.Float(0, baseY)); java.awt.geom.Rectangle2D.Float rec = new java.awt.geom.Rectangle2D.Float(baseX, baseY, 150, 50); PdfListBoxField listBoxField = new PdfListBoxField(page, "ListBox");//创建列表框对象 listBoxField.getItems().add(new PdfListFieldItem("第一批次", "item1")); listBoxField.getItems().add(new PdfListFieldItem("第二批次", "item2")); listBoxField.getItems().add(new PdfListFieldItem("第三批次", "item3")); listBoxField.setBounds(rec); listBoxField.setFont(font); listBoxField.setSelectedIndex(0);//填充列表框 doc.getForm().getFields().add(listBoxField);//添加列表框到PDF baseY += 60; //添加单选按钮 page.getCanvas().drawString("招收方式:", font, brush1, new Point2D.Float(0, baseY)); PdfRadioButtonListField radioButtonListField = new PdfRadioButtonListField(page, "Radio");//创建单选按钮对象 PdfRadioButtonListItem radioItem1 = new PdfRadioButtonListItem("Item1");//创建第一个单选按钮 radioItem1.setBounds(new Rectangle2D.Float(baseX, baseY, 15, 15)); page.getCanvas().drawString("全日制", font, brush2, new Point2D.Float(baseX + 20, baseY)); PdfRadioButtonListItem radioItem2 = new PdfRadioButtonListItem("Item2");//创建第二个单选按钮 radioItem2.setBounds(new Rectangle2D.Float(baseX + 70, baseY, 15, 15)); page.getCanvas().drawString("成人教育", font, brush2, new Point2D.Float(baseX + 90, baseY)); radioButtonListField.getItems().add(radioItem1); radioButtonListField.getItems().add(radioItem2); radioButtonListField.setSelectedIndex(0);//选择填充第一个单选按钮 doc.getForm().getFields().add(radioButtonListField);//添加单选按钮到PDF baseY += 25; //添加组合框 page.getCanvas().drawString("最高学历:", font, brush1, new Point2D.Float(0, baseY)); Rectangle2D.Float cmbBounds = new Rectangle2D.Float(baseX, baseY, 150, 15);//创建cmbBounds对象 PdfComboBoxField comboBoxField = new PdfComboBoxField(page, "ComboBox");//创建comboBoxField对象 comboBoxField.setBounds(cmbBounds); comboBoxField.getItems().add(new PdfListFieldItem("博士", "item1")); comboBoxField.getItems().add(new PdfListFieldItem("硕士", "itme2")); comboBoxField.getItems().add(new PdfListFieldItem("本科", "item3")); comboBoxField.getItems().add(new PdfListFieldItem("大专", "item4")); comboBoxField.setSelectedIndex(0); comboBoxField.setFont(font); doc.getForm().getFields().add(comboBoxField);//添加组合框到PDF baseY += 25; //添加签名域 page.getCanvas().drawString("本人签字确认\n以上信息属实:", font, brush1, new Point2D.Float(0, baseY)); PdfSignatureField sgnField= new PdfSignatureField(page,"sgnField");//创建sgnField对象 Rectangle2D.Float sgnBounds = new Rectangle2D.Float(baseX, baseY, 150, 80);//创建sgnBounds对象 sgnField.setBounds(sgnBounds); doc.getForm().getFields().add(sgnField);//添加sgnField到PDF baseY += 90; //添加按钮 page.getCanvas().drawString("", font, brush1, new Point2D.Float(0, baseY)); Rectangle2D.Float btnBounds = new Rectangle2D.Float(baseX, baseY, 50, 15);//创建btnBounds对象 PdfButtonField buttonField = new PdfButtonField(page, "Button");//创建buttonField对象 buttonField.setBounds(btnBounds); buttonField.setText("提交");//设置按钮显示文本 buttonField.setFont(font); doc.getForm().getFields().add(buttonField);//添加按钮到PDF //保存文档 doc.saveToFile("result.pdf", FileFormat.PDF); } }
【示例2】加载并填充已有的表单域文档
import com.spire.pdf.FileFormat; import com.spire.pdf.PdfDocument; import com.spire.pdf.fields.PdfField; import com.spire.pdf.widget.*; public class FillFormField_PDF{ public static void main(String[] args){ //创建PdfDocument对象,并加载PDF文档 PdfDocument doc = new PdfDocument(); doc.loadFromFile("output.pdf"); //获取文档中的域 PdfFormWidget form = (PdfFormWidget) doc.getForm(); //获取域控件集合 PdfFormFieldWidgetCollection formWidgetCollection = form.getFieldsWidget(); //遍历域控件并填充数据 for (int i = 0; i < formWidgetCollection.getCount(); i++) { PdfField field = formWidgetCollection.get(i); if (field instanceof PdfTextBoxFieldWidget) { PdfTextBoxFieldWidget textBoxField = (PdfTextBoxFieldWidget) field; textBoxField.setText("吴 敏"); } if (field instanceof PdfCheckBoxWidgetFieldWidget) { PdfCheckBoxWidgetFieldWidget checkBoxField = (PdfCheckBoxWidgetFieldWidget) field; switch(checkBoxField.getName()){ case "CheckBox1": checkBoxField.setChecked(true); break; case "CheckBox2": checkBoxField.setChecked(true); break; } } if (field instanceof PdfRadioButtonListFieldWidget) { PdfRadioButtonListFieldWidget radioButtonListField = (PdfRadioButtonListFieldWidget) field; radioButtonListField.setSelectedIndex(1); } if (field instanceof PdfListBoxWidgetFieldWidget) { PdfListBoxWidgetFieldWidget listBox = (PdfListBoxWidgetFieldWidget) field; listBox.setSelectedIndex(1); } if (field instanceof PdfComboBoxWidgetFieldWidget) { PdfComboBoxWidgetFieldWidget comboBoxField = (PdfComboBoxWidgetFieldWidget) field; comboBoxField.setSelectedIndex(1); } } //保存文档 doc.saveToFile("FillFormFields.pdf", FileFormat.PDF); } }
【示例3】设置表单域编辑权限
import com.spire.pdf.PdfDocument; public class FieldReadonly_PDF { public static void main(String[] args) throws Exception { { //创建PdfDocument对象,并加载包含表单域的PDF文档 PdfDocument pdf = new PdfDocument(); pdf.loadFromFile("test.pdf"); //将文档中的所有表单域设置为只读 pdf.getForm().setReadOnly(true); //保存文档 pdf.saveToFile("result.pdf"); } }
生成的文档中,表单域将不可编辑,为只读状态。
(本文完)
相关推荐
在Java编程中,创建和填充PDF表单域是一项常见的任务,尤其在数据处理和报告生成领域。本篇文章将深入探讨如何使用Java实现这一功能,并提供一个详细的步骤和示例代码。 首先,表单域是PDF文档中用于用户交互的重要...
在Java开发中,处理PDF文件是一项常见的任务,包括转换PDF为图片以及对PDF进行域填充。这个封装好的工具类——EasyPDFUtil,提供了一种高效且便捷的方式来完成这些操作。以下是对这些功能的详细说明: 1. **PDF转...
该项目为基于Itext7的Java PDF表单域填充工具,源码包含24个文件,包括16个Java源文件、3个Markdown文档、1个Git忽略文件、1个许可证文件、1个PNG图片文件、1个XML文件、1个字体文件。通过命令行参数封装,用户可...
创建模板时,要确保每个表单域都有唯一的名称,以便于在编程时定位它们。 在编程层面,我们可以使用各种库或API来实现PDF模板的填充。这些库通常支持Java、Python、C#等编程语言。在这个案例中,我们关注的是Java...
Java 操作 PDF 表单是一项常见的任务,尤其在企业级应用中,经常需要对 PDF 文件进行数据填充、签名等操作。Java 提供了多种库来处理 PDF 文档,其中包括 Apache PDFBox、iText 和 Flying Saucer 等。在这个主题中,...
支持绘制文本,图像和形状到 PDF,从 PDF 文件中提取文本,创建和填充 PDF 表单域。 Free Spire.PDF for JAVA 支持创建 PDF/A-1 文档。 2. 高质量的 PDF 文档转换。 支持将 PDF 文档转换为 XPS,和高品质的图像文件...
Free Spire.PDF for JAVA可以支持许多功能,例如从PDF中提取文本,在PDF文档中绘制文本/图像/形状,创建和填充表单域,创建 PDF/A-1,添加和验证 PDF 数字签名。 此外,Free Spire.PDF for JAVA 支持将PDF 转换为...
itext7是一款功能强大的PDF处理库,支持Java等多种语言,能够帮助开发者轻松实现PDF的创建、修改等功能。 #### 二、需求分析 本案例的核心需求是根据已有的PDF模板来填充图片,并最终生成完整的PDF文档。这在实际...
Java实现PDF模板指定位置插入图片 Java语言是当今最流行的编程语言之一,对于PDF文档的处理有着非常广泛的应用。本文将详细介绍如何使用Java语言在PDF模板的指定位置插入图片,实现对PDF文档的自定义和编辑。 ...
4. **表单处理**:允许填充交互式表单字段,也可以创建和编辑Acrobat表单域。 5. **图像处理**:可以插入、提取、替换和旋转PDF文档中的图像,支持多种图像格式。 6. **安全与权限管理**:可以设置密码保护,限制...
6. **表单处理**:支持交互式PDF表单的创建、填充和导出,包括Acrobat表单域和数据的处理。 7. **安全性和权限管理**:设置PDF文档的访问密码,限制打印、复制、编辑等操作,以保护文档内容的安全。 8. **数字签名...
Acrobat表单提供了一种电子化填充PDF文档表单的能力,它允许在PDF文档上添加表单域和按钮,这实质上是在原始PDF文档之上增加了一个数据层。为了在客户端和服务器端之间传输表单数据,需要使用特定的数据传输格式,...
5. **使用iText处理PDF**:对于PDF文件,加载模板,然后使用iText的`PdfReader`和`PdfStamper`类找到并替换模板中的AcroFields(PDF表单域)。 6. **生成新文件**:完成替换后,使用POI或iText保存为新的Word或PDF...
itext对pdf进行编辑.使用Adobe对pdf创建表单,itext对表单填充,下拉选,单选,文本框.复选框.itext对pdf进行编辑.使用Adobe对pdf创建表单,itext对表单填充,下拉选,单选,文本框.复选框
iText提供了一套丰富的API来处理PDF表单,包括读取、修改和填充表单域。以下是一个基本的表单填充示例: 1. 加载PDF模板文件,获取AcroFields对象:`PdfReader reader = new PdfReader("template.pdf"); AcroFields...
5. **表单处理**:IText还支持创建和填充PDF表单。`AcroFields`类用于处理表单域,可以设置文本、选择或多选框的值。例如: ```java PdfReader reader = new PdfReader("template.pdf"); PdfStamper stamper = ...
4. **表单处理**:可以填充交互式PDF表单,提取数据或创建新的表单域。 5. **安全性**:提供数字签名和加密功能,保护PDF文档不被篡改。 6. **事件处理**:通过监听器机制,可以在PDF文档的不同阶段执行自定义操作,...
通过`AcroFields`类,可以添加、编辑和读取PDF表单域,包括文本框、复选框、单选按钮等。同时,还可以设置表单域的默认值、验证规则以及动作触发器,确保用户提交的数据符合预期。 四、PDF签名和安全 iTextPDF提供...
- **处理PDF表单**:iText也支持读写PDF表单域。 - **数字签名**:可以对PDF文档进行数字签名,以验证其完整性和来源。 在实际应用中,开发者通常会创建一个自定义的`PdfGenerator`类,封装上述操作,以便在不同...
它支持PDF的读写操作,可以插入图片、添加链接、创建表单域以及签署PDF文档。如果你需要对PDF进行更复杂的操作,如加密、解密或填充表单,iTextSharp是一个不错的选择。 4. **PDF Creator Pilot**: 这是一个用于...