掌握iText:轻松处理PDF文档-基础篇

关于iText
iText是一个强大的PDF处理库,可以用于创建、读取和操作PDF文件。它支持PDF表单、加密和签署等操作,同时支持多种字体和编码。maven的中央仓库中的最新版本是5.X,且iText5不是完全免费的,但是基础能力是免费使用的,不过需要遵循AGPLv3协议。iText7是iText5的后继版本,相比之下有更好的性能和更全面的PDF支持。在实际开发中,可以根据需求选择不同的iText版本。
iText核心功能
iText是一个用于在Java中创建和操作PDF文件的开源库。以下是iText的一些主要功能:
- 创建PDF文档:iText可以创建新的PDF文档,并提供了多种方法来添加文本、图像、表格和其他内容。
- 读取和解析PDF文档:iText可以读取和解析现有的PDF文档,提取文本、图像和其他元素。
- 编辑PDF文档:iText可以编辑现有的PDF文档,例如添加水印、合并多个文档、添加页眉和页脚等。
- 加密和解密PDF文档:iText可以对PDF文档进行加密和解密,提供了多种加密算法和安全选项。
- 签名和验证PDF文档:iText可以添加数字签名到PDF文档,并验证文档的完整性。
- 拆分和合并PDF文档:iText可以将PDF文档拆分成单个页面或合并多个文档。
- 压缩和解压缩PDF文档:iText可以压缩和解压缩PDF文档,以减小文件大小。
- 创建和填充PDF表单:iText可以创建和填充PDF表单,包括文本框、单选框、复选框等。
- 生成条形码和二维码:iText可以生成条形码和二维码,并将其添加到PDF文档中。
- 自定义字体和样式:iText支持自定义字体和样式,允许您使用自己的字体、字号和样式来创建PDF文档。
 至于收费功能,iText提供了一个商业版本的软件,称为iText Enterprise Edition。这个版本提供了一些额外的功能,例如高级的加密和安全性选项、高级的表单生成选项、高级的文档处理功能等。这些功能在开源版本的iText中可能不可用或受到限制。
iText的依赖
- itextpdf.jar是iText的核心库,提供了用于创建和操作PDF文档的基本功能。
- itext-asian.jar是itext库中关于亚洲编码的类库,特别适用于处理中文字符。
<dependency><groupId>com.itextpdf</groupId><artifactId>itextpdf</artifactId><version>5.5.13.3</version>
</dependency>
<dependency><groupId>com.itextpdf</groupId><artifactId>itext-asian</artifactId><version>5.2.0</version>
</dependency>
实战示例
创建pdf文档并添加文本
1.创建一个Document对象实例。
 2.创建一个PdfWriter对象,并将其与Document对象关联,以便将文档写入硬盘。
 3.打开Document对象,以便可以向其中添加内容。
 4.向Document对象添加文本内容。这可以通过创建Paragraph对象并使用Document对象的add()方法来完成。
 5.关闭Document对象,以完成PDF文档的创建。
@Test
public void test0() {try {Document document = new Document();PdfWriter.getInstance(document, new FileOutputStream("d:/test/hello.pdf"));document.open();Element element = new Paragraph("hello, baby!");document.add(element);document.close();} catch (DocumentException e) {e.printStackTrace();} catch (FileNotFoundException e) {e.printStackTrace();}
}
创建pdf文档并添加图片
与添加文本内容的过程比较类似,唯一不同的是,这里添加到文档中的是图片。在实际的业务开发过程中,如果默认使用图片原始的心都,可能会导致在文档中的图片过大或过小,都不好看,最好根据页面的宽度进行一定比例的自适应,这里介绍一种方法:
 1.先获取图片的原始宽度和高度
 2.再获取PDF页面的宽度和高度
 3.然后根据页面宽度计算图片的缩放比例
 4.最后根据缩放比例计算图片的新宽度和高度,并重新设置图片的宽度和高度;
@Test
public void test2() {try {Document document = new Document();PdfWriter pdfWriter = PdfWriter.getInstance(document, new FileOutputStream("d:/test/hello2.pdf"));document.open();Image image = Image.getInstance("d:/test/dog.jpg");// 获取图片的原始宽度和高度float originalWidth = image.getWidth();float originalHeight = image.getHeight();// 获取PDF页面的宽度和高度Rectangle pageSize = document.getPageSize();float pageWidth = pageSize.getWidth();// 根据页面宽度计算图片的缩放比例float scaleRatio = pageWidth / originalWidth;// 根据缩放比例计算图片的新宽度和高度float newWidth = originalWidth * scaleRatio;float newHeight = originalHeight * scaleRatio;// 设置图片的新宽度和高度,并保持纵横比不变image.scaleToFit(newWidth, newHeight);image.setAlignment(Element.ALIGN_CENTER);document.add(image);document.close();} catch (DocumentException e) {e.printStackTrace();} catch (FileNotFoundException e) {e.printStackTrace();} catch (MalformedURLException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}
}
创建pdf文档并添加表格
1.创建PDF文档对象。使用Document类创建一个新的PDF文档对象,并打开它。
 2.创建表格对象。使用PdfPTable类创建一个新的表格对象,并设置表格的列数和其他属性。
 3.向表格中添加内容。使用PdfPCell类创建单元格对象,并将它们添加到表格中。可以设置单元格的文本、样式和布局等属性。这里需要注意的是:在iText中并没有行的概念,设置完表格的列数后,就是从左至右开始添加单元格内的内容,一般第一行是表头。
 4.将表格添加到文档中。使用Document类的add()方法将表格添加到文档中。
 5.关闭文档。使用Document类的close()方法关闭文档,并保存到指定的文件路径。
@Test
public void test3() {try {Document document = new Document();PdfWriter.getInstance(document, new FileOutputStream("d:/test/hello3.pdf"));document.open();// 创建PdfPTable对象并设置列宽度和间距PdfPTable table = new PdfPTable(3);float[] columnWidths = {1f, 1f, 1f};table.setWidths(columnWidths);table.setSpacingAfter(10f);table.setWidthPercentage(100); // 设置表格宽度占页面宽度的百分比为100%// 添加表头行PdfPCell headerCell1 = new PdfPCell(new Paragraph("realName"));headerCell1.setBackgroundColor(BaseColor.LIGHT_GRAY);table.addCell(headerCell1);PdfPCell headerCell2 = new PdfPCell(new Paragraph("age"));headerCell2.setBackgroundColor(BaseColor.LIGHT_GRAY);table.addCell(headerCell2);PdfPCell headerCell3 = new PdfPCell(new Paragraph("sex"));headerCell3.setBackgroundColor(BaseColor.LIGHT_GRAY);table.addCell(headerCell3);// 添加数据行table.addCell("zhangsan");table.addCell("18");table.addCell("boy");// 将表格添加到文档中document.add(table);// 关闭文档对象document.close();} catch (Exception e) {e.printStackTrace();}
}
读取pdf内的文本
1.创建一个PDF读取器对象(PdfReader):
 2.创建一个PdfTextExtractor对象:
 3.逐页提取文本:
 4.关闭PDF读取器:
@Test
public void test6() {try {PdfReader pdfReader = new PdfReader(new FileInputStream("d:/test/hello5.pdf"));int numberOfPages = pdfReader.getNumberOfPages();for (int i = 0; i < numberOfPages; i++) {String textFromPage = PdfTextExtractor.getTextFromPage(pdfReader, i + 1);System.out.println(textFromPage);}} catch (Exception e) {e.printStackTrace();}
}
下一篇:掌握iText:轻松处理PDF文档-进阶篇
相关文章:
 
掌握iText:轻松处理PDF文档-基础篇
关于iText iText是一个强大的PDF处理库,可以用于创建、读取和操作PDF文件。它支持PDF表单、加密和签署等操作,同时支持多种字体和编码。maven的中央仓库中的最新版本是5.X,且iText5不是完全免费的,但是基础能力是免费使用的&…...
 
小红书民宿文案怎么写?建议收藏
随着民宿市场的日益火爆,如何在众多民宿中脱颖而出,吸引更多租客入住,成为摆在每一位民宿业主面前的难题。一篇优质的小红书民宿文案,不仅能吸引潜在租客的关注,还能提高民宿的知名度。本文伯乐网络传媒将从八个方面教…...
 
C#教程(一):面向对象
1、介绍 C#是一种多范式编程语言,但其中一个主要的编程范式是面向对象编程(OOP)。面向对象编程有一些特点,而C#提供了丰富的功能来支持这些特点。 2、面向对象特点 封装(Encapsulation): 封装…...
Linux系统中部署minio服务、开启反向代理、二级域名SSL加固
链接: B站1小时-配置指导视频: 一、创建minio 文件目录(/project/minio) 二、下载Minio wget https://dl.min.io/server/minio/release/linux-amd64/minio 三、在minio目录中-创建日志文件 四、对minio(可以理解为windows系统中的.exe可执行文件) 进行授权 chmod 777 min…...
 
PMP备考总结:项目管理PMP考试提高通过率,轻松上岸~
分享一篇左羊学霸的备考总结,希望能帮到正在备考的友友们~ 前言 作为⼀名通过PMP项⽬管理认证并且拿到3A成绩 ( PMP认证最好成绩) 的 学习者, 来跟⼤家分享下我考取PMP证书的动机与过程 。考证不是主要⽬ 的, 在考证的过程深化⾃⼰的项⽬管理…...
shell脚本中获取当前脚本的绝对路径
说明: PWD 是获取当前脚本的执行路径的,下面的方式是获取文件绝对路径的。 话不多说,直接上硬货!!! #!/bin/bashecho "执行路径 $PWD"absolute_path$(readlink -f "$0") # 获取目录路径 directory$(dirname "$absolute_path&q…...
 
SSD基础架构与NAND IO并发问题探讨
在我们的日常生活中,我们经常会遇到一些“快如闪电”的事物:比如那场突如其来的雨、那个突然出现在你眼前的前任、还有就是今天我们要聊的——固态硬盘(SSD)。 如果你是一个技术宅,或者对速度有着近乎偏执的追求&…...
 
激光雷达反射率定标板如何提取障碍信息
随着信息科技技术的发展,自动驾驶技术在移动机器人等智能移动设备领域得到广泛应用。智能移动设备不仅减少了人力劳动,方便生活,而且提高了工作效率。激光雷达作为自动驾驶技术的核心避障传感器,得到迅速发展。 激光雷达通过对发射…...
 
【开源】基于JAVA的桃花峪滑雪场租赁系统
项目编号: S 036 ,文末获取源码。 \color{red}{项目编号:S036,文末获取源码。} 项目编号:S036,文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 游客服务2.2 雪场管理 三、数据库设…...
 
将VOC2012格式的数据集转为YOLOV8格式
文章目录 简介1.数据集格式1.1数据集目录格式对比1.2标签格式对比 2.格式转换脚本3.文件处理脚本 简介 将voc2012中xml格式的标签转为yolov8中txt格式将转换后的图像和标签按照yolov8训练的要求整理为对应的目录结构 1.数据集格式 1.1数据集目录格式对比 (1&…...
 
DevExpress WinForms Pivot Grid组件,一个类似Excel的数据透视表控件(二)
界面控件DevExpress WinForms的Pivot Grid组件是一个类似Excel的数据透视表控件,用于多维(OLAP)数据分析和跨选项卡报表。在上文中(点击这里回顾>>)我们介绍了DevExpress WinForms Pivot Grid组件的性能、分析服务、数据塑造能力等&…...
 
为什么越来越多的人从事软件测试行业?
1.市场需求增加:随着数字化转型和互联网的普及,各行各业都需要高质量、稳定可靠的软件来支持其业务运作。因此,对软件测试人员的需求也随之增加。同时,新兴技术的发展,如物联网、大数据、区块链、人工智能等࿰…...
ERP数据仓库模型
ERP数据仓库模型建设是一个复杂的过程,涉及到多个主题域。以下是一个详细的设计方案: 确定业务需求和目标 在开始设计数据仓库模型之前,需要了解企业的业务需求和目标。这包括了解企业的运营模式、业务流程、关键绩效指标等。通过与业务部门…...
 
基于单片机的智能小车 (论文+源码)
1. 系统设计 此次可编程智能小车系统的设计系统,结合STM32单片机,蓝牙模块,循迹模块,电机驱动模块来共同完成本次设计,实现小车的循迹避障功能和手机遥控功能,其整体框架如图2.1所示。其中,采用…...
 
Redis和MySQL双写一致性实用解析
1、背景 先阐明一下Mysql和Redis的关系:Mysql是数据库,用来持久化数据,一定程度上保证数据的可靠性;Redis是用来当缓存,用来提升数据访问的性能。 关于如何保证Mysql和Redis中的数据一致(即缓存一致性问题…...
 
win10彻底永久关闭自动更新的方法
win10彻底永久关闭自动更新的方法 文章目录 win10彻底永久关闭自动更新的方法一、禁用Windows Update服务二、在组策略里关闭Win10自动更新相关服务 可以参考这个视频的做法: 教学视频搬用 一、禁用Windows Update服务 1、同时按下键盘 Win R,打开运行…...
 
【webpack】初始化
webpack 旧项目的问题下一代构建工具 Vite 主角 :webpack安装webpack1,mode的选项2,使用source map 精准定位错误行数3,使用watch mode(观察模式),自动运行4,使用webpack-dev-server工具,自动刷…...
 
服务器GPU占用,kill -9 PID 用不了,解决办法
PID(progress ID 进程ID) 上图为占用情况,使用下面的指令都不管用 kill -9 PID kill -15 PID # 加入sudo 还是不行 # 等等网上的 chatgpt 提供的其他办法,一圈试了下来还是不管用最后解决办法 首先用下面的指令查看进程的树结构…...
Vue学习笔记-Vue3中的toRaw和markRaw
toRaw 作用:将一个由reactive生成的响应式对象转为普通对象 导入: import {toRaw} from vue 使用方法: let data reactive({k1:v1,k2:v2 }) //将对象变为非响应式的普通对象 let raw_data toRaw(data)使用场景:用于读取响应式…...
【Android Audio Focus 音频焦点】
介绍 Android 中的音频焦点(Audio Focus)是一种机制,用于管理应用程序之间的音频资源竞争。当多个应用程序同时请求使用音频设备时,通过音频焦点机制可以确保最终用户的体验不受影响。 两个或两个以上的 Android 应用可同时向同…...
模型参数、模型存储精度、参数与显存
模型参数量衡量单位 M:百万(Million) B:十亿(Billion) 1 B 1000 M 1B 1000M 1B1000M 参数存储精度 模型参数是固定的,但是一个参数所表示多少字节不一定,需要看这个参数以什么…...
【磁盘】每天掌握一个Linux命令 - iostat
目录 【磁盘】每天掌握一个Linux命令 - iostat工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景 注意事项 【磁盘】每天掌握一个Linux命令 - iostat 工具概述 iostat(I/O Statistics)是Linux系统下用于监视系统输入输出设备和CPU使…...
数据链路层的主要功能是什么
数据链路层(OSI模型第2层)的核心功能是在相邻网络节点(如交换机、主机)间提供可靠的数据帧传输服务,主要职责包括: 🔑 核心功能详解: 帧封装与解封装 封装: 将网络层下发…...
【android bluetooth 框架分析 04】【bt-framework 层详解 1】【BluetoothProperties介绍】
1. BluetoothProperties介绍 libsysprop/srcs/android/sysprop/BluetoothProperties.sysprop BluetoothProperties.sysprop 是 Android AOSP 中的一种 系统属性定义文件(System Property Definition File),用于声明和管理 Bluetooth 模块相…...
 
HBuilderX安装(uni-app和小程序开发)
下载HBuilderX 访问官方网站:https://www.dcloud.io/hbuilderx.html 根据您的操作系统选择合适版本: Windows版(推荐下载标准版) Windows系统安装步骤 运行安装程序: 双击下载的.exe安装文件 如果出现安全提示&…...
解决本地部署 SmolVLM2 大语言模型运行 flash-attn 报错
出现的问题 安装 flash-attn 会一直卡在 build 那一步或者运行报错 解决办法 是因为你安装的 flash-attn 版本没有对应上,所以报错,到 https://github.com/Dao-AILab/flash-attention/releases 下载对应版本,cu、torch、cp 的版本一定要对…...
 
tree 树组件大数据卡顿问题优化
问题背景 项目中有用到树组件用来做文件目录,但是由于这个树组件的节点越来越多,导致页面在滚动这个树组件的时候浏览器就很容易卡死。这种问题基本上都是因为dom节点太多,导致的浏览器卡顿,这里很明显就需要用到虚拟列表的技术&…...
 
七、数据库的完整性
七、数据库的完整性 主要内容 7.1 数据库的完整性概述 7.2 实体完整性 7.3 参照完整性 7.4 用户定义的完整性 7.5 触发器 7.6 SQL Server中数据库完整性的实现 7.7 小结 7.1 数据库的完整性概述 数据库完整性的含义 正确性 指数据的合法性 有效性 指数据是否属于所定…...
 
Windows安装Miniconda
一、下载 https://www.anaconda.com/download/success 二、安装 三、配置镜像源 Anaconda/Miniconda pip 配置清华镜像源_anaconda配置清华源-CSDN博客 四、常用操作命令 Anaconda/Miniconda 基本操作命令_miniconda创建环境命令-CSDN博客...
嵌入式常见 CPU 架构
架构类型架构厂商芯片厂商典型芯片特点与应用场景PICRISC (8/16 位)MicrochipMicrochipPIC16F877A、PIC18F4550简化指令集,单周期执行;低功耗、CIP 独立外设;用于家电、小电机控制、安防面板等嵌入式场景8051CISC (8 位)Intel(原始…...
