我有一个非常大的PDF文件(200,000 KB或更多),其中包含一系列只包含表格的页面。我想以某种方式使用Ruby解析这些信息,并将结果数据导入MySQL数据库。
有没有人知道从PDF中提取这些数据的方法?数据的格式如下:
姓名|地址|现金报告|报告年份|持有人姓名
有时,“名称”字段会溢出到地址字段中,在这种情况下,其余列将显示在以下行中。
由于格式不规则,我一直坚持搞清楚这一点。至少,有人能指点我使用Ruby PDF库来完成这项任务吗?
更新:我不小心提供了错误的信息!文件的实际大小为300 MB或300,000 KB。我做了上面的修改以反映这一点。
答案 0 :(得分:1)
至少,任何人都可以指出 我为这个Ruby PDF库 任务?
如果您还没有这样做,则应查看前两个问题:“Ruby: Reading PDF files”和“ruby pdf parsing gem/library”。 PDF::Reader,PDF::Toolkit和Docsplit是一些相对受欢迎的推荐库。甚至有a suggestion of using JRuby and some Java PDF library parser。
我不确定这些解决方案是否真的适合您的问题,特别是您正在处理如此庞大的PDF文件。因此,除非有人提供更具信息性的答案,否则您应该选择一两个图书馆并将它们用于试驾。
答案 1 :(得分:1)
我假设您在Acrobat Reader或其他PDF Viewer中打开PDF时,可以毫无问题地复制'n'粘贴文本片段?
在尝试以编程方式从这些怪物文件中解析和提取文本之前(即使它只有200 MByte - 对于表格中的简单文本而言,除非你有200000页......),我会这样做:
这只是几分钟。编写一个Ruby程序来做这件事肯定是几小时,几天或几周(取决于你对PDF文件格式内部的了解......我怀疑你还没有太多的经验)。
如果“2”工作,你可能已经完成了一半。如果它有效,你也知道用Ruby编程实现它是一项原则上可以解决的工作。如果“2”不起作用,你知道以编程方式实现起来可能非常困难。
我建议使用Ghostscript。如果您有权访问它,也可以使用Adobe Acrobat Distiller。
gswin32c.exe ^
-o Monster-PDF-sanitized ^
-sDEVICE=pdfwrite ^
-f Monster.pdf
(我很好奇,与输入相比,单个命令会使输出PDF缩小多少。)
我建议先试试pdftotext.exe
(from 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-8
,UCS-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