首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >解析大型PDF文件的方法

问解析大型PDF文件的方法
EN

Stack Overflow用户
提问于 2010-09-15 04:16:35
回答 5查看 2.1K关注 0票数 2

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

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

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

有时,Name字段会溢出到address字段,在这种情况下,剩余的列将显示在下面的行上。

由于格式不规范,我一直在想办法解决这个问题。至少,有人能为我推荐一个Ruby PDF库来完成这项任务吗?

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

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2010-09-15 18:16:20

当你的PDF在Acrobat Reader或其他PDF Viewer中打开时,我假设你可以复制粘贴文本片段而不会出现问题?

在尝试以编程方式解析和提取这类怪物文件中的文本之前(即使只有200 MByte --对于表格中的简单文本,除非您有200000页……),我将这样进行:

  1. 尝试首先通过重新提取文件来清理文件。
  2. 尝试使用不同的命令行界面工具将文本提取到.txt文件中。

这只是几分钟的问题。编写一个Ruby程序来做这件事当然需要几个小时、几天或几个星期的时间(这取决于您对PDF文件格式内部机制的了解……我怀疑你对此还没有太多的经验)。

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

清理'Monster.pdf':

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

代码语言:javascript
复制
gswin32c.exe ^
  -o Monster-PDF-sanitized ^
  -sDEVICE=pdfwrite ^
  -f Monster.pdf

(我很好奇,与输入相比,这一条命令会使输出的PDF缩小多少。)

从PDF中提取文本:

我建议先试试pdftotext.exe ()。还有其他一些更不方便的方法可用,但这可能已经完成了工作:

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 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文件。因此,除非有人提供了更详细的答案,否则您可能应该选择一两个库,并将其用于试驾。

票数 1
EN

Stack Overflow用户

发布于 2010-09-15 10:25:20

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

java库是最健壮的,可以做的不仅仅是提取文本。所以我会去看看JRuby和iText或者PDFbox。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3712556

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档