文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Java 创建、填充、读取PDF表单域

2023-06-02 12:05

关注

概述

表单域,可以按用途分为多种不同的类型,常见的有文本框、多行文本框、密码框、隐藏域、复选框、单选框和下拉选择框等,目的是用于采集用户的输入或选择的数据。

下面的示例中,将分享通过Java编程在PDF中创建、填充以及读取PDF表单域的方法。创建表单域包括文本框、复选框、单选按钮、列表框、组合框、签名域、按钮等。填充表单域时可分为2种情况,一种是在创建表单域时填充,一种是加载已经创建好表单域的文档进行填充;对于已经创建表单域并填写好的文档,也可以设置只读,防止修改、编辑等;读取表单域时,可获取指定(可通过索引值或表单域名称)表单域的值,或者获取文档中所有表单域的值。

示例要点概括:

创建表单域

填充表单域

设置表单域只读

读取表单域值

工具

Jar文件获取及导入:

方法1: 通过官网下载jar文件包。下载后,解压文件,并将lib文件夹下的Spire.Pdf.jar文件导入到java程序。

方法2: 通过maven仓库安装导入。

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 brush2 = new PdfSolidBrush(new PdfRGBColor(Color.BLUE));        PdfSolidBrush brush3 = 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, brush2, 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, brush2, 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, brush3, 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,  brush3, new Point2D.Float(baseX+90, baseY));              doc.getForm().getFields().add(checkBoxField);//添加复选框到PDF        baseY += 25;         //添加列表框        page.getCanvas().drawString("录取批次:", font, brush2, 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, brush2, 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, brush3, 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, brush3, 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, brush2, 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, brush2, 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, brush2, 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");        }  }

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

【示例4】获取表单域值

     1. 获取指定表单域值

 import com.spire.pdf.PdfDocument; import com.spire.pdf.widget.PdfFormWidget; import com.spire.pdf.widget.PdfTextBoxFieldWidget;  import java.io.FileWriter; import java.io.IOException;  public class GetSpecificFormfieldValue {     public static void main(String[] args) {         //加载PDF文档         PdfDocument pdf = new PdfDocument();         pdf.loadFromFile("test.pdf");          //获取表单域         PdfFormWidget formWidget = (PdfFormWidget)pdf.getForm();          //通过索引值来获取指定表单域中的值         PdfTextBoxFieldWidget textbox = ( PdfTextBoxFieldWidget)formWidget.getFieldsWidget().get(0);         //PdfTextBoxFieldWidget textbox = ( PdfTextBoxFieldWidget)formWidget.getFieldsWidget().get("TextBox");//通过表单域名称来获取值          //将获取的值写入txt文档         String text = textbox.getText();         try {             //将文本写入 .txt文件             FileWriter writer = new FileWriter("GetSpecificFormfieldValue.txt");             writer.write(text);             writer.flush();         } catch (IOException e) {             e.printStackTrace();         }         pdf.close();     } }

指定表单域值获取结果:

Java 创建、填充、读取PDF表单域

    2. 获取全部表单域值

 import com.spire.pdf.PdfDocument; import com.spire.pdf.fields.PdfField; import com.spire.pdf.widget.*;  import java.io.FileWriter; import java.io.IOException;  public class GetAllFormfieldValue {     public static void main(String[] args) {         //加载PDF文档         PdfDocument pdf = new PdfDocument();         pdf.loadFromFile("测试.pdf");          //获取表单域         PdfFormWidget formWidget = (PdfFormWidget)pdf.getForm();         StringBuilder sb = new StringBuilder();          //遍历表单域控件集合并提取所有表单的值         for (int i = 0; i < formWidget.getFieldsWidget().getCount(); i++)         {             PdfField field = (PdfField)formWidget.getFieldsWidget().getList().get(i);              //获取文本框的值             if (field instanceof PdfTextBoxFieldWidget)             {                 PdfTextBoxFieldWidget textBoxField = (PdfTextBoxFieldWidget)field ;                 String text = textBoxField.getText();                 sb.append("文本框内容: " + text + "\r\n");             }              //获取列表框的值             if (field instanceof PdfListBoxWidgetFieldWidget)             {                 PdfListBoxWidgetFieldWidget listBoxField = (PdfListBoxWidgetFieldWidget)field;                  //获取列表框中选中的值                 String selectedValue = listBoxField.getSelectedValue();                 sb.append("列表框选中的内容: " + selectedValue + "\r\n");                  //获取列表框中的所有选项值                 sb.append("列表框内容: \r\n");                 PdfListWidgetItemCollection items = listBoxField.getValues();                 for (PdfListWidgetItem item : (Iterable<PdfListWidgetItem>) items)                 {                     sb.append(item.getValue() + "\r\n");                 }             }              //获取组合框的值             if (field instanceof PdfComboBoxWidgetFieldWidget)             {                 PdfComboBoxWidgetFieldWidget comBoxField = (PdfComboBoxWidgetFieldWidget)field ;                  //获取组合框中选中的值                 String selectedValue = comBoxField.getSelectedValue();                 sb.append("组合框选中的内容: " + selectedValue + "\r\n");                  //获取组合框中所有选项值                 sb.append("组合框内容: \r\n");                 PdfListWidgetItemCollection items = comBoxField.getValues();                 for (PdfListWidgetItem item : (Iterable<PdfListWidgetItem>) items)                 {                     sb.append(item.getValue() + "\r\n");                 }             }              //获取单选按钮值             if (field instanceof PdfRadioButtonListFieldWidget)             {                 PdfRadioButtonListFieldWidget radioBtnField = (PdfRadioButtonListFieldWidget)field;                 String Value = radioBtnField.getValue();                 sb.append("单选按钮内容: " + Value + "\r\n");             }              //获取复选框值             if (field instanceof PdfCheckBoxWidgetFieldWidget)             {                 PdfCheckBoxWidgetFieldWidget checkBoxField = (PdfCheckBoxWidgetFieldWidget)field;                 //获取复选框的选中状态                 boolean state = checkBoxField.getChecked();                 sb.append("复选框是否被选中? " + state + "\r\n");             }         }          try {             //将文本写入 .txt文件             FileWriter writer = new FileWriter("GetAllFormfieldValues.txt");             writer.write(sb.toString());             writer.flush();         } catch (IOException e) {             e.printStackTrace();         }         pdf.close();     } }

表单域读取结果:

Java 创建、填充、读取PDF表单域

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯