Ruby:阅读PDF文件

时间:2009-04-21 15:31:46

标签: ruby-on-rails ruby pdf pdf-parsing

我正在寻找一种快速可靠的方法来读取/解析Ruby中的大型PDF文件(在Linux和OSX上)。

到目前为止,我发现了相当古老而简单的PDF-toolkit(一个pdftotext - 包装器)和PDF-reader,它无法读取我的大部分文件。虽然这两个库提供了我正在寻找的功能。

我的问题:我错过了什么吗?是否有更适合(更快,更可靠)的工具来解决我的问题?

6 个答案:

答案 0 :(得分:24)

您可能会发现Docsplit有用:

  

Docsplit是一个命令行实用程序和Ruby库,用于将文档拆分为组件部分:可搜索的UTF-8纯文本,任何格式的页面图像或缩略图,PDF,单页和文档元数据(标题,作者,页数...)

答案 1 :(得分:2)

尝试不同的方法后,我现在正在使用PDF-Toolkit。它很老了,但速度快,稳定可靠。此外,它确实不需要是新的,因为它只包裹xpdf commandline utilities

答案 2 :(得分:1)

您可以使用JRuby和Java PDF库解析器,例如ApachePDFBox(https://www.ohloh.net/p/pdfbox)。另请参阅http://java-source.net/open-source/pdf-libraries

答案 3 :(得分:0)

以下是一些选项:

http://en.wikipedia.org/wiki/List_of_PDF_software

从该链接和搜索sourceforge,有几个命令行实用程序可以执行您想要的操作,例如:http://pdftohtml.sourceforge.net/

根据您的要求和PDF的外观,您可以查看使用Google Docs API(上传PDF然后将其下载为文本),或者也可以尝试gocr之类的内容。我过去很幸运使用gocr解析图像文本,你只需要反弹到shell来执行它,比如gocr -i whatever.pdf(我认为它适用于PDF)。

所有这些的缺点是它们不是纯Ruby实现,但许多好的(和免费的)OCR项目似乎都是这样做的。

答案 4 :(得分:0)

如果您只需要从pdf文件中获取文本内容,则sourceforge上的pdftohtml非常有效。 它不适合处理图像。

答案 5 :(得分:0)

你看过CombinePDF图书馆了吗?

它是一种纯红宝石解决方案,允许一些PDF操作,例如提取页面,将一个PDF页面覆盖在另一个上,页面编号,编写基本文本和表格等等。

以下是使用徽标来标记现有PDF文件的示例。该示例读取PDF文件,提取一个页面以用作图章并标记另一个PDF文件。

require 'combine_pdf'
company_logo = CombinePDF.load("company_logo.pdf").pages[0]
pdf = CombinePDF.load "content_file.pdf"
pdf.pages.each {|page| page << company_logo}
pdf.save "content_with_logo.pdf"

您还可以标记文字,数字页面或使用:

require 'combine_pdf'

pdf = CombinePDF.load "content_file.pdf"

pdf.number_pages #adds page numbers. you can add formatting and placement options.

pdf.pages.each {|page| page.textbox "One Way To Stamp"}

#you can a shortcut method to stamp pages
pdf.stamp_pages "Another way to stamp"

#you can use the shortcut method for both text and PDF stamps
company_logo = CombinePDF.load("company_logo.pdf").pages[0]
pdf.stamp_pages company_logo

# you can use write simple tables
pdf.pages[0].write_table headers: ['first name', 'surname'], table_data: [['John', 'Doe'], ['Mr.', 'Smith']]

pdf.save "content_with_logo.pdf"

它不适用于复杂的操作,但它补充了大多数PDF创作库,并允许您使用PDF模板而不是从头开始编写整个内容。