[英]Identify and extract table from pdf using java
我有不同类型的 pdf,其中包含多种内容,如文本、表格等。表格可能存在 pdf 的任何位置(顶部、中间、底部)。 我只想使用java从该pdf中提取表数据(列数,表中的行数和数据)而不传递位置。
我迄今为止所做的:-
1.我已经使用iText java API来读取和提取。 使用以下代码:-
PdfTextExtractor.getTextFromPage
但它仅以文本形式返回数据。 没有任何线索来确定 pdf 中表格的存在位置以及如何从该表格中提取数据。
2. 我也用过 PDFBox java API 但它也没有解决我的问题。
3.我也遵循了这个堆栈溢出链接:- PDF表提取但它没有给我预期的输出。 该算法需要除线位置以外的所有。
我无法确定在 pdf 中找到表格的位置。
谁能告诉我如何使用 iText & PDF box API 解决这个问题,或者是否有任何开源 API 可以帮助我解决这个问题?
或者我们可以将pdf转换为html,以便通过表格标签我们可以识别表格并阅读;)?
它基本上取决于您的输入文档,以及您愿意为这个项目付出多少努力。
pdf 不像 html 文档那样工作。 在 html 文档中,您有诸如“表格”或“段落”之类的逻辑标签。 pdf 文档(在最基本的情况下)仅包含呈现文档所需的说明。 因此,不是得到“桌子”,你可能会得到“在这里画一条线,再远一点的另一条线,然后另一条穿过这两条线,依此类推”
此外,根据 pdf 规范,这些说明甚至不必按逻辑(阅读)顺序出现。
如果幸运的话,您输入的 pdf 可能是带标签的 PDF。 标记的 pdf 包含文档中底层结构的内部表示。 带标签的 pdf 可能能够准确地告诉您文档中的哪些对象构成了表格。
现在,回到实际答案。 如果您想要一个始终有效的解决方案,您可以实现 iText7 IEventListener 类。 此类有一个方法 eventOccurred() 每次解析器完成处理对象(如一段文本、一行等)时都会调用该方法
如果您随后寻找线条,并构建一些启发式方法来确定线条集合何时构成表格,那么您应该能够检测表格。
IText 还计划发布一个 pdf2Data 插件,它基本上将为您完成繁重的工作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.