1、Java 创建填充PDF表单域Java 创建、填充PDF表单域表单域,可以按用途分为多种不同的类型,常见的有文本框、多行文本框、密码框、隐藏域、复选框、单选框和下拉选择框等,目的是用于采集用户的输入或选择的数据。下面的示例中,将分享通过Java编程在PDF中添加以及填充表单域的方法。包括:文本框、复选框、单选按钮、列表框、组合框、签名域、按钮等。这里填充表单域可分为2种情况,一种是在创建表单域时填充,一种是加载已经创建好表单域的文档进行填充。此外,对于已经创建表单域并填写好的文档,也可以设置只读,防止修改、编辑。要点概括:1.创建表单域2.填充表单域3.设置表单域只读工具:Free Spire
2、.PDF for Java v2.0.0(免费版)Jar文件导入步骤1:在Java程序中新建一个文件夹可命名为Lib。并将产品包中的2个jar文件复制到新建的文件夹下。步骤2:复制文件后,添加到引用类库:选中这两个jar文件,点击鼠标右键,选择“Build Path” “Add to Build Path”。完成引用。Java代码示例(供参考)1.创建并填充PDF表单域import java.awt.*;import java.awt.geom.Point2D;import java.awt.geom.Rectangle2D;import com.spire.pdf.FileFormat;im
3、port 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.getPa
4、ges().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,
5、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.
6、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.geo
7、m.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.Recta
8、ngle2D.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.Fl
9、oat(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 listBoxFie
10、ld = 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); listB
11、oxField.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);/创建单选按钮对象 PdfRadioButto
12、nListItem 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);/创建第二个单选按钮
13、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);/选择填
14、充第一个单选按钮 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 Pd
15、fComboBoxField(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
16、(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 PdfSign
17、atureField(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,
18、 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().ad
19、d(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
20、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.getC
21、ount(); i+) PdfField field = formWidgetCollection.get(i); if (field instanceof PdfTextBoxFieldWidget) PdfTextBoxFieldWidget textBoxField = (PdfTextBoxFieldWidget) field; textBoxField.setText(吴 敏); if (field instanceof PdfCheckBoxWidgetFieldWidget) PdfCheckBoxWidgetFieldWidget checkBoxField = (PdfChe
22、ckBoxWidgetFieldWidget) field; switch(checkBoxField.getName() case CheckBox1: checkBoxField.setChecked(true); break; case CheckBox2: checkBoxField.setChecked(true); break; if (field instanceof PdfRadioButtonListFieldWidget) PdfRadioButtonListFieldWidget radioButtonListField = (PdfRadioButtonListFiel
23、dWidget) field; radioButtonListField.setSelectedIndex(1); if (field instanceof PdfListBoxWidgetFieldWidget) PdfListBoxWidgetFieldWidget listBox = (PdfListBoxWidgetFieldWidget) field; listBox.setSelectedIndex(1); if (field instanceof PdfComboBoxWidgetFieldWidget) PdfComboBoxWidgetFieldWidget comboBox
24、Field = (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); 生成的文档中,表单域将不可编辑,为只读状态。(本文完)
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1