博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java 创建、填充PDF表单域
阅读量:5077 次
发布时间:2019-06-12

本文共 8902 字,大约阅读时间需要 29 分钟。

表单域,可以按用途分为多种不同的类型,常见的有文本框、多行文本框、密码框、隐藏域、复选框、单选框和下拉选择框等,目的是用于采集用户的输入或选择的数据。下面的示例中,将分享通过Java编程在PDF中添加以及填充表单域的方法。这里填充表单域可分为2种情况,一种是在创建表单域时填充,一种是加载已经创建好表单域的文档进行填充。此外,对于已经创建表单域并填写好的文档,也可以设置只读,防止修改、编辑。

要点概括:

1.创建表单域

2.填充表单域

3.设置表单域只读

工具:

  • (免费版)

Jar文件导入

步骤1Java程序中新建一个文件夹可命名为Lib。并将产品包中的jar文件复制到新建的文

 

步骤2复制文件后,添加到引用类库:选中这个jar文件,点击鼠标右键,选择“Build Path” – “Add to Build Path”。完成引用。

 

 

Java代码示例(供参考)

1.创建并填充PDF表单域

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.加载并填充已有的表单域文档

测试文档如下:

 

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.限制表单域编辑(只读)

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");        }  }

生成的文档中,表单域将不可编辑,为只读状态。

(本文完)

转载请注明出处!!

 

转载于:https://www.cnblogs.com/Yesi/p/10309396.html

你可能感兴趣的文章
url查询参数解析
查看>>
http://coolshell.cn/articles/10910.html
查看>>
[转]jsbsim基础概念
查看>>
JSP作业3-金字塔
查看>>
Generate BKS File( Bouncy Castle KeyStore)
查看>>
obdg反汇编破解crackme
查看>>
Python作业1 登录程序
查看>>
js弹出模态与非模态页面
查看>>
第四讲 深入介绍信号与槽
查看>>
javascript是做什么的
查看>>
探究QA职能
查看>>
图片加载框架之Glide和Picasso
查看>>
wtforms Form实例化流程(源码解析)
查看>>
[查询]计算机信息系统集成项目经理资质名单网址
查看>>
Android开发之AlarmManager具体解释
查看>>
3.14 下午
查看>>
apc
查看>>
[转]tx:advice标签简介
查看>>
my project 中git使用过程(基本操作流程)
查看>>
spring mvc提交日期类型参数
查看>>