【itext7】itext7操作PDF文档之添加段落文本内容、添加List列表、添加Image图片、添加Table表格

news2024/11/22 11:06:41

这篇文章,主要介绍itext7操作PDF文档之添加段落文本内容、添加List列表、添加Image图片、添加Table表格。

目录

一、itext7操作PDF内容

1.1、添加段落文本内容

1.2、添加列表内容

1.3、添加图片

1.4、添加表格

(1)列宽采用点单位(pt点单位)

(2)采用百分比单位(%百分比)


一、itext7操作PDF内容

1.1、添加段落文本内容

itext中将文本抽象为一个Text对象,这个Text属于叶子元素,不能直接添加到Document里面,必须先放入布局元素(layout元素)里面,然后再将布局元素加入到Document中。itext中采用Paragraph类表示段落,这是对一个段落文字的描述,例如:将Text对象先添加到Paragraph段落对象中,然后将Paragraph段落加入到Document里面。


package itext.demo.basic;

import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfWriter;
import com.itextpdf.layout.Document;
import com.itextpdf.layout.element.AreaBreak;
import com.itextpdf.layout.element.Paragraph;
import com.itextpdf.layout.element.Text;

import java.io.FileNotFoundException;

/**
 * @version 1.0.0
 * @Date: 2023/7/19 15:40
 * @Author ZhuYouBin
 * @Description: 文本内容操作
 */
public class TextOperation {
    public static void main(String[] args) throws FileNotFoundException {
        // 创建PDF文档
        PdfDocument pdfDocument = new PdfDocument(new PdfWriter("D:\\itext-content.pdf"));
        // 创建文档对象
        Document document = new Document(pdfDocument);
        // 创建文本对象
        Text text = new Text("hello world");
        // 创建段落
        Paragraph paragraph = new Paragraph();
        paragraph.add(text);
        // 将段落添加到文档上面
        document.add(paragraph);
        // 关闭文档
        document.close();
        pdfDocument.close();
    }
}

运行结果如下所示:

1.2、添加列表内容

itext中使用List类表示列表对象,列表可以有序列表、无序列表,列表中的每一项使用ListItem类表示,一个List列表可以包含多个ListItem列表项,List列表可以设置缩进、列表项的符号等。


package itext.demo.basic.text;

import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfWriter;
import com.itextpdf.layout.Document;
import com.itextpdf.layout.element.List;
import com.itextpdf.layout.element.ListItem;

import java.io.FileNotFoundException;

/**
 * @version 1.0.0
 * @Date: 2023/7/19 15:40
 * @Author ZhuYouBin
 * @Description: 添加列表内容
 */
public class TextOperation {
    public static void main(String[] args) throws FileNotFoundException {
        // 创建PDF文档
        PdfDocument pdfDocument = new PdfDocument(new PdfWriter("D:\\itext-content.pdf"));
        // 创建文档对象
        Document document = new Document(pdfDocument);
        // 创建List列表对象
        List list = new List();
        list.setSymbolIndent(12); // 设置列表项和符号之间的缩进距离
        list.setListSymbol("@"); // 设置列表项的符号
        // 创建列表项
        for (int i = 0; i < 5; i++) {
            list.add(new ListItem("this is 00" + i + " item。"));
        }
        // 将List列表添加到文档上面
        document.add(list);
        // 关闭文档
        document.close();
        pdfDocument.close();
    }
}

运行结果如下所示:

1.3、添加图片

itext中将图片抽象成一个Image对象,图片可以从URL、File等来源进行创建,Image类中的构造方法是protected修饰的,所以不能直接使用new关键字进行创建对象,可以使用itext中提供的ImageDataFactory工具类,这个类中提供了一个create()方法可以根据不同的来源创建图片对象。


package itext.demo.basic.text;

import com.itextpdf.io.image.ImageDataFactory;
import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfWriter;
import com.itextpdf.layout.Document;
import com.itextpdf.layout.element.Image;
import java.net.URL;

/**
 * @version 1.0.0
 * @Date: 2023/7/19 15:40
 * @Author ZhuYouBin
 * @Description: 添加图片
 */
public class TextOperation {
    public static void main(String[] args) throws Exception {
        // 创建PDF文档
        PdfDocument pdfDocument = new PdfDocument(new PdfWriter("D:\\itext-content.pdf"));
        // 创建文档对象
        Document document = new Document(pdfDocument);
        // 创建图片对象
        URL url = new URL("https://www.toopic.cn/public/uploads/small/1658043292312165804329268.png");
        Image image = new Image(ImageDataFactory.create(url));
        image.setAutoScale(true); // 设置宽高字段缩放

        URL url2 = new URL("https://www.toopic.cn/public/uploads/small/1658043887555165804388773.jpg");
        Image image2 = new Image(ImageDataFactory.create(url2));
        image2.setAutoScale(true); // 设置宽高字段缩放
        // 将图片添加到文档上面
        document.add(image);
        document.add(image2);
        // 关闭文档
        document.close();
        pdfDocument.close();
    }
}

运行结果如下所示(添加两张图片的效果):

1.4、添加表格

itext中将表格抽象成了Table类,表格就是一张二维表,由行和列组成,其中每一行每一列都是一个单元格,单元格使用Cell类表示。创建Table对象的时候,对应的构造方法必须指定表格中每一个单元格的宽度,列宽度的单位可以是pt、也可以设置百分比,推荐使用百分比单位。

(1)列宽采用点单位(pt点单位)


package itext.demo.basic.text;

import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfWriter;
import com.itextpdf.layout.Document;
import com.itextpdf.layout.element.Cell;
import com.itextpdf.layout.element.Div;
import com.itextpdf.layout.element.Paragraph;
import com.itextpdf.layout.element.Table;
import com.itextpdf.layout.property.UnitValue;

/**
 * @version 1.0.0
 * @Date: 2023/7/19 15:40
 * @Author ZhuYouBin
 * @Description: 添加表格【pt单位】
 */
public class TableDemo {
    public static void main(String[] args) throws Exception {
        // 创建PDF文档
        PdfDocument pdfDocument = new PdfDocument(new PdfWriter("D:\\itext-table.pdf"));
        // 创建文档对象
        Document document = new Document(pdfDocument);
        // 创建表格
        float[] columnWidths = new float[] {
                30, 50, 60, 20
        };
        Table table = new Table(columnWidths);
        // 设置表格宽度100%
        table.setWidth(UnitValue.createPercentValue(100));
        // 设置表格标题
        table.setCaption(new Div().add(new Paragraph("this is a caption of table")));
        // 添加表头单元格,上面设置了四列,超过四列会自动换行
        table.addHeaderCell(new Cell().add(new Paragraph("header-cell")));
        table.addHeaderCell(new Cell().add(new Paragraph("header-cell")));
        table.addHeaderCell(new Cell().add(new Paragraph("header-cell")));
        table.addHeaderCell(new Cell().add(new Paragraph("header-cell")));
        // 添加普通单元格
        table.addCell(new Cell().add(new Paragraph("cell")));
        table.addCell(new Cell().add(new Paragraph("cell")));
        table.addCell(new Cell().add(new Paragraph("cell")));
        table.addCell(new Cell().add(new Paragraph("cell")));
        // 添加表尾单元格
        table.addFooterCell(new Cell().add(new Paragraph("footer-cell")));
        table.addFooterCell(new Cell().add(new Paragraph("footer-cell")));
        table.addFooterCell(new Cell().add(new Paragraph("footer-cell")));
        table.addFooterCell(new Cell().add(new Paragraph("footer-cell")));
        // 添加表格到PDF文档
        document.add(table);
        // 关闭文档
        document.close();
        pdfDocument.close();
    }
}

运行结果如下所示:

(2)采用百分比单位(%百分比)


package itext.demo.basic.text;

import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfWriter;
import com.itextpdf.layout.Document;
import com.itextpdf.layout.element.Cell;
import com.itextpdf.layout.element.Div;
import com.itextpdf.layout.element.Paragraph;
import com.itextpdf.layout.element.Table;
import com.itextpdf.layout.property.UnitValue;

/**
 * @version 1.0.0
 * @Date: 2023/7/19 15:40
 * @Author ZhuYouBin
 * @Description: 添加表格【百分比单位】
 */
public class TableDemo {
    public static void main(String[] args) throws Exception {
        // 创建PDF文档
        PdfDocument pdfDocument = new PdfDocument(new PdfWriter("D:\\itext-table.pdf"));
        // 创建文档对象
        Document document = new Document(pdfDocument);
        // 创建百分比单位的列宽度
        UnitValue[] columnWidths = new UnitValue[] {
                UnitValue.createPercentValue(25),
                UnitValue.createPercentValue(25),
                UnitValue.createPercentValue(25),
                UnitValue.createPercentValue(25)
        };
        Table table = new Table(columnWidths);
        // 设置表格宽度100%
        table.setWidth(UnitValue.createPercentValue(100));
        // 设置表格标题
        table.setCaption(new Div().add(new Paragraph("this is a caption of table")));
        // 添加表头单元格,上面设置了四列,超过四列会自动换行
        table.addHeaderCell(new Cell().add(new Paragraph("header-cell")));
        table.addHeaderCell(new Cell().add(new Paragraph("header-cell")));
        table.addHeaderCell(new Cell().add(new Paragraph("header-cell")));
        table.addHeaderCell(new Cell().add(new Paragraph("header-cell")));
        // 添加普通单元格
        table.addCell(new Cell().add(new Paragraph("cell")));
        table.addCell(new Cell().add(new Paragraph("cell")));
        table.addCell(new Cell().add(new Paragraph("cell")));
        table.addCell(new Cell().add(new Paragraph("cell")));
        // 添加表尾单元格
        table.addFooterCell(new Cell().add(new Paragraph("footer-cell")));
        table.addFooterCell(new Cell().add(new Paragraph("footer-cell")));
        table.addFooterCell(new Cell().add(new Paragraph("footer-cell")));
        table.addFooterCell(new Cell().add(new Paragraph("footer-cell")));
        // 添加表格到PDF文档
        document.add(table);
        // 关闭文档
        document.close();
        pdfDocument.close();
    }
}

运行结果如下所示:

到此,itext操作PDF内容之添加段落、列表、图片、表格就介绍完啦。

综上,这篇文章结束了,主要介绍itext7操作PDF文档之添加段落文本内容、添加List列表、添加Image图片、添加Table表格。

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

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

相关文章

MySQL之索引(入门级讲解)

目录 一.索引的概念 1.1索引的简介 1.2.索引的优缺点 二.MySQL索引语法 2.1查看索引 2.2创建索引 2.2.1 创建表时创建索引 2.2.2存在的表上创建索引 2.3删除索引 三.索引的数据结构 3.1Btree索引 3.2Hash索引 3.4Hash索引和Btree索引的对比 &#x1f381;个…

基于Kitti数据集的智能驾驶目标检测系统(PyTorch+Pyside6+YOLOv5模型)

摘要&#xff1a;基于Kitti数据集的智能驾驶目标检测系统可用于日常生活中检测与定位行人&#xff08;Pedestrian&#xff09;、面包车&#xff08;Van&#xff09;、坐着的人&#xff08;Person Sitting&#xff09;、汽车&#xff08;Car&#xff09;、卡车&#xff08;Truck…

[2023新教程]M2 Mac安装Anaconda和Pytorch

本文首发于我的学习之路&#xff1a;https://liguang.wang/index.php/archives/80/ 1 背景 最近使用起了Mac Mini&#xff0c;需要安装Anaconda和Pytorch。网上的教程非常老旧&#xff0c;可读性较差&#xff0c;于是记录下自己的安装过程&#xff0c;分享给大家。 2 详细过…

二十三章:Gated-SCNN:Gated Shape CNNs for Semantic Segmentation ——用于语义分割的门控形状卷积神经网络

0.摘要 当前图像分割的最先进方法通过一个密集的图像表示来处理颜色、形状和纹理信息&#xff0c;这些信息都在深度卷积神经网络内部进行处理。然而&#xff0c;这种方法可能不太理想&#xff0c;因为它们包含了与识别相关的非常不同类型的信息。在这里&#xff0c;我们提出了一…

百度文心一言文心千帆大模型 ERNIE-Bot-turbo调用示例(golang版本)

百度的文心一言推出来也有一段时间了&#xff0c;但是接口部分一直没有公开&#xff0c;需要进行申请 最近&#xff0c;有朋友提供了文心千帆大模型的api权限&#xff0c;拿到了必须的参数&#xff0c;现在就来测试一下 下面是使用golang封装的文心千帆 ERNIE-Bot-turbo模型的调…

2023.7新版Pycharm没有Manager Repository(消失)下载镜像源问题

一、旧版本操作无法找到Manager Repository 二、解决方法---点击左侧键 三、点击添加设置小按钮 四、点击号复制进去镜像源网站即可 五、给大家推荐的镜像源网站 这里清华大学的镜像速度是最快的 https://pypi.tuna.tsinghua.edu.cn/simple/ 清华大学镜像http://pypi.douban…

天然气管道压力监测系统:管网安全守护者

随着我国工业的不断发展和能源需求的日益紧缺&#xff0c;天然气作为一种清洁能源正被广泛地开发和利用。然而。每年因天然气泄漏爆炸而造成的事故层出不穷&#xff0c;不仅威胁着人民的生命安全&#xff0c;还会对环境造成严重污染。面对这样的安全隐患&#xff0c;及时采取措…

Orangepi docker Home Assistant部署

手册上多数应用在树莓派用过&#xff0c;发现一个Home Assistant之前没搞过 按照手册先安装docker&#xff0c;使用enable_docker.sh 然后使用 docker run hello-world 来测试docker是否成功&#xff0c;如果hello from docker&#xff0c;即正常 通过以下docker命令搜索hom…

css - display属性

display属性有四个取值&#xff1a;block inline inline-block none 1、block display是类似于h和p标签在网页中默认显示方式&#xff0c;占据整整一行&#xff0c;所以不会与其他元素共同显示在一行之内。常见的block-display元素还有div、ol ul li、form等。如果想对某个blo…

【PHP面试题80】Redis消息发布与订阅功能怎么用的?

文章目录 &#x1f680;一、前言&#x1f680;二、PHP中安装Redis扩展&#x1f680;三、Redis消息发布与订阅&#x1f50e;3.1 创建发布者&#x1f50e;3.2 创建订阅者&#xff1a;&#x1f50e;3.3 运行发布者和订阅者&#xff1a; &#x1f680;四、总结 &#x1f680;一、前…

tomcat 使用部署

--烛光照亮了晚餐&#xff0c;照不出个答案。 不BB。 --部署web项目&#xff08;无 maven 纯web项目&#xff09; 直接把整个项目放到tomcat的webapps目录的下面然后重启tomcat即可 --部署html静态项目 直接把静态html放到tomcat的webapps目录下面即可&#xff0c;不要重命…

spring中bean实例化的三种方式 -- Spring入门(二)

文章目录 前言1.Bean实例化简介2.bean的实例化 -- 构造方法3.bean的实例化 -- 静态工厂实例化4.bean实例化 -- 实例工厂和FactoryBean5.三种bean实例化方式的区别 总结 前言 为了巩固所学的知识&#xff0c;作者尝试着开始发布一些学习笔记类的博客&#xff0c;方便日后回顾。…

JDBC之用IDEA连接SQLServer数据库实用教程

目录 前言 一、数据库准备 1.通过SQLServer配置管理器打开TCP/IP协议&#xff0c;设置状态为已启用 2.数据库登录模式设置为身份验证登录&#xff08;如果已经设置可忽略此步骤&#xff09; 3.下载SQLServer驱动jar包 二、IDEA准备 1.导入SQLServer驱动jar包 2.编写测试代…

【UE5 多人联机教程】02-开始游戏菜单控件

目录 步骤 一、完善开始游戏菜单控件 二、控件功能实现 2.1 “开始游戏”按钮切换界面 2.2 “创建房间”、“加入房间”按钮切换界面 2.3 “创建房间”按钮 步骤 一、完善开始游戏菜单控件 打开“UMG_Main” 首先在控件切换器外层包裹一个画布面板 然后调整控件切换器全…

Docker-volume【基础使用】

目录 【1】将本地的目录挂载到容器中 【2】volume卷&#xff0c;持久化 【3】volume数据共享 【4】volume持久化的作用 【5】volume - 随机卷的使用方式 【6】 启动nginx容器访问80出现HELLO&#xff0c;访问81出现WORLD 【1】将本地的目录挂载到容器中 1、容器的数据目录…

第112天:免杀对抗-加载器分离无文件落地图片隐写SOCK管道参数协议化

知识点 #知识点&#xff1a; 1、无文件落地&分离拆分-将shellcode从文本中提取-file 2、无文件落地&分离拆分-将shellcode与加载器分离-argv 3、无文件落地&分离拆分-将shellcode远程协议加载-http 4、无文件落地&分离拆分-将shellcode通过管道传输-socket 5、…

设计模式与技术场景面试题详解

工厂方法模式 简单工厂模式 工厂方法模式 抽象工厂模式 策略模式 工厂模式策略模式&#xff08;登录案例&#xff09; 责任链模式 技术场景 单点登录怎么实现 权限认证是如何实现的 上传数据的安全性你们怎么控制 你负责的项目遇到了哪些棘手的问题&#xff1f;怎么解决的 你们…

Vue系列第二篇:初识Vue项目

上一篇我搭建了Vue开发环境&#xff0c;创建了一个demo项目&#xff0c;借助nginx将Vue项目编译部署。这一篇来看一下Vue项目的结构。如下图所示&#xff1a; 我就创建一个空项目&#xff0c;结果Vue脚手架就帮我自动生成了这么多文件&#xff0c;看着挺吓人的。不用怕&#xf…

第十一章、【Linux】正则表达式与文件格式化处理

正则表达式 &#xff08;Regular Expression, RE, 或称为常规表达式&#xff09;是通过一些特殊字符的排列&#xff0c;用以“搜寻/取代/删除”一列或多列文字字串&#xff0c; 简单的说&#xff0c;正则表达式就是用在字串的处理上面的一项“表示式”。正则表达式并不是一个工…

「网络编程」传输层协议_ TCP协议学习_及原理深入理解(一)[万字详解]

「前言」文章内容大致是传输层协议&#xff0c;TCP协议讲解&#xff0c;续上篇UDP协议。 「归属专栏」网络编程 「主页链接」个人主页 「笔者」枫叶先生(fy) 目录 一、TCP协议介绍二、TCP协议2.1 解包与分用2.2 谈谈可靠性2.3 TCP的工作模式2.4 确认应答(ACK)机制2.5 16位序号与…