如何在 Ruby 中解析 pdf

Posted

技术标签:

【中文标题】如何在 Ruby 中解析 pdf【英文标题】:How to parse pdf in Ruby 【发布时间】:2013-10-09 18:29:45 【问题描述】:

我一直在尝试一个简单的 Ruby 程序来解析一个简单的 pdf 文件并提取我感兴趣的文本。我发现 pdf-reader 是一个非常好的 pdf 文件解析 gem。我已经阅读了该 gem 中给出的示例以及一些 tutorials 。

我已经尝试了回调方法,并且能够从我的 pdf 文件中获取所有文本。但是我不明白某些回调参数背后的概念。

例如,如果我的 pdf 有一个包含 3 列和 2 行的简单表格。 (标题行值是姓名、地址、年龄),第一行值是(Arun,Hoskote,22),当你运行 ruby​​ 后的 ruby​​ 脚本时

receiver = PDF::Reader::RegisterReceiver.new
reader = PDF::Reader.new("Arun.pdf")
reader.pages.each do |page|
    page.walk(receiver)
    receiver.callbacks.each do |cb|
      puts cb.inspect
    end
end

它打印一系列回调,其中一些有趣的回调show_text_with_positioning如下所示

:name=>:show_text_with_positioning, :args=>[["N", 5, "am", -4, "e"]]
:name=>:show_text_with_positioning, :args=>[[" "]]
:name=>:show_text_with_positioning, :args=>[["Ad", 6, "d", 3, "ress"]]
:name=>:show_text_with_positioning, :args=>[[" "]]
:name=>:show_text_with_positioning, :args=>[["Age"]]
:name=>:show_text_with_positioning, :args=>[[" "]]
:name=>:show_text_with_positioning, :args=>[["Ar", 4, "u", 3, "n"]]
:name=>:show_text_with_positioning, :args=>[[" "]]
:name=>:show_text_with_positioning, :args=>[["H", 3, "o", -5, "sk", 9, "o", -5,     "te"]]
:name=>:show_text_with_positioning, :args=>[[" "]]
:name=>:show_text_with_positioning, :args=>[["22"]]
:name=>:show_text_with_positioning, :args=>[[" "]]

从上面的回调中,args 相对于 pdf 文件代表什么?如果我只想在此示例中提取名称值“Arun”(任何东西都可以来这里)或年龄值,即“25”(任何值都可以来这里),我该如何在 ruby​​ 程序中做到这一点?是否有任何 pdf-parser API 或 Ruby API 仅从 pdf 文件中获取单个“感兴趣”值?

我如何编写一个 Ruby 程序来访问我感兴趣的特定回调,它给了我想要的文本?

【问题讨论】:

【参考方案1】:

如果你特别只想要文本,你可以这样做(但可能使用不同的流作为文本的目标):

receiver = PDF::Reader::TextReceiver.new($stdout)
PDF::Reader.file("Arun.pdf", receiver)

获得文本后,您可以使用正则表达式或其他任何方法来获取您想要的特定值。

【讨论】:

以上是关于如何在 Ruby 中解析 pdf的主要内容,如果未能解决你的问题,请参考以下文章

如何在 ROR (Ruby) 中显示 PDF? [关闭]

如何在 Ruby 中使用“PDF-Reader”gem 获取文本的位置

如何使用 Ruby 在现有 PDF 上编辑或书写?

使用 ruby​​ pdf-reader 解析 pdf

如何在 ruby​​ on rails 中显示 Datatable 表格工具(复制、csv、excel、pdf、保存)

Ruby pdf-reader 在解析 PDF 时添加不存在的空白行