在日常java项目开发中,pdf文档处理是非常常见的业务场景,例如电子发票解析、合同文本提取、pdf内容归档、文档智能检索等。相较于word、txt等可直接读取的文档格式,pdf文件版式固定、结构封闭,原生java api无法直接解析提取文本,需要借助专业的第三方pdf处理组件。
目前主流的java pdf处理框架各有优劣,而spire.pdf for java凭借轻量化、零依赖、无需安装adobe插件、解析精度高、代码简洁的优势,成为企业级pdf文本提取的优选方案。该组件支持所有标准pdf格式,能够精准提取整页、指定页面的文本内容,完美适配各类pdf文本解析业务场景。
本文将手把手教大家通过maven引入spire.pdf依赖,从零实现 pdf全页文本批量提取 ,并将提取后的文本自动保存为txt文件,全程可直接复制运行,快速落地业务需求。
工具简介:spire.pdf for java
spire.pdf for java是一款专业的、独立的java pdf操作组件,无需依赖adobe acrobat、reader等第三方软件,可独立完成pdf的创建、读取、编辑、转换、文本/图像提取等全场景操作。核心优势如下:
- 轻量高效 :组件体积小,运行速度快,低内存占用,适配web、桌面、后端接口各类java项目;
- 解析精准 :支持保留pdf原始文本排版顺序,有效避免文本乱序、漏提、乱码问题;
- 功能全面 :支持整文档提取、单页提取、指定区域文本提取,适配多样化业务需求;
- 零环境依赖 :纯java开发,跨平台兼容windows、linux、mac系统,适配jdk8及以上版本。
maven环境配置
spire.pdf未收录于maven中央仓库,需要手动配置官方专属仓库地址,再引入对应依赖即可。下面是完整的maven配置,直接粘贴至项目pom.xml文件中即可生效。
配置专属仓库
在pom.xml的repositories标签中添加spire官方仓库,用于拉取组件依赖包:
<repositories>
<repository>
<id>com.e-iceblue</id>
<name>e-iceblue</name>
<url>https://repo.e-iceblue.com/nexus/content/groups/public/</url>
</repository>
</repositories>引入核心依赖
配置仓库后,引入spire.pdf核心依赖,本文采用稳定版11.7.5,兼容性极强:
<dependencies>
<dependency>
<groupid>e-iceblue</groupid>
<artifactid>spire.pdf</artifactid>
<version>11.7.5</version>
</dependency>
</dependencies>配置完成后,刷新maven项目,等待依赖自动下载导入即可。
完整代码实现:pdf全量文本提取
本次实战实现核心功能:加载本地pdf文件,逐页提取全部文本内容,拼接完整文档文本,最终输出保存为本地txt文件,同时完善io异常捕获与资源释放,保证代码健壮性。
核心用到spire.pdf四大核心类:
- pdfdocument :pdf文档核心操作类,用于加载、关闭pdf文件;
- pdfpagebase :pdf页面对象,获取文档单页信息;
- pdftextextractor :文本提取器,核心解析工具类;
- pdftextextractoptions :文本提取配置类,可自定义提取规则。
完整可运行代码
import com.spire.pdf.pdfdocument;
import com.spire.pdf.pdfpagebase;
import com.spire.pdf.texts.pdftextextractoptions;
import com.spire.pdf.texts.pdftextextractor;
import java.io.bufferedwriter;
import java.io.filewriter;
import java.io.ioexception;
/**
* pdf文本提取工具类
* 功能:逐页提取pdf全部文本并保存为txt文件
*/
public class extractalltextfrompdf {
public static void main(string[] args){
// 1. 初始化pdf文档对象,加载本地pdf文件(替换为自己的pdf路径)
pdfdocument doc = new pdfdocument();
try {
doc.loadfromfile("sample.pdf");
// 2. 定义字符串拼接器,存储全部页面文本
stringbuilder fulltext = new stringbuilder();
// 3. 遍历pdf所有页面,逐页提取文本
int pagecount = doc.getpages().getcount();
for (int i = 0; i < pagecount; i++) {
// 获取当前页面
pdfpagebase page = doc.getpages().get(i);
// 创建当前页面的文本提取器
pdftextextractor extractor = new pdftextextractor(page);
// 按默认规则提取页面文本
string pagetext = extractor.extract(new pdftextextractoptions());
// 拼接文本,页面之间添加空行分隔,提升可读性
fulltext.append(pagetext).append("\n\n\n\n");
}
// 4. 将提取的全部文本写入txt文件
try (bufferedwriter writer = new bufferedwriter(new filewriter("output.txt"))) {
writer.write(fulltext.tostring());
system.out.println("pdf文本提取完成!已保存至output.txt");
} catch (ioexception e) {
system.err.println("文本文件写入失败:" + e.getmessage());
e.printstacktrace();
}
} catch (exception e) {
system.err.println("pdf文件加载或文本提取失败:" + e.getmessage());
e.printstacktrace();
} finally {
// 5. 关闭文档,释放文件资源
if (doc != null) {
doc.close();
}
}
}
}
代码分步解析
1. 文档加载初始化
通过pdfdocument创建文档实例,调用loadfromfile()方法加载本地pdf文件,支持绝对路径、相对路径两种方式,适配不同项目部署场景。
2. 逐页遍历提取文本
通过获取文档总页数,循环遍历每一页;为每页单独创建pdftextextractor提取器,精准解析单页文本,避免多页文本错乱问题。通过stringbuilder拼接所有页面文本,相比字符串直接拼接,大幅提升大数据量pdf的解析效率。
3. 文本持久化存储
使用bufferedwriter高效字符写入流,将拼接完成的全文本写入txt文件,同时通过try-with-resources语法自动关闭io流,避免资源泄漏。
4. 资源释放与异常处理
通过finally代码块强制关闭pdf文档,释放文件占用资源;同时捕获文件加载、文本提取、io写入全流程异常,打印详细错误信息,方便问题排查。
项目运行与效果验证
运行前置准备
- 将项目根目录下的测试pdf文件命名为
sample.pdf,或修改代码中的文件路径为实际pdf路径; - 确保maven依赖加载成功,无包冲突、依赖缺失问题。
运行结果
运行main方法后,控制台输出pdf文本提取完成!已保存至output.txt即代表执行成功。此时项目根目录会自动生成output.txt文件,文件内包含pdf所有页面的完整文本,页面之间通过空行分隔,排版清晰、无乱码、无文本遗漏。
常见问题与优化建议
文本排版错乱优化
默认提取规则可能存在少量排版偏移,可开启简洁提取模式,优化文本排版效果。修改提取代码如下:
pdftextextractoptions options = new pdftextextractoptions(); options.setsimpleextraction(true); // 开启简洁提取,优化排版 string pagetext = extractor.extract(options);
适配扫描件pdf说明
本文方案适用于 可检索的原生pdf (电子生成pdf)。如果是图片扫描版pdf,单纯文本提取无法获取内容,需结合spire.ocr组件进行图像文字识别提取。
性能优化建议
处理超大体积pdf时,建议采用分页提取、异步写入的方式,避免一次性加载全量内容导致内存溢出;同时严格执行文档关闭逻辑,防止文件句柄堆积。
总结
本文基于spire.pdf for java实现了极简、稳定的pdf全量文本提取功能,通过配置官方maven仓库、引入核心依赖、逐页解析文本、持久化保存文件,快速完成pdf文本解析业务开发。
该方案代码简洁、稳定性高、无环境依赖,可直接落地于pdf文档归档、智能解析、内容检索、数据脱敏等各类java业务场景。除文本提取外,spire.pdf还支持pdf图片提取、表格解析、文档拆分合并、格式转换等功能,可满足绝大多数pdf处理开发需求。
到此这篇关于java借助spire.pdf实现pdf全页文本批量提取的文章就介绍到这了,更多相关java提取pdf全页文本内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论