1.1 PDFBOX介绍
Apache PDFBox是一个开源Java库,支持PDF文档的开发和转换。 我们可以使用PDFBox开发可以创建,转换和操作PDF文档的Java程序。PDFBox的主要功能:
- Extract Text - 使用PDFBox,您可以从PDF文件中提取Unicode文本。
- Split & Merge - 使用PDFBox,您可以将单个PDF文件分成多个文件,并将它们合并为一个文件。
- Fill Forms - 使用PDFBox,您可以在文档中填写表单数据。
- Print - 使用PDFBox,您可以使用标准Java打印API打印PDF文件。
- Save as Image - 使用PDFBox,您可以将PDF保存为图像文件,如PNG或JPEG。
- Create PDFs - 使用PDFBox,您可以通过创建Java程序创建新的PDF文件,还可以包含图像和字体。
- Signing - 使用PDFBox,您可以将数字签名添加到PDF文件。
PDFBox的四个主要组成部分:
- PDFBox - 这是PDFBox的主要部分。 它包含与内容提取和操作相关的类和接口。
- FontBox - 它包含与font相关的类和接口,使用这些类我们可以修改PDF文档的文本字体。
- XmpBox - 包含处理XMP元数据的类和接口。
- Preflight - 此组件用于根据PDF/A-1b标准验证PDF文件。
PDFBOX操作PDF文档基本实现:
- 创建PDF文档( Creating a PDF Document)
- 添加页面( Adding Pages)
- 删除页面( Removing Pages)
- 读写文档属性( Document Properties)
- 添加文本( Adding Text)
- 添加多行( Adding Multiple Lines)
- 读取文本( Reading Text)
- 插入图像( Inserting Image)
- 加密PDF文档(Encrypting a PDF Document)
- 拆分PDF文档( Splitting a PDF Document)
- 合并多个PDF文档(Merging Multiple PDF Documents)
- 从PDF文档生成图像(Save Images)
- 添加矩形( Adding Rectangles)
详细参考PDFBOX官网
1.2 项目需求分析
项目中需要根据既有的电子图书进行信息化的归档,方便分类目查询。因为图书主要是以如下排版存在:
相对来说页面分为左右两部分,右侧是知识点的描述,比较规范。左侧是图文的说明,为了生动,各种形式,大小都有,基本上没有规律,所以无法进行解析。最终敲定方案如下:
右侧描述根据章节来生成知识点描述,可以按章节或者关键字检索。对应描述的左侧部分,需要整体生成辅助说明一个图片。辅助说明相应的知识点内容。
拆分成技术实现为:
- 指定区域进行PDF文字内容提取
- 指定区域进行PDF图片内容提取
1.3 代码实现
1.3.1 SpringBoot工程引入PDFBox依赖
POM.xml
<!-- https://mvnrepository.com/artifact/org.apache.pdfbox/pdfbox -->
<dependency>
<groupId>org.apache.pdfbox</groupId>
<artifactId>pdfbox</artifactId>
<version>2.0.18</version>
</dependency>
PdfboxUtils.java