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

有人知道将这些数据从PDF中抽出的任何方法吗?数据以以下方式格式化:

名称|地址|现金报告|报告的一年|持有人名称

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

由于格式不规则,我一直被困在解决这个问题上。至少,有人可以将我指向Ruby PDF库执行此任务吗?

更新:我不小心提供了不正确的信息!该文件的实际尺寸为300 MB,或300,000 KB。我进行了上面的更改以反映这一点。

有帮助吗?

解决方案

我认为,当您的PDF在Acrobat Reader或其他PDF查看器中打开时,您可以复制'n'paste文本片段而没有问题?

在尝试通过编程中解析和从此类怪物文件中提取文本之前(即使仅是200 mbyte-对于huuuuge的表中的简单文本,除非您有200000页...),我会这样继续这样做:

  1. 尝试首先通过重新介绍文件来消毒。
  2. 尝试使用不同的CLI工具将文本提取到.txt文件中。

这是几分钟的问题。编写一个红宝石程序来做到这一点肯定是数小时,几天或几周的问题(取决于您对PDF FileFormat Internals的了解...我怀疑您还没有太多的经验)。

如果“ 2.”作品,您可能已经完成了。如果有效,您还知道,使用Ruby进行编程进行操作是可以解决的工作。如果“ 2.”不起作用,您知道以编程方式实现可能非常困难。

消毒“ monster.pdf”:

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

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

(我很好奇单个命令将使您的输出pdf缩小,如果与输入相比,您会使您的输出收缩。)

从PDF提取文本:

我建议先尝试 pdftotext.exe (来自XPDF的人)。还有其他一些不便的方法,但这可能已经可以完成工作:

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-8, UCS-2).

如果这不起作用的方法(因为有时发生,原始PDF中的某些字体使用“自定义编码矢量”),则应提出一个新问题,描述到目前为止的发现的详细信息。然后,您需要求助于更大的口径才能解决问题。

其他提示

至少,有人可以将我指向Ruby PDF库执行此任务吗?

如果您还没有这样做,则应查看以前的两个问题:”Ruby:阅读PDF文件,“ 和 ”Ruby PDF解析宝石/图书馆." PDF ::读者, PDF ::工具包, , 和 文档 是一些相对流行的建议库。甚至有 使用Jruby和一些Java PDF库解析器的建议.

我不确定这些解决方案中的任何一个实际上是否适合您的问题,尤其是您正在处理如此庞大的PDF文件。因此,除非有人提供更有益的答案,否则也许您应该选择一个或两个图书馆,然后将其带到试驾。

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

Java库是最强大的,并且 可能 做不仅仅是提取文本。因此,我会研究Jruby和Itext或PDFBox。

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

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

也许是大虾露比图书馆? 链接文字

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top