表单域,可以按用途分为多种不同的类型,常见的有文本框、多行文本框、密码框、隐藏域、复选框、单选框和下拉选择框等。下面的示例中,将分享通过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表单域方法和步骤,有需要的朋友们学习下。
封装好的工具类,静态方法直接调用,支持pdf转图片,可设置清晰度。支持模板pdf域的填充。传入pdf文件路径和map,调用方法即可将map内容填充到pdf,并重新生成新的pdf文件
支持绘制文本,图像和形状到 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 转换为...
由pdf模板生成目标pdf文件,pdf模板需要使用Adobe Acrobat软件进行编辑生成目标域,然后使用程序进行填充
java+springboot电子合同pdf表单json模板生成,填充pdf表单,图片签名以及pdf签名工具类,核心能力pdf功能
主要为大家详细介绍了java如何实现在pdf模板的指定位置插入图片,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
2.使用poi填充word报表标签及表格数据技术,解决标签替换不生效、不到位、替换错误,中文乱码等常见问题。 3.使用jacob操作com组件技术将word转为PDF文件,解决转换后部分中文丢失、乱码、表格丢失、转换后失真等...
以生成工资条为例,演示了通过PageOffice开发平台,用Java语言实现Word文档的在线打开、编辑和保存,数据区域数据的动态填充和提交,数据区域插入Word文件,动态填充和提交Word文件中Tabel的数据
生成pdf的中文问题解决办法、itextpdf技术对一个pdf中含有pdf表单的字段进行对应的填充
内容概要:通过纯java后端生成pdf模板,以及如何把数据填充到pdf模板,并生成pdf文件。可以学到什么:通过该demo,可以了解java如何创建pdf,pdf相关的类。为后端小伙伴解决后端生成pdf的相关问题。
因为项目需要用到pdf模板生成pdf,其中模板中有图片,找了好久没有资料,无奈之下翻看api和源码,给大家分享下
使用java编程 多边形画法:先选择画图中的多边形,然后在面板里单击鼠标左键,画点,双击,将点按顺序连接成多边形 图形颜色和填充颜色均可以选择,预定义为红色和蓝色。 扫描线种子填充的算法适合于任意图形,不会...
java poi 填充word(合并单元格,添加图片,设置字号)(csdn)————程序
java用填充多边形的方法填充一个三角形 主要代码: Icon icon = new Icon() { @Override public void paintIcon(Component c, Graphics g, int x, int y) { Graphics2D g2d = (Graphics2D) g; ...
Excel填充数据封装(java) 分页写入 方法反射的使用
支持的功能如下: PDF 文档安全性设置,画文本、图片、形状、条形码到 PDF,提取 PDF 中的文本/图片,高亮/替换 PDF 文本,合并和拆分 PDF,创建和填充表单,添加页眉页脚到 PDF,添加或删除层,重叠 PDF 页面,添加...
VeryPDF PDF Form Filler 是专为商业用户开发的自动填表工具,无需专业的PDF编辑器软件即可轻松填写...用户可以保存已填充的PDF表单,以用加密覆盖原始的PDF文件或新的PDF文件。 【功能特点】 编辑各种表单项
图片特效 纹理填充特效
java 使用IText导出PDF(包含图片、表格、文字等等Demo和依赖包),最全IText使用Demo,下载即可用