表单域,可以按用途分为多种不同的类型,常见的有文本框、多行文本框、密码框、隐藏域、复选框、单选框和下拉选择框等,目的是用于采集用户的输入或选择的数据。下面的示例中,将分享通过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" ); } } |
生成的文档中,表单域将不可编辑,为只读状态