好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

Java创建和填充PDF表单域方法

表单域,可以按用途分为多种不同的类型,常见的有文本框、多行文本框、密码框、隐藏域、复选框、单选框和下拉选择框等,目的是用于采集用户的输入或选择的数据。下面的示例中,将分享通过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表单域方法的详细内容...

  阅读:48次