欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Java 创建、填充PDF表单域

程序员文章站 2022-04-28 13:48:48
表单域,可以按用途分为多种不同的类型,常见的有文本框、多行文本框、密码框、隐藏域、复选框、单选框和下拉选择框等,目的是用于采集用户的输入或选择的数据。下面的示例中,将分享通过Java编程在PDF中添加以及填充表单域的方法。这里填充表单域可分为2种情况,一种是在创建表单域时填充,一种是加载已经创建好表 ......

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

要点概括:

1.创建表单域

2.填充表单域

3.设置表单域只读

工具:free spire.pdf for java v2.0.0(免费版)

jar文件导入

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

Java 创建、填充PDF表单域

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

 Java 创建、填充PDF表单域

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

创建(填充)效果:

Java 创建、填充PDF表单域

2.加载并填充已有的表单域文档

测试文档如下:

 Java 创建、填充PDF表单域

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

填充效果:

 Java 创建、填充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");   
     }
  }

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

(本文完)

转载请注明出处!!