当前位置: 首页 > 知识库问答 >
问题:

使用java从pdf中识别和提取表

桂阳文
2023-03-14

我有不同类型的pdf,其中包含多个内容,如文本,表格等。该表可以存在于pdf的任何位置(顶部,中间,底部)。我只想提取表数据(不。的列,没有。行数

到目前为止我所做的工作:-

1.我使用了iText java API来读取和提取。使用以下代码:-

pdftextextractor . gettextfrompage

但它只是以文本形式返回数据。没有得到任何线索来确定表格在pdf中的位置以及如何从该表格中提取数据。2。我也用过PDFBox java API,但是它也没有解决我的问题。3。我还跟踪了这个堆栈溢出链接:- PDF表格提取,但它没有给我预期的输出。这种算法需要除了线位置和所有。

我无法确定在 pdf 中的位置。

谁能告诉我如何使用iText解决此问题

或者我们可以将pdf转换为html,以便通过表标签我们可以识别表并阅读;)?

共有2个答案

申阳伯
2023-03-14

这基本上取决于你的输入文档,以及你愿意为这个项目付出多少努力。

pdf不像html文档那样工作。在html文档中,您有逻辑标签,如“表”或“段落”。pdf文档(在最基本的情况下)仅包含呈现文档所需的说明。因此,您可能会得到“在这里画一条线,在更远的地方画另一条线,然后再画一条横跨两者的线,依此类推”,而不是“表”

此外,根据pdf规范,这些指令甚至不必以逻辑(阅读)顺序出现。

如果幸运的话,您的输入pdf可能是带标签的PDF。带标签的pdf包含文档中底层结构的内部表示。带标签的pdf可能能够准确地告诉您文档中的哪些对象构成了表格。

现在,回到实际答案。如果你想要一个始终有效的解决方案,你可以实现iText7 IEventListener类。这个类有一个方法eventHappen(),每次解析器处理完一个对象(如一段文本、一行等)时都会调用它。

如果您随后寻找行,并构建一些启发式规则来确定行的集合何时构成一个表,那么您应该能够检测到表。

IText还计划发布一个pdf2Data插件,它基本上会为你完成繁重的工作。

吴刚毅
2023-03-14

您可以尝试使用Tabula,这是一个开源工具,用于从pdf文档中检测和提取表格。您可以扩展table java并提取表的详细信息。更多信息可以在这里找到。

如果您也希望从文档中提取文本,那么您可以使用PDFBox或Apache Tika仅提取文本。

 类似资料:
  • 问题内容: 是否有任何支持表识别和提取的开源库? 我的意思是: 识别表结构存在 根据内容对表格进行分类 以有用的输出格式(例如JSON / CSV等)从表中提取数据。 我浏览了有关此主题的类似问题,发现以下内容: PDFMiner解决了问题3,但似乎要求用户向PDFMiner指定每个表都存在表结构的地方(如果我错了,请纠正我) pdf-table-extract尝试解决问题1,但根据“待办事项”列

  • 我正在使用来自识别器的Azure进行发票处理项目。所有发票均为PDF格式。我正在使用带有标签的自定义表单识别器。我可以从PDF中提取一些数据,如发票号、发票日期、金额等,但我想使用Azure Form Recognitor从PDF中提取表格数据,但它无法正确读取表格。 我已经标记了我需要的单元格,当表中的行数增加时,它会正确读取列,但是它无法将每行的值彼此分开,并将整列作为单个值返回。 我试图提供

  • 我试图通过翻译在http://viralpatel.net/blogs/itext-tutorial-merge-split-pdf-files-using-itext-jar/找到的splitPDF方法,用clojure从pdf中提取单个页面 IOException流关闭java.io.FileOutputStream.WriteBytes(:-2) 这将阻止我在repl仍然打开时打开文档。一旦

  • 我有一个列表。pdf,ppt,pptx,xls,xlsx,doc和。docx文件,现在想在这些文件中查找电子邮件地址。我的问题是如何从这些文件中智能地提取计划文本。目前我正在使用Apache POI,我对每种类型的文件都有一个单一的方法,是否有一个更短、更优雅的位置来做这件事?也许还可以处理。ODT、.ODP、.ODS文件?如何从。pdf,ppt,pptx,xls,xlsx,doc和.docx文件

  • 有可能吗?如果是,那么它可以怎么做。

  • 问题描述 (Problem Description) 如何使用java从PDF中提取内容。 解决方案 (Solution) 以下是使用java从PDF中提取内容的程序。 import java.io.File; import java.io.FileInputStream; import org.apache.tika.metadata.Metadata; import org.apache.ti