gpt4 book ai didi

java - 获取 PDF 文件特定行之后的行

转载 作者:行者123 更新时间:2023-11-30 02:06:18 25 4
gpt4 key购买 nike

我使用 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();

示例:

Sentence 1, nth line of file

Needed line

Sentence 3, n+2th line of file

我尝试从数组中的文件中获取所有行,但它不稳定,因为无法过滤到特定文本。这也是第二个解决方案中的问题,这就是为什么我正在寻找基于 PDFBox 的解决方案。解决方案1:

String[] lines = myString.split(System.getProperty("line.separator"));

解决方案2:

String neededline = (String) FileUtils.readLines(file).get("n+2th")

最佳答案

事实上,source code对于 PDFTextStripper 类使用与您完全相同的行结尾,因此您的第一次尝试使用 PDFBox 尽可能接近正确。

你看,PDFTextStripper getText方法调用 writeText方法,仅使用 writeString 逐行写入输出缓冲区方法与您已经尝试过的完全相同。该方法返回的结果是buffer.toString()。

因此,给定一个格式良好的 PDF,您真正要问的问题似乎是如何过滤数组中的特定文本。以下是一些想法:

首先,如您所说,捕获数组中的行。

import java.io.File;

import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.text.PDFTextStripper;

public class Main {

static String[] lines;

public static void main(String[] args) throws Exception {
PDDocument document = PDDocument.load(new File("my2.pdf"));
PDFTextStripper stripper = new PDFTextStripper();
String text = stripper.getText(document);
lines = text.split(System.getProperty("line.separator"));
document.close();
}
}

这里有一个通过任意行号索引获取完整字符串的方法,简单:

// returns a full String line by number n
static String getLine(int n) {
return lines[n];
}

这是一个线性搜索方法,它查找字符串匹配并返回找到的第一个行号。

// searches all lines for first line index containing `filter`
static int getLineNumberWithFilter(String filter) {
int n = 0;
for(String line : lines) {
if(line.indexOf(filter) != -1) {
return n;
}
n++;
}
return -1;
}

通过上述内容,可以仅获取匹配搜索的行号:

System.out.println(getLine(8)); // line 8 for example

或者,包含匹配搜索的整个字符串行:

System.out.println(lines[getLineNumberWithFilter("Cat dog mouse")]);

这一切看起来都非常简单,并且仅在行可以通过行分隔符分成数组的假设下才有效。如果解决方案不像上述想法那么简单,我相信问题的根源可能不在于您使用 PDFBox 的实现,而是在于您尝试向我发送文本的 PDF 源

这是一个教程的链接,该教程也可以完成您想要做的事情:

https://www.tutorialkart.com/pdfbox/extract-text-line-by-line-from-pdf/

同样的方法...

关于java - 获取 PDF 文件特定行之后的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51235869/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com