我有一堆PDF文档,其中包含表格数据,我需要将其提取为更易读的格式,以存储在电子表格,数据库或其他任何内容中。
世界上是否有任何东西(最好是免费的)能够将PDF格式的表格数据转换为更易读的格式 批量 与本机集成的app或被动地通过命令行或循环代码(.net)?
只要表格得到维护,就可以是任何格式(doc,html)。
到目前为止,我发现的任何事情都是一次性的(一次只有一个文档,我有数百个,没有发生)或者没有维护表结构。
任何想法请发布。
答案 0 :(得分:12)
这是一个巨大的麻烦。通常,提取PDF文件的文本内容是针对PDF要求您执行的操作而运行的。
首先尝试获取文本。这可能或多或少成功,具体取决于PDF的构建方式。一个开始的地方是GhostScript或pstotext。如果那次失败了,那个人就有list of text extraction tools。获得文本流后,您可以尝试以编程方式重新组装表格结构。
最后,如果你的形状非常糟糕,如果PDF不合作,你可以做OCR的事情。正确的长期解决方案是通过执行单个,大规模,痛苦且可能部分手动的过程,在一开始就将数据转换为正确的格式;或者转到消息来源并建议以更有用的形式提供数据。
如果您可以提供更具体的PDF示例文件,可能会有更好或更精确的答案......对此没有通用的解决方案,如果可能,则需要根据您的具体情况进行调整来源数据。
请注意这个rather pointed response to the general question ...对你面前的问题没有帮助,但也许在向老板解释为什么没有明显的答案时会提供有用的topcover ? ; - )
出现了一个新的SO问题,并引用了这个库 - iTextSharp - 看起来可能相关。所以问题:Best way to extract...
答案 1 :(得分:3)
有关为什么 PDF文件格式永远不应被认为适合托管可提取的结构化数据 的背景信息,请参阅此文章:< / p>
对于一个惊人的工具系列,每周都会越来越好,从PDF中提取表格数据(除非它们是扫描页面), 矛盾点“1”。上面 请参阅以下链接:
答案 2 :(得分:1)
PDF格式是作为一组字母构建的,它们没有固有的格式或任何东西。您可以将PDF视为一个通过OCR的页面,并且您从那里开始使用它 - 字母和它们的坐标在那里 - 其余由您决定 - 以确定布局,格式,列和最终表格。 / p>
答案 3 :(得分:1)
如果所有数据都是文本数据,您可以随时使用iTextSharp。它是免费的,你只需要“itextsharp.dll”。
http://sourceforge.net/projects/itextsharp/
这是一个简单的函数,用于从PDF中读取文本。
Public Shared Function GetTextFromPDF(PdfFileName As String) As String
Dim oReader As New iTextSharp.text.pdf.PdfReader(PdfFileName)
Dim sOut = ""
For i = 1 To oReader.NumberOfPages
Dim its As New iTextSharp.text.pdf.parser.SimpleTextExtractionStrategy
sOut &= iTextSharp.text.pdf.parser.PdfTextExtractor.GetTextFromPage(oReader, i, its)
Next
Return sOut
End Function
这至少可以让你得到文本。
答案 4 :(得分:1)
查看IvyTools IvyPdf:www.ivytools.net 它可以提取表格以及任何其他数据。如果您的文档结构合理,则设置非常简单,但它也可以处理非常复杂的场景。它是免费供个人使用。
答案 5 :(得分:0)
当你说
时到目前为止我发现的任何内容......一次只能找到一个文档
我假设你的意思是“是一个GUI应用程序,没有编程接口。”
在这种情况下,您可以使用Microsoft UI Automation以编程方式控制应用并使其按照您的意愿进行操作。
UIA ...提供了一种方法,用于公开和收集有关用户界面元素和控件的信息,以支持用户界面可访问性和软件测试自动化......并且与Win32和.NET Framework兼容。
答案 6 :(得分:0)
考虑到你的要求,你问题的直接答案是不可能的。原因是,与word / excel不同,PDF规范没有名为Table的对象。您在这些PDF文档中看到的表格只是以看起来像表格的方式绘制的矩形系列,并且由创建这些PDF文件的PDF Writer决定,因为有些人可能使用Line of Series绘制表格类型的结构。
但是你可能可以根据PDF File Specification编写自己的解析器,但是如果你选择实现自己的解析器,它仍然是一项艰巨的任务,并且需要花费几个月的时间才能得到一个与之相关的解析器 PDF文档。
Incase,你决定编写自己的解析器。下面的文章将为您提供快速启动。 Code Project Article
答案 7 :(得分:0)
我尝试使用像pdf2text这样的工具从PDF中提取纯文本,但是过多的表格和格式和布局信息都会丢失,无法准确地重建原始版本。
使用PDF API提取文本框和行的x,y位置并使用该信息重建表格可能会更成功。
似乎有几种第三方工具和API尝试这种方法:
Solid Framework的付费版本似乎能够自动地从PDF中提取表格到Excel和CSV,并且从我投入的PDF中提取得很好。
免费PDF Mechanic似乎是一个围绕Solid Framework的小型GUI程序,您可以使用它来试用他们的PDF提取技术。
还有一个免费工具pdf2table,您可以从您的程序中调用它,但我还没有尝试过。
答案 8 :(得分:0)
我最近遇到了这个问题。
我发现的另一种解决方案是在Adobe中打开PDF文档并将其导出到xml。至少在我的PDF中,它保留了表信息,然后我能够以编程方式使用XML来生成表格文件,如excel等。
我遇到的另一个问题是,Adobe只允许您一次导出一个文件,而且我有很多文件。幸运的是Adobe也有一个合并功能。我最终将所有文件合并在一起,然后将它们导出为一个大的XML文件,并使用该文件生成我需要的文件。