表單域,可以按用途分為多種不同的類型,常見的有文本框、多行文本框、密碼框、隱藏域、復選框、單選框和下拉選擇框等,目的是用于采集用戶的輸入或選擇的數據。下面的示例中,將分享通過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" ); } } |
生成的文檔中,表單域將不可編輯,為只讀狀態