我的编程空间,编程开发者的网络收藏夹
学习永远不晚

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

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

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

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

概述

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

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

示例要点概括:

创建表单域

填充表单域

设置表单域只读

读取表单域值

工具

  • Free Spire.PDF for Java(免费版)

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

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

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

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

概述表单域,可以按用途分为多种不同的类型,常见的有文本框、多行文本框、密码框、隐藏域、复选框、单选框和下拉选择框等,目的是用于采集用户的输入或选择的数据。下面的示例中,将分享通过Java编程在PDF中创建、填充以及读取PDF表单域的方法。创
2023-06-02

怎么通过Java实现在Word中创建可填充表单

这篇文章主要讲解了“怎么通过Java实现在Word中创建可填充表单”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么通过Java实现在Word中创建可填充表单”吧!程序环境方法1:手动引入。
2023-07-05

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录