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