Java创建和填充PDF表单域方法
程序员文章站
2024-02-22 17:58:04
表单域,可以按用途分为多种不同的类型,常见的有文本框、多行文本框、密码框、隐藏域、复选框、单选框和下拉选择框等,目的是用于采集用户的输入或选择的数据。下面的示例中,将分享通...
表单域,可以按用途分为多种不同的类型,常见的有文本框、多行文本框、密码框、隐藏域、复选框、单选框和下拉选择框等,目的是用于采集用户的输入或选择的数据。下面的示例中,将分享通过java编程在pdf中添加以及填充表单域的方法。这里填充表单域可分为2种情况,一种是在创建表单域时填充,一种是加载已经创建好表单域的文档进行填充。此外,对于已经创建表单域并填写好的文档,也可以设置只读,防止修改、编辑。
要点概括:
1.创建表单域
2.填充表单域
3.设置表单域只读
工具:free spire.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; 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 其中翻转字符串的实现方法
下一篇: 详解Java语言中一个字符占几个字节?