从 PDF 中提取准确的 table 数据

Extracting exact table data from PDF

我正在尝试从我之前创建的 pdf 文件中提取 table 的每一行。

我遇到的问题是,我认为会保存为 'null' 的空单元格被忽略了,甚至没有被读取为 space 个字符。

我通过这种方法从我的 PDF 中提取内容:

    public final ArrayList<String> extractLines(final File pdf) throws IOException {
    try (PDDocument doc = PDDocument.load(pdf)) {
        PDFTextStripper strip = new PDFTextStripper();
        String txt = strip.getText(doc);
        String[] arr = txt.split("\n");
        final ArrayList<String> lines = new ArrayList<>(Arrays.asList(arr));
        return lines;
    }
}

甚至可以用白色spaces提取数据吗?

如果是这样,用PDFBox?或者其他方法?

编辑:

无法使 traprange 工作,简单测试:

File e = new File("C:/Users/Test/Downloads/a.pdf");

    List<Table> t = new PDFTableExtractor().setSource(e).extract();
    System.out.println(t.get(0).toString());

只给我:

会不会和我的table形式有关?

我的table:

解决方案需要自定义算法来完成任务。请检查 this solution 以获取自定义 PDFTableStripper。

Tho which could be found at traprage 实施了另一个出色的解决方案。它可以提取特定单元格的空数据。

我想出了自己的解决方案。

因为我有一个 2D ArrayList,所以我每个人都有一个列表,其中包含一行 table。

现在我保存非空单元格的位置(任何时候每行只有一个不为空)。

我将其保存在 PDF 的元数据字段中并加载该字段以取回位置。