PDFBox 2.0.26无法正确提取Linearized PDF文本,求解决方案
线性化PDF文本提取解决方案
针对你使用org.apache.pdfbox.text.PDFTextStripper 2.0.26版本无法正确提取线性化PDF文本的问题,可通过以下方式解决:
基于PDFBox的解决办法
- 升级PDFBox版本:2.0.26属于旧版本,后续的2.0.x更新版及3.x系列修复了大量线性化PDF的解析缺陷。建议升级至最新稳定版,再使用
PDFTextStripper提取文本,大部分场景下可直接解决问题。 - 预处理转换PDF结构:若暂时无法升级版本,可先将线性化PDF转换为普通结构。使用PDFBox的
PDFMergerUtility合并单个PDF(实质是重新生成非线性化PDF),代码示例:
import org.apache.pdfbox.multipdf.PDFMergerUtility; import java.io.File; import java.io.FileOutputStream; public class LinearizedPdfConverter { public static void main(String[] args) throws Exception { PDFMergerUtility merger = new PDFMergerUtility(); merger.addSource(new File("你的线性化PDF路径")); merger.setDestinationStream(new FileOutputStream("转换后的PDF路径")); merger.mergeDocuments(null); } }
转换完成后再用PDFTextStripper处理即可。
其他替代工具
- Apache Tika:基于PDFBox等库封装,对各类PDF兼容性更强,直接调用其文本提取接口就能处理线性化PDF,代码示例:
import org.apache.tika.Tika; import java.io.File; public class TikaTextExtractor { public static void main(String[] args) throws Exception { Tika tika = new Tika(); String text = tika.parseToString(new File("你的线性化PDF路径")); System.out.println(text); } }
- PyMuPDF(fitz):Python生态中对线性化PDF支持优异的工具,提取代码简洁直观:
import fitz doc = fitz.open("你的线性化PDF路径") extracted_text = "" for page in doc: extracted_text += page.get_text() print(extracted_text)
内容的提问来源于stack exchange,提问作者Korpusova Svetlana
相关产品推荐
相关产品推荐

