java提取pdf文字首选apache pdfbox(适用于文字型pdf),扫描版需结合tesseract ocr;itext适合复杂格式,商业方案如aspose.pdf功能强但需授权。

Java 读取 PDF 文件的文字内容,核心是借助第三方 PDF 解析库,因为 JDK 原生不支持 PDF 解析。最常用、稳定且开源的是 Apache PDFBox,它能较好处理标准 PDF(含文字层),对扫描版(图片型)PDF 则无法提取文字——需要 OCR 配合。
使用 Apache PDFBox 提取文字(适用于可复制文本的 PDF)
PDFBox 是纯 Java 实现,轻量、活跃、文档齐全。只需添加依赖并调用 PDFTextStripper 即可。
- 添加 Maven 依赖(以 PDFBox 2.0+ 为例):
org.apache.pdfbox
pdfbox
2.0.29 - 基础代码示例:
PDDocument doc = PDDocument.load(new File("example.pdf"));
PDFTextStripper stripper = new PDFTextStripper();
String text = stripper.getText(doc);
System.out.println(text);
doc.close();
- 注意点:
• 若 PDF 含加密,需先解密(doc.isEncrypted()判断,用StandardDecryptionMaterial等处理密码);
• 多页提取时,可用stripper.setStartPage()和stripper.setEndPage()控制范围;
• 中文乱码?确保 PDF 内嵌字体支持中文,或在PDFTextStripper初始化后调用setSortByPosition(true)并确认系统字体配置(一般不影响显示,只影响提取逻辑)。
处理扫描版 PDF(图片型)需 OCR
如果 PDF 实质是扫描件(每页为图像),PDFBox 会返回空字符串。此时必须引入 OCR 引擎,常见组合是:PDFBox + Tesseract OCR。
- 流程简述:
• 用 PDFBox 将 PDF 每页导出为 PNG/JPG;
• 调用 Tesseract(通过tess4j封装库)识别图像中的文字;
• 合并各页识别结果。 - 关键依赖(Maven):
net.sourceforge.tess4j
tess4j
5.4.0 - 提醒:
• 需提前安装 Tesseract 语言包(如chi_sim.traineddata支持简体中文);
• 图像质量直接影响 OCR 准确率,建议导出分辨率 ≥300 DPI;
• 性能开销较大,不适合大批量实时处理。
其他可选库对比
除 PDFBox 外,还有几个常见选择,适用场景略有不同:
-
iText:侧重 PDF 生成与修改,文字提取能力较弱(v7+ 的
pdfSweep或kernel模块支持有限提取,但不如 PDFBox 直观); - Apache POI:仅支持 Office 文档(.docx/.xlsx),不支持 PDF;
- PDFClown:轻量替代品,API 较底层,社区支持较少,新手不易上手;
- 商业方案(如 Aspose.PDF):功能全面、中文支持好、稳定性高,但需授权费用。
小结:怎么选
日常开发推荐从 PDFBox 入手:免费、开源、够用。先用它测试目标 PDF 是否能正常提取文字——能提就是文字型 PDF,不能提再判断是否为扫描件,进而决定是否引入 OCR。不要一上来就堆 OCR,多数业务 PDF(如报表、合同电子版)都是文字型,PDFBox 足够胜任。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











