在日常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是一款专业的、独立的Java PDF操作组件,无需依赖Adobe Acrobat、Reader等第三方软件,可独立完成PDF的创建、读取、编辑、转换、文本/图像提取等全场景操作。核心优势如下:
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文件,逐页提取全部文本内容,拼接完整文档文本,最终输出保存为本地TXT文件,同时完善IO异常捕获与资源释放,保证代码健壮性。
核心用到Spire.PDF四大核心类:
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写入全流程异常,打印详细错误信息,方便问题排查。
sample.pdf,或修改代码中的文件路径为实际PDF路径;运行main方法后,控制台输出PDF文本提取完成!已保存至output.txt即代表执行成功。此时项目根目录会自动生成output.txt文件,文件内包含PDF所有页面的完整文本,页面之间通过空行分隔,排版清晰、无乱码、无文本遗漏。
默认提取规则可能存在少量排版偏移,可开启简洁提取模式,优化文本排版效果。修改提取代码如下:
PdfTextExtractOptions options = new PdfTextExtractOptions();
options.setSimpleExtraction(true); // 开启简洁提取,优化排版
String pageText = extractor.extract(options);本文方案适用于 可检索的原生PDF (电子生成PDF)。如果是图片扫描版PDF,单纯文本提取无法获取内容,需结合Spire.OCR组件进行图像文字识别提取。
处理超大体积PDF时,建议采用分页提取、异步写入的方式,避免一次性加载全量内容导致内存溢出;同时严格执行文档关闭逻辑,防止文件句柄堆积。
本文基于Spire.PDF for Java实现了极简、稳定的PDF全量文本提取功能,通过配置官方Maven仓库、引入核心依赖、逐页解析文本、持久化保存文件,快速完成PDF文本解析业务开发。
该方案代码简洁、稳定性高、无环境依赖,可直接落地于PDF文档归档、智能解析、内容检索、数据脱敏等各类Java业务场景。除文本提取外,Spire.PDF还支持PDF图片提取、表格解析、文档拆分合并、格式转换等功能,可满足绝大多数PDF处理开发需求。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。