【发布时间】:2018-12-16 13:35:40
【问题描述】:
我使用Apache PDFBox 来解析 pdf 文件中的文本。我试图在特定行之后获得一行。
PDDocument document = PDDocument.load(new File("my.pdf"));
if (!document.isEncrypted()) {
PDFTextStripper stripper = new PDFTextStripper();
String text = stripper.getText(document);
System.out.println("Text from pdf:" + text);
} else{
log.info("File is encrypted!");
}
document.close();
示例:
第 1 句,文件第 n 行
需要的线路
第 3 句,文件第 n+2 行
我试图从数组中的文件中获取所有行,但它不稳定,因为无法过滤到特定文本。这也是第二个解决方案中的问题,这就是为什么我正在寻找基于PDFBox 的解决方案。
解决方案一:
String[] lines = myString.split(System.getProperty("line.separator"));
解决方案 2:
String neededline = (String) FileUtils.readLines(file).get("n+2th")
【问题讨论】:
-
“但它不稳定,因为无法过滤到特定文本” - 你能解释一下你的意思吗?
-
您的解决方案 1 应该适用于由 Microsoft Word 等编辑器生成的基本格式的 PDF。它实际上与 PDFBox 源代码使用的行分隔符相同。我怀疑在许多奇怪的情况下,PDF 具有奇怪的格式,会给您带来不稳定的结果,但是除非您控制需要文本挖掘的 PDF 的创建,否则您无法控制这种情况。这是一个从 PDF 中捕获行的教程,但它仅适用于格式正确的 PDF。此外,在完成本教程后,您只需调用
lines.get(index)即可获得所需的行号:
标签: java string file-io pdfbox text-processing