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

2024-01-13 20:50

本文主要是介绍掌握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文档-基础篇的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/602748

相关文章

闲置电脑也能活出第二春?鲁大师AiNAS让你动动手指就能轻松部署

对于大多数人而言,在这个“数据爆炸”的时代或多或少都遇到过存储告急的情况,这使得“存储焦虑”不再是个别现象,而将会是随着软件的不断臃肿而越来越普遍的情况。从不少手机厂商都开始将存储上限提升至1TB可以见得,我们似乎正处在互联网信息飞速增长的阶段,对于存储的需求也将会不断扩大。对于苹果用户而言,这一问题愈发严峻,毕竟512GB和1TB版本的iPhone可不是人人都消费得起的,因此成熟的外置存储方案开

无人叉车3d激光slam多房间建图定位异常处理方案-墙体画线地图切分方案

墙体画线地图切分方案 针对问题:墙体两侧特征混淆误匹配,导致建图和定位偏差,表现为过门跳变、外月台走歪等 ·解决思路:预期的根治方案IGICP需要较长时间完成上线,先使用切分地图的工程化方案,即墙体两侧切分为不同地图,在某一侧只使用该侧地图进行定位 方案思路 切分原理:切分地图基于关键帧位置,而非点云。 理论基础:光照是直线的,一帧点云必定只能照射到墙的一侧,无法同时照到两侧实践考虑:关

【数据结构】——原来排序算法搞懂这些就行,轻松拿捏

前言:快速排序的实现最重要的是找基准值,下面让我们来了解如何实现找基准值 基准值的注释:在快排的过程中,每一次我们要取一个元素作为枢纽值,以这个数字来将序列划分为两部分。 在此我们采用三数取中法,也就是取左端、中间、右端三个数,然后进行排序,将中间数作为枢纽值。 快速排序实现主框架: //快速排序 void QuickSort(int* arr, int left, int rig

【专题】2024飞行汽车技术全景报告合集PDF分享(附原数据表)

原文链接: https://tecdat.cn/?p=37628 6月16日,小鹏汇天旅航者X2在北京大兴国际机场临空经济区完成首飞,这也是小鹏汇天的产品在京津冀地区进行的首次飞行。小鹏汇天方面还表示,公司准备量产,并计划今年四季度开启预售小鹏汇天分体式飞行汽车,探索分体式飞行汽车城际通勤。阅读原文,获取专题报告合集全文,解锁文末271份飞行汽车相关行业研究报告。 据悉,业内人士对飞行汽车行业

活用c4d官方开发文档查询代码

当你问AI助手比如豆包,如何用python禁止掉xpresso标签时候,它会提示到 这时候要用到两个东西。https://developers.maxon.net/论坛搜索和开发文档 比如这里我就在官方找到正确的id描述 然后我就把参数标签换过来

pdfmake生成pdf的使用

实际项目中有时会有根据填写的表单数据或者其他格式的数据,将数据自动填充到pdf文件中根据固定模板生成pdf文件的需求 文章目录 利用pdfmake生成pdf文件1.下载安装pdfmake第三方包2.封装生成pdf文件的共用配置3.生成pdf文件的文件模板内容4.调用方法生成pdf 利用pdfmake生成pdf文件 1.下载安装pdfmake第三方包 npm i pdfma

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]

【生成模型系列(初级)】嵌入(Embedding)方程——自然语言处理的数学灵魂【通俗理解】

【通俗理解】嵌入(Embedding)方程——自然语言处理的数学灵魂 关键词提炼 #嵌入方程 #自然语言处理 #词向量 #机器学习 #神经网络 #向量空间模型 #Siri #Google翻译 #AlexNet 第一节:嵌入方程的类比与核心概念【尽可能通俗】 嵌入方程可以被看作是自然语言处理中的“翻译机”,它将文本中的单词或短语转换成计算机能够理解的数学形式,即向量。 正如翻译机将一种语言

计算机毕业设计 大学志愿填报系统 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试

🍊作者:计算机编程-吉哥 🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。 🍊心愿:点赞 👍 收藏 ⭐评论 📝 🍅 文末获取源码联系 👇🏻 精彩专栏推荐订阅 👇🏻 不然下次找不到哟~Java毕业设计项目~热门选题推荐《1000套》 目录 1.技术选型 2.开发工具 3.功能

【Linux 从基础到进阶】Ansible自动化运维工具使用

Ansible自动化运维工具使用 Ansible 是一款开源的自动化运维工具,采用无代理架构(agentless),基于 SSH 连接进行管理,具有简单易用、灵活强大、可扩展性高等特点。它广泛用于服务器管理、应用部署、配置管理等任务。本文将介绍 Ansible 的安装、基本使用方法及一些实际运维场景中的应用,旨在帮助运维人员快速上手并熟练运用 Ansible。 1. Ansible的核心概念