表单域,可以按用途分为多种不同的类型,常见的有文本框、多行文本框、密码框、隐藏域、复选框、单选框和下拉选择框等,目的是用于采集用户的输入或选择的数据。下面的示例中,将分享通过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表单域
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 |
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.加载并填充已有的表单域文档
测试文档如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
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.限制表单域编辑(只读)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
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表单域方法的详细内容...