【itext7】itext7操作PDF文档之添加表单控件(单行文本框、多行文本框、单选框、复选框、下拉框、按钮)

news2024/10/7 14:28:23

这篇文章,主要介绍itext7操作PDF文档之添加表单控件(单行文本框、多行文本框、单选框、复选框、下拉框、按钮)。

目录

一、itext操作PDF表单

1.1、添加单行文本框

1.2、添加多行文本框

1.3、添加单选框

1.4、添加复选框

1.5、添加下拉框

1.6、添加按钮


一、itext操作PDF表单

itext中将表单抽象成一个 PdfAcroForm 类,这是一个表单对象,在这个表单对象里面就可以添加各种表单组件,例如:添加单行文本框、添加多行文本框、添加单选按钮、添加多选按钮、添加下拉框、添加按钮等。itext中给我们提供了一些创建表单的类,例如:PdfTextFormField、PdfFormField,这些类中提供了很多的静态方法,可以创建各种类型的表单控件,PdfTextFormField类一般用于创建包含文本数据的表单控件,PdfFormField类一般用于创建单个字段或者字段组的控件。

下面就介绍一下itext7如何创建各种表单控件。

1.1、添加单行文本框

创建单行文本框是使用【PdfTextFormField.createText()】方法,这个方法需要指定表单的显示位置,表单域字段名称,PDF文档对象。

package itext.demo.basic.form;

import com.itextpdf.forms.PdfAcroForm;
import com.itextpdf.forms.fields.PdfTextFormField;
import com.itextpdf.kernel.geom.Rectangle;
import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfWriter;
import com.itextpdf.layout.Document;
import com.itextpdf.layout.element.Paragraph;

/**
 * @version 1.0.0
 * @Date: 2023/7/19 15:40
 * @Author ZhuYouBin
 * @Description: 添加表单
 */
public class SingleRowText {
    public static void main(String[] args) throws Exception {
        // 创建PDF文档
        PdfDocument pdfDocument = new PdfDocument(new PdfWriter("D:\\form.pdf"));
        Document document = new Document(pdfDocument);
        document.add(new Paragraph("aaa"));

        // 创建表单对象
        PdfAcroForm acroForm = PdfAcroForm.getAcroForm(pdfDocument, true);
        // 创建单行文本框对象
        Rectangle rectangle = new Rectangle(10, 20, 200, 20); // 显示位置
        PdfTextFormField username = PdfTextFormField.createText(pdfDocument, rectangle, "username");
        // 文本框添加到表单里面
        acroForm.addField(username);

        // 关闭文档
        document.close();
        pdfDocument.close();
    }
}

1.2、添加多行文本框

多行文本框可以使用【PdfTextFormField.createMultilineText()】方法实现,其实【PdfTextFormField.createText()】方法有一个参数也可以设置是否创建多行文本框。

package itext.demo.basic.form;

import com.itextpdf.forms.PdfAcroForm;
import com.itextpdf.forms.fields.PdfTextFormField;
import com.itextpdf.kernel.geom.Rectangle;
import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfWriter;
import com.itextpdf.layout.Document;
import com.itextpdf.layout.element.Paragraph;

/**
 * @version 1.0.0
 * @Date: 2023/7/19 15:40
 * @Author ZhuYouBin
 * @Description: 添加表单
 */
public class MultipleRowText {
    public static void main(String[] args) throws Exception {
        // 创建PDF文档
        PdfDocument pdfDocument = new PdfDocument(new PdfWriter("D:\\form.pdf"));
        Document document = new Document(pdfDocument);
        document.add(new Paragraph("aaa"));

        // 创建表单对象
        PdfAcroForm acroForm = PdfAcroForm.getAcroForm(pdfDocument, true);
        // 创建多行文本框对象
        Rectangle rectangle = new Rectangle(10, 20, 200, 100); // 显示位置
        PdfTextFormField username = PdfTextFormField.createMultilineText(pdfDocument, rectangle, "username", "");
        // 文本框添加到表单里面
        acroForm.addField(username);

        // 关闭文档
        document.close();
        pdfDocument.close();
    }
}

1.3、添加单选框

单选框使用【PdfFormField.createRadioButton()】方法创建,单选框可以有多个,这些单选框可以构成一个组,这一组中的单选框只能选中其中一个,单选框组采用【PdfFormField.createRadioGroup()】方法进行创建。

package itext.demo.basic.form;

import com.itextpdf.forms.PdfAcroForm;
import com.itextpdf.forms.fields.PdfButtonFormField;
import com.itextpdf.forms.fields.PdfFormField;
import com.itextpdf.kernel.geom.Rectangle;
import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfWriter;
import com.itextpdf.layout.Document;
import com.itextpdf.layout.element.Paragraph;

/**
 * @version 1.0.0
 * @Date: 2023/7/19 15:40
 * @Author ZhuYouBin
 * @Description: 添加表单
 */
public class RadioGroup {
    public static void main(String[] args) throws Exception {
        // 创建PDF文档
        PdfDocument pdfDocument = new PdfDocument(new PdfWriter("D:\\form.pdf"));
        Document document = new Document(pdfDocument);
        document.add(new Paragraph("aaa"));

        // 创建表单对象
        PdfAcroForm acroForm = PdfAcroForm.getAcroForm(pdfDocument, true);
        // 创建单选组对象
        PdfButtonFormField radioGroup = PdfFormField.createRadioGroup(pdfDocument, "radioGroup", "B");
        // 创建单选框对象
        PdfFormField radioButton1 = PdfFormField.createRadioButton(pdfDocument, new Rectangle(10, 20, 15, 15), radioGroup, "A");
        PdfFormField radioButton2 = PdfFormField.createRadioButton(pdfDocument, new Rectangle(40, 20, 15, 15), radioGroup, "B");
        PdfFormField radioButton3 = PdfFormField.createRadioButton(pdfDocument, new Rectangle(70, 20, 15, 15), radioGroup, "C");
        PdfFormField radioButton4 = PdfFormField.createRadioButton(pdfDocument, new Rectangle(100, 20, 15, 15), radioGroup, "D");
        // 单选框添加到表单里面
        acroForm.addField(radioGroup);

        // 关闭文档
        document.close();
        pdfDocument.close();
    }
}

运行结果如下所示:

1.4、添加复选框

复选框使用【PdfFormField.createCheckBox()】方法进行创建,复选框可以设置选中之后显示的图标样式,有6种可选样式,分别是:五角星、圆点、方块、勾号、叉号、菱形。

package itext.demo.basic.form;

import com.itextpdf.forms.PdfAcroForm;
import com.itextpdf.forms.fields.PdfButtonFormField;
import com.itextpdf.forms.fields.PdfFormField;
import com.itextpdf.kernel.geom.Rectangle;
import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfWriter;
import com.itextpdf.layout.Document;
import com.itextpdf.layout.element.Paragraph;

/**
 * @version 1.0.0
 * @Date: 2023/7/19 15:40
 * @Author ZhuYouBin
 * @Description: 添加表单
 */
public class CheckBox {
    public static void main(String[] args) throws Exception {
        // 创建PDF文档
        PdfDocument pdfDocument = new PdfDocument(new PdfWriter("D:\\form.pdf"));
        Document document = new Document(pdfDocument);
        document.add(new Paragraph("aaa"));

        // 创建表单对象
        PdfAcroForm acroForm = PdfAcroForm.getAcroForm(pdfDocument, true);
        // 创建复选框对象,选中取值是 Yes ,未选中取值是:Off
        PdfButtonFormField checkBox1 = PdfFormField.createCheckBox(pdfDocument, new Rectangle(10, 20, 15, 15), "checkBox1", "Yes", PdfFormField.TYPE_CHECK);
        PdfButtonFormField checkBox2 = PdfFormField.createCheckBox(pdfDocument, new Rectangle(40, 20, 15, 15), "checkBox2", "Yes", PdfFormField.TYPE_STAR);
        PdfButtonFormField checkBox3 = PdfFormField.createCheckBox(pdfDocument, new Rectangle(70, 20, 15, 15), "checkBox3", "Yes", PdfFormField.TYPE_CIRCLE);
        PdfButtonFormField checkBox4 = PdfFormField.createCheckBox(pdfDocument, new Rectangle(100, 20, 15, 15), "checkBox4", "Yes", PdfFormField.TYPE_DIAMOND);
        PdfButtonFormField checkBox5 = PdfFormField.createCheckBox(pdfDocument, new Rectangle(130, 20, 15, 15), "checkBox5", "Yes", PdfFormField.TYPE_SQUARE);
        PdfButtonFormField checkBox6 = PdfFormField.createCheckBox(pdfDocument, new Rectangle(160, 20, 15, 15), "checkBox6", "Yes", PdfFormField.TYPE_CROSS);
        // 复选框添加到表单里面
        acroForm.addField(checkBox1);
        acroForm.addField(checkBox2);
        acroForm.addField(checkBox3);
        acroForm.addField(checkBox4);
        acroForm.addField(checkBox5);
        acroForm.addField(checkBox6);

        // 关闭文档
        document.close();
        pdfDocument.close();
    }
}

运行结果如下所示:

1.5、添加下拉框

下拉框使用【PdfFormField.createComboBox()】方法进行创建,下拉框接收一个数组作为可选数据集合。

package itext.demo.basic.form;

import com.itextpdf.forms.PdfAcroForm;
import com.itextpdf.forms.fields.PdfChoiceFormField;
import com.itextpdf.forms.fields.PdfFormField;
import com.itextpdf.kernel.geom.Rectangle;
import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfWriter;
import com.itextpdf.layout.Document;
import com.itextpdf.layout.element.Paragraph;

/**
 * @version 1.0.0
 * @Date: 2023/7/19 15:40
 * @Author ZhuYouBin
 * @Description: 添加表单
 */
public class ComboBox {
    public static void main(String[] args) throws Exception {
        // 创建PDF文档
        PdfDocument pdfDocument = new PdfDocument(new PdfWriter("D:\\form.pdf"));
        Document document = new Document(pdfDocument);
        document.add(new Paragraph("aaa"));

        // 创建表单对象
        PdfAcroForm acroForm = PdfAcroForm.getAcroForm(pdfDocument, true);
        // 创建下拉选中框对象,选中取值是 Yes ,未选中取值是:Off
        String[] options = {"A", "B", "C", "D"};
        PdfChoiceFormField comboBox = PdfFormField.createComboBox(pdfDocument, new Rectangle(10, 20, 50, 20), "selection", "C", options);
        // 下拉选中框添加到表单里面
        acroForm.addField(comboBox);

        // 关闭文档
        document.close();
        pdfDocument.close();
    }
}

运行结果如下所示:

1.6、添加按钮

按钮使用【PdfFormField.createPushButton()】方法进行创建。

package itext.demo.basic.form;

import com.itextpdf.forms.PdfAcroForm;
import com.itextpdf.forms.fields.PdfButtonFormField;
import com.itextpdf.forms.fields.PdfFormField;
import com.itextpdf.kernel.geom.Rectangle;
import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfWriter;
import com.itextpdf.layout.Document;
import com.itextpdf.layout.element.Paragraph;

/**
 * @version 1.0.0
 * @Date: 2023/7/19 15:40
 * @Author ZhuYouBin
 * @Description: 添加表单
 */
public class Button {
    public static void main(String[] args) throws Exception {
        // 创建PDF文档
        PdfDocument pdfDocument = new PdfDocument(new PdfWriter("D:\\form.pdf"));
        Document document = new Document(pdfDocument);
        document.add(new Paragraph("aaa"));

        // 创建表单对象
        PdfAcroForm acroForm = PdfAcroForm.getAcroForm(pdfDocument, true);
        // 创建按钮对象
        PdfButtonFormField pushButton = PdfFormField.createPushButton(pdfDocument, new Rectangle(10, 20, 50, 20), "button", "submit");
        // 添加到表单里面
        acroForm.addField(pushButton);

        // 关闭文档
        document.close();
        pdfDocument.close();
    }
}

运行结果如下所示:

到此,itext操作PDF表单就介绍完啦。

综上,这篇文章结束了,主要介绍itext7操作PDF文档之添加表单控件(单行文本框、多行文本框、单选框、复选框、下拉框、按钮)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/778857.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

目标检测——SSD模型介绍

目录 SSD网络结构backboneextra部分loc和clsPriorBox层先验框的生成方法loc的预测结果 模型训练正负样本标记损失函数困难样本挖掘 模型预测 SSD网络结构 backbone extra部分 loc和cls PriorBox层先验框的生成方法 loc的预测结果 模型训练 正负样本标记 损失函数 困难样本挖掘…

rabbitmq访问异常

看到这个问题,第一时间想到rabbitmq的问题,应该权限导致的 先创建virtual hosts 接着创建用户并赋予权限,将eayc的virtual hosts权限赋予acc用户即可 15:34:24.250 WARN com.rabbitmq.client.impl.ForgivingExceptionHandler - An unexpected connec…

自动驾驶技术架构

自动驾驶技术架构 自动驾驶技术架构 自动驾驶关键技术 自动驾驶汽车技术架构较为复杂,涉及了多领域的交叉互容,例如汽车、交通、通信等,基于自动驾驶相关的软硬件、辅助开发工具、行业标准等各方面关键问题,自动驾驶汽车关键技术…

RedisTemplate存数据乱码

目录 方法一:为RedisTemplate写一个配置类 方法二:用StringRedisTemplate 我猜测,你可能想往redis里直接存对象,但是存完后,打开redis,才发现自己存进去的key和value均是乱码。 原因可能是因为你用redis…

24考研数据结构-——绪论2

目录 1.4 算法的时间复杂度1.4.1 渐近时间复杂度1.4.2 常对幂指阶1.4.3 时间复杂度的计算1.4.4 最好与最坏时间复杂度 1.5 算法的空间复杂度1.5.1 空间复杂度1.5.2 函数递归调用(未总结)1.5.3 存储地址1.5.3.1 内存高低地址与高低位1.5.3.2 用户程序虚拟…

【目标跟踪】1、基础知识

文章目录 一、卡尔曼滤波二、匈牙利匹配 一、卡尔曼滤波 什么是卡尔曼滤波?——状态估计器 卡尔曼滤波用于在包含不确定信息的系统中做出预测,对系统下一步要做什么进行推测,且会结合推测值和观测值来得到修正后的最优值卡尔曼滤波就是利用…

Hadoop——Hive运行环境搭建

Windows:10 JDK:1.8 Apache Hadoop:2.7.0 Apache Hive:2.1.1 Apache Hive src:1.2.2 MySQL:5.7 1、下载 Hadoop搭建 Apache Hive 2.1.1:https://archive.a…

基础 | 日志 | 体系介绍

INDEX 总览图上图的说明 总览图 上图的说明 日志体系的结构大约可以概括为 日志门面日志绑定层日志实现日志桥接层 slf4j 是 日志门面,所谓日志门面可以理解为日志总接口 slf4j-log4j、log4j-slf4j-impl 是 日志绑定层,日志绑定层的作用是将 日志门面…

嵌入式Linux开发常用命令以及工具总结

现在的Linux发行版诸如 Ubuntu、 CentOS、Fedora都具有图形界面环境,Linux 中的桌面环境(GNOME、Unity等)也是一个程序,它们是命令行的抽象,例如,当您通过单击“X”关闭窗口时,该操作会导致运行…

<C语言> 数据在内存中的存储

1.数据类型介绍 C语言中的基本内置类型如下: char //字符数据类型 short //短整型 int //整型 long //长整型 long long //更长的整型 float //单精度浮点数 double //双精度浮点数类型的意义: 1.使用这个类…

vue2如何将页面生成 pdf 导出 html2Canvas + jspdf

1.引入两个依赖 npm i html2canvas npm i jspdf 2.在utils文件夹下新建html2pdf.js文件 import html2canvas from html2canvas; import jsPDF from jspdf export const htmlToPDF async (htmlId, title "报表", bgColor "#fff") > { let pdfDom do…

Java使用 java.util.regex.Pattern 正则表达式校验参数值是否规范

场景: java中我们可以利用 Pattern 注解对某个入参进行规则校验,但有些特殊参数在接口入口处不方便校验,需要在代码中校验 一、使用 Pattern 注解校验 Pattern(regexp "^[a-zA-Z0-9]$", message "xxx号限输入字母、…

个人博客系统(SSM版 前端+后端)

前言 在学习Servlet的时候,也写了一个博客系统,主要的就是使用servelet加Tomcat进行实现的,而这个项目 仅仅适合去学习Web项目开发的思想,并不满足当下企业使用框架的思想,进行学习过Spring,Spring Boot,Spring MVC以及MyBatis之后,我们就可以对之前的项目使用SSM框架的形式进行…

Elasticsearch API(二)

文章目录 前言一、Elasticsearch指标ES支持的搜索类型ES的能力ES的写入实时性ES不支持事务 二、Elasticsearch名词节点(Node)角色(Roles)索引(index)文档(document) 三、Elasticsear…

126.【Redis 二刷】

Redis 二刷 (一)、认识NoSQL 与 SQL1.NoSQL与SQL的区别 (二)、认识Redis1.Redis 特征2.Redis安装及启动的三种方式 (基于Window)(1).命令行配置文件 3.Redis 客户端(1).命令行客户端(2).Redis可视化客户端 4.Redis 数据结构(1).Redis 通用命令(2).String 类型(3).Redis 的Key层…

【C++】list 模拟笔记

文章目录 list定义结点类(list_node)为什么封装迭代器为类 ?库里面模板多参数的由来 ?为什么普通迭代器不能隐式类型转换成const迭代器?迭代器位置指向及其返回值和整体代码 list list 和前面学习的 string 和 vector …

SAP HANA数据库学习

Systems介绍: Catalog下面存HANA的 Schema。 Content下面建package来 放view 。 Provisioning可以建虚拟表 数据源啥的。 Security下面 是用户角色和权限。 一个calculation view里面的scenario场景下都有啥呢? 首先是semantics下面的节点&#xff0…

跨网段耦合器的作用

你是否曾经遇到过需要跨网段访问设备的问题?比如在工业自动化领域,PLC和数控设备的连接。这时候,远创智控YC8000-NAT就能帮你轻松解决。 1, 远创智控YC8000-NAT是一款功能强大的设备,它可以将LAN1口所连接PLC的IP地址和端口号&a…

MySQL多版本并发控制原理(MVCC)

在数据库系统中,事务是指由一系列数据库操作组成的一个完整的逻辑过程,事务的基本特性是ACID: A : Atomicity (原子性) C: Consistency (一致性) I: Isolation (隔离性) D: 持久性(Durability) 由于大部分数据库都是高…

听GPT 讲K8s源代码--pkg(五)

在 Kubernetes 中,kubelet 是运行在每个节点上的主要组件之一,它负责管理节点上的容器,并与 Kubernetes 控制平面交互以确保容器在集群中按照期望的方式运行。kubelet 的代码位于 Kubernetes 代码库的 pkg/kubelet 目录下。 pkg/kubelet 目录…