我有一个非常大的PDF文件(200,000 KB或更多),其中包含一系列的页面只包含表格。我想以某种方式使用Ruby解析这些信息,并将结果数据导入到MySQL数据库中。
有没有人知道从PDF中提取数据的方法?数据的格式如下:
姓名|地址|报告现金|报告年份|持有者姓名
有时,Name字段会溢出到address字段,在这种情况下,剩余的列将显示在下面的行上。
由于格式不规范,我一直在想办法解决这个问题。至少,有人能为我推荐一个Ruby PDF库来完成这项任务吗?
更新:我不小心提供了错误的信息!文件的实际大小为300 MB或300,000 KB。我做了上面的更改以反映这一点。
发布于 2010-09-15 18:16:20
当你的PDF在Acrobat Reader或其他PDF Viewer中打开时,我假设你可以复制粘贴文本片段而不会出现问题?
在尝试以编程方式解析和提取这类怪物文件中的文本之前(即使只有200 MByte --对于表格中的简单文本,除非您有200000页……),我将这样进行:
这只是几分钟的问题。编写一个Ruby程序来做这件事当然需要几个小时、几天或几个星期的时间(这取决于您对PDF文件格式内部机制的了解……我怀疑你对此还没有太多的经验)。
如果是"2.“工作,你可能已经完成了一半。如果它能工作,你也知道用Ruby编程是一项原则上可以解决的工作。如果是"2.“不起作用,你知道这可能是非常困难的编程实现。
清理'Monster.pdf':
我建议使用。如果您有权访问Adobe Acrobat Distiller,也可以使用它。
gswin32c.exe ^
-o Monster-PDF-sanitized ^
-sDEVICE=pdfwrite ^
-f Monster.pdf(我很好奇,与输入相比,这一条命令会使输出的PDF缩小多少。)
从PDF中提取文本:
我建议先试试pdftotext.exe ()。还有其他一些更不方便的方法可用,但这可能已经完成了工作:
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中的某些字体使用“自定义编码矢量”),您应该问一个新的问题,描述到目前为止您的发现的细节。然后你需要借助更大的口径来解决这个问题。
发布于 2010-09-15 05:45:40
至少
,有没有人能为我推荐一个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文件。因此,除非有人提供了更详细的答案,否则您可能应该选择一两个库,并将其用于试驾。
发布于 2010-09-15 10:25:20
这将是一项艰巨的任务,因为渲染的PDF没有表格布局的概念,只有预定位置的线条和文本。可能无法确定什么是行,什么是列,但这可能取决于PDF本身。
java库是最健壮的,可以做的不仅仅是提取文本。所以我会去看看JRuby和iText或者PDFbox。
https://stackoverflow.com/questions/3712556
复制相似问题