我正在寻找一种快速可靠的方法来读取/解析Ruby中的大型PDF文件(在Linux和OSX上)。
到目前为止,我发现了相当古老而简单的PDF-toolkit(一个pdftotext - 包装器)和PDF-reader,它无法读取我的大部分文件。虽然这两个库提供了我正在寻找的功能。
我的问题:我错过了什么吗?是否有更适合(更快,更可靠)的工具来解决我的问题?
答案 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模板而不是从头开始编写整个内容。