我有不同类型的pdf,其中包含多个东西,如文字,表格等。该表可能存在任何地方的pdf(顶部,中部,底部)。我只想提取表数据(否)。列上的,不。在不传递位置的情况下使用java从pdf中提取行和表中的数据。
到目前为止我所做的是:-
PdfTextExtractor.getTextFromPage
但是它只是以文本的形式返回数据。没有得到任何线索,以确定哪些表格存在于pdf中,以及如何从该表中提取数据。
我无法确定在哪里找到该表格的pdf。
有人能告诉我如何用iText & PDF来解决这个问题吗?或者有什么开源的API可以帮助我解决这个问题吗?
或者我们可以将pdf转换成html,这样我们就可以通过表标记来识别表并读取;)?
发布于 2019-07-20 13:08:38
发布于 2017-03-31 12:21:20
这基本上取决于您的输入文档,以及您愿意在这个项目中投入多少精力。
pdf不像html文档那样工作。在html文档中,您有像"table“或”段落“这样的逻辑标记。pdf文档(在最基本的情况下)只包含呈现文档所需的说明。因此,与其得到“表格”,你可能会得到“在这里画一条线,另一条更远一点,然后另一条跨越两者,等等。”
此外,根据pdf规范,这些指令甚至不必按逻辑(读取)顺序显示。
如果你是幸运的,你的输入PDF可能是一个标签pdf。标记的pdfs包含文档中底层结构的内部表示。经过标记的pdf可能能够准确地告诉您文档中的哪些对象构成了表。
现在,回到一个真正的答案。如果您想要一个始终有效的解决方案,则可以实现iText7 IEventListener类。这个类有一个方法eventOccurred(),每次解析器处理完对象(比如一段文本、一行等)时都会调用该方法。
如果然后查找行,并构建一些启发式来确定一行集合何时构成表,则应该能够检测表。
IText还计划发布一个pdf2Data插件,它将基本上为您完成繁重的任务。
https://stackoverflow.com/questions/43138481
复制相似问题