我正在寻找一种快速可靠的方法来读取/解析 Ruby 中的大型 PDF 文件(在 Linux 和 OSX 上)。
到目前为止,我发现了相当古老且简单的 PDF-toolkit(一个pdftotext -wrapper)和PDF-reader,它们无法读取我的大部分文件。尽管这两个库提供了我正在寻找的功能。
我的问题:我错过了什么吗?有没有更适合(更快、更可靠)解决我的问题的工具?
我正在寻找一种快速可靠的方法来读取/解析 Ruby 中的大型 PDF 文件(在 Linux 和 OSX 上)。
到目前为止,我发现了相当古老且简单的 PDF-toolkit(一个pdftotext -wrapper)和PDF-reader,它们无法读取我的大部分文件。尽管这两个库提供了我正在寻找的功能。
我的问题:我错过了什么吗?有没有更适合(更快、更可靠)解决我的问题的工具?
您可能会发现Docsplit很有用:
Docsplit 是一个命令行实用程序和 Ruby 库,用于将文档拆分为其组成部分:可搜索的 UTF-8 纯文本、任何格式的页面图像或缩略图、PDF、单页和文档元数据(标题、作者、页数...)
在尝试了不同的方法之后,我现在正在使用PDF-Toolkit。它已经很老了,但它快速、稳定且可靠。此外,它真的不需要是新的,因为它只是包装了xpdf 命令行实用程序。
您可以使用 JRuby 和 Java PDF 库解析器,例如 ApachePDFBox ( https://www.ohloh.net/p/pdfbox )。另请参阅http://java-source.net/open-source/pdf-libraries。
您看过 CombinePDF库吗?
这是一个纯 ruby 解决方案,允许进行一些 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 模板而不是从头开始编写整个内容。
这里有一些选项:
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 项目似乎都是以这种方式完成的。
如果您只需要从 pdf 文件中获取文本内容,sourceforge 上的 pdftohtml 非常有效。它不适合处理图像。