解析大型PDF文件的方法

时间:2010-09-14 20:16:35

标签: ruby database pdf ghostscript pdftotext

我有一个非常大的PDF文件(200,000 KB或更多),其中包含一系列只包含表格的页面。我想以某种方式使用Ruby解析这些信息,并将结果数据导入MySQL数据库。

有没有人知道从PDF中提取这些数据的方法?数据的格式如下:

姓名|地址|现金报告|报告年份|持有人姓名

有时,“名称”字段会溢出到地址字段中,在这种情况下,其余列将显示在以下行中。

由于格式不规则,我一直坚持搞清楚这一点。至少,有人能指点我使用Ruby PDF库来完成这项任务吗?

更新:我不小心提供了错误的信息!文件的实际大小为300 MB或300,000 KB。我做了上面的修改以反映这一点。

5 个答案:

答案 0 :(得分:1)

  

至少,任何人都可以指出   我为这个Ruby PDF库   任务?

如果您还没有这样做,则应查看前两个问题:“Ruby: Reading PDF files”和“ruby pdf parsing gem/library”。 PDF::ReaderPDF::ToolkitDocsplit是一些相对受欢迎的推荐库。甚至有a suggestion of using JRuby and some Java PDF library parser

我不确定这些解决方案是否真的适合您的问题,特别是您正在处理如此庞大的PDF文件。因此,除非有人提供更具信息性的答案,否则您应该选择一两个图书馆并将它们用于试驾。

答案 1 :(得分:1)

我假设您在Acrobat Reader或其他PDF Viewer中打开PDF时,可以毫无问题地复制'n'粘贴文本片段?

在尝试以编程方式从这些怪物文件中解析和提取文本之前(即使它只有200 MByte - 对于表格中的简单文本而言,除非你有200000页......),我会这样做:

  1. 首先尝试通过重新提取文件来清理文件。
  2. 尝试使用不同的CLI工具将文本解压缩到.txt文件中。
  3. 这只是几分钟。编写一个Ruby程序来做这件事肯定是几小时,几天或几周(取决于你对PDF文件格式内部的了解......我怀疑你还没有太多的经验)。

    如果“2”工作,你可能已经完成了一半。如果它有效,你也知道用Ruby编程实现它是一项原则上可以解决的工作。如果“2”不起作用,你知道以编程方式实现起来可能非常困难。

    消灭'Monster.pdf':

    我建议使用Ghostscript。如果您有权访问它,也可以使用Adobe Acrobat Distiller。

    gswin32c.exe ^
      -o Monster-PDF-sanitized ^
      -sDEVICE=pdfwrite ^
      -f Monster.pdf
    

    (我很好奇,与输入相比,单个命令会使输出PDF缩小多少。)

    从PDF中提取文字:

    我建议先试试pdftotext.exefrom the XPDF folks)。还有其他方法,也有一些不方便的方法,但这可能已经完成了工作:

    pdftotext.exe ^
       -f 1 ^
       -l 10 ^
       -layout ^
       -eol dos ^
       -enc Latin1 ^
       -nopgbrk ^
       Monster-PDF-sanitized.pdf ^
       first-10-pages-from-Monster-PDF-sanitized.txt
    

    这不会提取所有页面而只提取1-10(为了概念验证,看它是否有效)。要从每个页面中提取,请不要使用-f 1 -l 10参数。您可能需要通过将参数更改为-enc ASCII7(或UTF-8UCS-2)来调整编码。

    如果这不起作用,那么快速的方式(因为,有时会发生原始PDF中的某些字体使用“自定义编码矢量”),你应该问一个新的问题,描述你的发现的详细信息,远。然后你需要采用更大的机芯来解决这个问题。

答案 2 :(得分:0)

这将是一项艰巨的任务,因为渲染的PDF没有表格布局的概念,只有预定位置的线条和文字。可能无法确定哪些行和哪些列,但它可能取决于PDF本身。

java库是最强大的,可能不只是提取文本。所以我会研究JRuby和iText或PDFbox。

答案 3 :(得分:0)

检查PDF中是否有任何结构化内容。我写了一篇博客文章,在http://www.jpedal.org/PDFblog/?p=410

解释了这一点

如果没有,您将需要构建它。

答案 4 :(得分:-1)

也许Prawn红宝石图书馆? link text