【发布时间】:2019-01-22 15:27:59
【问题描述】:
我正在使用 Apache PdfBox 2.0 来解析 pdf 文件。有了一些固定的字符串,我能够创建一个基于:
- 固定文本,作为起点
- 下一个单元格/文本位置,或 null
- 底部区域,用于确定矩形的高度。
使用起点,我正在计算 x 和 y(见下图 PDF 框中的 pdf 结构:
使用“下一个”文本块(这是另一个固定值,例如字段或表格标题),我正在使用公式确定所需区域的宽度:
width = second.x - first.x
或类似的东西。因此,例如,在表格中,预先知道标题名称,很容易检测列。我正在尝试做的(到目前为止未能以准确的方式这样做)是确定 pdf 表中的行。此表有时包含某些列中的缺失值以及某些行/列的多行值。我已经扩展了我的“系统”(第一,下一个,底部)以与表格行一起工作,当我有“规范化”表格(例如,没有空格和/或至少没有多行值)时,这非常有用。但它不适用于现实世界的数据,因为到目前为止我找不到确定多行值位置(x、y、宽度、高度)的方法。 PDF Box甚至可以做到这一点吗?有人建议先将pdf转换为html,然后再解析html。这是一个可行的选择吗?有人使用过this 库吗?接下来我会尝试使用它。
【问题讨论】:
-
如果您只是使用文本绘图操作符,则从 PDF 解析表格数据并非易事。如果幸运的话,PDF 会被标记,您可以离开结构树而不是提取的文本。您知道您将使用的 PDF 是否被标记?
-
我其实有pdf文件,但我不知道如何检查它是否被标记。
-
致电
document.getDocumentCatalog.getStructTreeRoot()。 (可能有错字)它是空的吗?那么它没有被标记。 -
我已经评估了表达式:document.getDocumentCatalog().getStructureTreeRoot(),它为空。因此,我猜它没有被标记。
-
更多可能有用也可能没用的东西:stackoverflow.com/questions/38931422/… 和 PrintTextLocations.java 示例。另请参阅“Tabula”项目。
标签: java parsing pdf pdfbox multiline