iText是一个开源的Java库,用于处理PDF文档的创建、修改和呈现。 它提供了一系列功能强大的 API,使开发人员能够在他们的应用程序中轻松地操作 PDF 文件。
它是由一家名为iText Group NV的公司开发和维护的,总部位于比利时。该公司专注于 PDF 技术,并致力于提供高质量的PDF处理解决方案。
iText套件提供的 一系列PDF相关的工具 、库和产品。这些工具包括开源项目和闭源产品, 涵盖了PDF文档的创建、处理、渲染、优化等多个方面。
使用 iText5 及 iText 所有后续版本必须开源(AGPLv3协议)自己的源代码,若不想开源则必须获得iText公司提供的商业许可协议。具体参考iText开源协议
AGPLv3开源协议的要求主要针对直接使用、修改或与AGPLv3许可的代码结合的情况。则必须开源。
假如是大公司且项目还是商业性质的则去申请商业许可,也不贵。
关于Java操作PDF的文章一共分为2篇,上篇为基础,下篇为高级(其实也不算高级啦,好多都没讲到)
Java处理PDF文档【上】( 全新 iText 8.0 基础入门、元素 )
Java处理PDF文档【下】( 全新 iText 8.0 画布、条形码、渲染器 )
下面主要介绍iText 8.0的版本,它和iText 7.0有语法的小差异,但是不影响两者的使用,官方表示iText 8.0在使用上要比之前的版本简便;下文主要针对几个开源的iText的套件使用。
官方iText 8.0.4 API
官方文档(现在只有iText7版本文档)
针对 iText7 --> iText8 的改进内容请看这里
- 创建PDF文档: 从头开始设计每一页的内容、样式和布局。
- 操作PDF文档: 添加、删除和修改文本、图像、表格等内容。
- 文本处理: 可以对文本进行格式化、添加链接、插入特殊字符等。
- 图像处理: 它支持添加图像到PDF文件中,并提供了对图像进行调整、裁剪和压缩的功能。
- 表格处理: 创建和编辑PDF中的表格,包括设置表格的大小、行高、列宽等。
- 字体和样式: 控制文本的字体、大小、颜色和样式,以及添加特殊效果如加粗、斜体等。
- 页面布局: 允许对页面进行布局,包括添加页眉、页脚、页码等。
- 加密与安全: 它支持PDF文档的加密和数字签名,以确保文档的安全性和完整性。
通过这个简单案例会发现,其实iText操作PDF挺简单的,其实一些样式就和CSS的关键字差不多,这里这是一个入门,后面会慢慢介绍更多的内容。
代码效果:
- 关于PDF操作带有单位的值如:宽度、高度等等的值都是以 磅(pt) 为单位:
1 磅(pt) ≈ 1.33 像素(px) 1 像素(px) ≈ 0.75 磅(pt) - 关于PDF操作带有度数的值需要使用如下公式来指定具体度数:
旋转角度 = 旋转角度 * 圆周率 / 180度
关于下文中使用的一些常见类这里介绍了如:颜色。
PDF文档的构建也是我们本篇文章的正式开始,主要存在如下类:
PdfWriter、PdfReader、Document、PdfDocument;可以说有了这些基本类以后,我们就可以满足正常的PDF的构建和读取了;具体的使用方式则在下面依次介绍。
PdfWriter、PdfReader:
PdfWriter类用于将文档内容写入到PDF文件中。它负责创建和管理PDF文档的输出流,并将文档内容写入到指定的PDF文件或输出流中。通过PdfWriter,可以将创建的文档内容(如页面、文本、图像等)写入到PDF文件中,完成PDF文档的构建过程。
PdfReader类用于读取已存在的PDF文档内容,提取其中的信息并进行相应的操作。通过PdfReader,可以读取文档的页面、文本、图形以及元数据信息,进行文档内容的分析和提取操作。
正常情况下我们不会单独来使用此类来手动写入流和读取流操作,而是借助下面两个类来操作。
PdfDocument类:
说到PdfDocument,它可是iText中的一个重要类,主要用于表示PDF文档的实例。PdfDocument类在iText库中扮演着多种角色,包括创建新的PDF文档、打开现有的PDF文档进行读取和编辑、以及保存和关闭PDF文档等功能。:
Document类:
Document是iText库中用于创建PDF文档内容的类,通常与PdfDocument一起使用。它用于定义文档的逻辑结构,包括段落、章节、列表、表格等高级元素,并负责组织和格式化文本内容,使其在PDF文档中呈现出合适的样式和排版;还有就是它更侧重于高层次的文档内容创建,如添加段落、列表、表格、链接等。Document类还有一个父类RootDocument哟。
点击查看详情:PdfDocument常用对象和方法
点击查看详情:Document常用对象和方法
在下面的这两个案例中可以让大家直观的看出页面的创建和页面的复制,记住一点,我们不创建页面,文档会自动为我们创建页面,当写入的内容超出当前页面后,文档也会为我们创建下一张页面。所以在不确定页面的情况下我们不用手动创建新页面。但是若我们明确知道有几页则推荐提前创建,因为我们不确定我们在后面会进行指定页面的操作以及在指定页面上使用画布。
我们可以通过画布来对生成的每一个页创建背景,具体的画布canvas将在后面讲解。
元数据信息对于文档的管理、搜索和归档非常重要,比如描述文档的标题、作者、主题、关键字等内容,有助于对文档进行分类和组织,使得用户可以更容易地找到和识别所需的文档。
PDF的加密是必不可少的,Itext为我们提供了两种文档加密方式,分别是:标准加密(密码)、公钥加密;下面我们将基本的介绍这标准的加密方式。
点击查看详情:加密方法和EncryptionConstants类说明
点击查看详情:PDF的标准加密和解码读取
字体的样式无非就是加粗、倾斜、下划线、颜色、行间距、缩进、字体等等操作,下面看一些常用的方法,针对这些方法下面案例会进行一个说明。
点看查看详情:关于字体操作的常用方法
代码效果:
上面说了字体文本的基本样式,但是上面的案例没有使用中文,英文这种会出现问题,ItextPDF对咱们亚洲字体的显示有问题,所以下面主要讲讲字体的显示问题以及字体族等信息。
点开查看详情:关于中文字体包的详细说明
代码效果:
查看文档可以看到下划线和中划线的方法,但是其它划线的方式需要我们使用带有参数的方法来设置,下面将带大家基本了解这些方法:
代码效果:
这里主要将介绍文本的描边样式和字符间隔,还有就是需要注意 new Text() 它的样式其实基本上都有,可以针对某几个字符进行单独设置样式。
代码效果:
这玩意没啥好说的,但是用的也是挺多的,设置对应的边框和边框圆角可以看起来圆润,它和CSS的圆角一模一样,下面我就写个简单示例:
点开查看详情:关于元素边框和边框圆角详细说明
代码效果:
关于PDF操作背景的使用方式有许多种,他就像我们学前端一样,如背景图片、背景色、线性渐变等等操作,下面我就简单举几个例子:
代码效果:
这里的背景其实和CSS的背景基本一样,只是代码的编写方式不同,在了解前端的背景和线性渐变的话,会更快的入手。
补充前端背景:【腾讯文档】背景属性、【腾讯文档】线性渐变 linear-gradient()
代码效果:
点开查看详情:关于图片背景和线性背景代码
点开查看详情:关于图片背景和线性背景详细说明
这玩意就和前端一样,有相对定位,也有绝对定位,下面我将对这两种定位来个简单的示例:
代码效果:
代码效果:
块级元素挺重要的,我们把iTextPDF当成前端来看,它是有块级元素的,如后面将介绍和使用到的块级元素如:段落(Paragraph)、列表和列表元素(List、ListItem)、表格和单元格(Table、Cell)、块级容器(Div) 、布局容器(FLexContainer)、分割线(LineSeparator)、多列布局(MulticolContainer)。
必要的API快捷跳转:
ElementPropertyContainer、BlockElement、Paragraph、List、ListItem、Div、Table、Cell、LineSeparator
可能使用的API快捷跳转:
文本(Text) 、样式(Style)
BlockElement是一个块级元素的父类,它是一种用于构建PDF文档的元素类型。块级元素通常用于定义文档的整体结构,比如段落、标题、列表、表格等。通过使用BlockElement,可以创建各种不同类型的块级元素,并将它们添加到PDF文档中,以实现丰富多样的排版效果。例如,你可以使用BlockElement来创建包含文本内容的段落、标题,也可以创建表格、列表等复杂的结构。
还要注意的是,这个父类及其父级的父级定义了大部分排版的样式类,如内边距、外边距、宽高、边框、文本样式、背景等等。
点开查看详情:关于BlockElement的常用方法
点开查看详情:关于ElementPropertyContainer的常用方法,它是BlockElement父类
段落对象其实就和前端的p标签一样,它是块级元素且内部可以塞入各种元素,把它当前端看即可。
点开查看详情:关于段落(Paragraph)标签特有的常用方法
代码效果:
其实列表在前端就相当于ul>li这些标签,但是在这里它以对象的方式来体现,下面详细说明:
点击查看详情:关于列表和列表元素(List、ListItem)标签的特有常用方法
代码效果:
大家把Div元素当前端的盒子来用就行,它也可以用来盒子套盒子。
代码效果:
点开查看详情:关于分割线(LineSeparator)的基本使用
代码效果:
表格是个好东西,在这里的表格我们可以用来生成一些文档表格、合同等需要排版的内容,还有就是表格可以用来布局哟,它就像以前我们用前端的表格布局一样。
点击查看详情:关于表格(Table、Cell)对象的特有方法使用
1:表格基本使用
这个案例的表格是设置的占用页面宽度的100%,若没设置占用页面全部宽的话,它会按照内容来划分列的百分比宽度。
代码效果:
2:添加元素的几种方式
代码效果:
3:合并单元格
代码效果:
点开查看详情:关于合并单元格详细代码
4:表格添加外边框
代码效果:
5:案例学生证
代码效果:
6:案例成绩表
此案例涉及到了画布的知识点,因为涉及到复杂表格和复杂样式基本上都是使用画布完成。本篇未讲述关于画布的知识,推荐阅读一下:Java处理PDF文档【下】( 全新 iText 8.0 画布、条形码、渲染器 )
代码效果:
版权声明:
本文来源网络,所有图片文章版权属于原作者,如有侵权,联系删除。
本文网址:https://www.bianchenghao6.com/java-jiao-cheng/5090.html