gpt4 book ai didi

java - 使用 PDFBox 解析 PDF 文件(尤其是带有表格的文件)

转载 作者:太空宇宙 更新时间:2023-11-03 16:54:40 26 4
gpt4 key购买 nike

我需要解析包含表格数据的 PDF 文件。我正在使用 PDFBox提取文件文本以稍后解析结果(字符串)。问题是文本提取无法按我对表格数据的预期进行。例如,我有一个文件,其中包含这样一个表(7 列:前两列始终有数据,只有一个复杂性列有数据,只有一个融资列有数据):

+----------------------------------------------------------------+
| AIH | Value | Complexity | Financing |
| | | Medium | High | Not applicable | MAC/Other | FAE |
+----------------------------------------------------------------+
| xyz | 12.43 | 12.34 | | | 12.34 | |
+----------------------------------------------------------------+
| abc | 1.56 | | 1.56 | | | 1.56|
+----------------------------------------------------------------+

然后我使用 PDFBox:

PDDocument document = PDDocument.load(pathToFile);
PDFTextStripper s = new PDFTextStripper();
String content = s.getText(document);

这两行数据将像这样提取:

xyz 12.43 12.4312.43
abc 1.56 1.561.56

最后两个数字之间没有空格,但这不是最大的问题。问题是我不知道最后两个数字是什么意思:中、高、不适用? MAC/其他,FAE?我不知道数字和它们的列之间的关系。

我不需要使用 PDFBox 库,因此使用另一个库的解决方案就可以了。我想要的是能够解析文件并知道每个解析数字的含义。

最佳答案

您需要设计一种算法来提取可用格式的数据。无论您使用哪个 PDF 库,您都需要这样做。字符和图形是通过一系列有状态的绘图操作来绘制的,即移动到屏幕上的这个位置并绘制字符“c”的字形。

我建议您扩展 org.apache.pdfbox.pdfviewer.PDFPageDrawer 并覆盖 strokePath 方法。从那里您可以拦截水平和垂直线段的绘图操作,并使用该信息来确定表格的列和行位置。然后设置文本区域并确定在哪个区域绘制哪些数字/字母/字符是一件简单的事情。由于您知道区域的布局,因此您将能够分辨出提取的文本属于哪一列。

此外,在视觉上分隔的文本之间可能没有空格的原因是,PDF 通常不会绘制空格字符。取而代之的是更新文本矩阵并发出“移动”绘图命令以绘制下一个字符和与最后一个字符相距“空格宽度”的字符。

祝你好运。

关于java - 使用 PDFBox 解析 PDF 文件(尤其是带有表格的文件),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2609379/

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