Ruby: чтение файлов PDF - PullRequest
       37

Ruby: чтение файлов PDF

33 голосов
/ 21 апреля 2009

Я ищу быстрый и надежный способ чтения / анализа больших файлов PDF в Ruby (в Linux и OSX).

До сих пор я нашел довольно старый и простой PDF-инструментарий ( pdftotext -wrapper) и PDF-reader , который не смог прочитайте большинство моих файлов. Хотя две библиотеки обеспечивают именно ту функциональность, которую я искал.

Мой вопрос: я что-то пропустил? Есть ли инструмент, который лучше подходит (быстрее и надежнее) для решения моей проблемы?

Ответы [ 6 ]

24 голосов
/ 03 марта 2010

Вы можете найти Docsplit полезным:

Docsplit - это утилита командной строки и библиотека Ruby для разделения документов на составные части: простой текст UTF-8 с возможностью поиска, изображения страниц или эскизы в любом формате, PDF-файлы, отдельные страницы и метаданные документа (заголовок, автор, количество страниц ...)

2 голосов
/ 27 апреля 2009

Попробовав разные методы, я сейчас использую PDF-Toolkit . Он довольно старый, но быстрый, стабильный и надежный. Кроме того, он действительно не должен быть новым, потому что он просто оборачивает утилиты командной строки xpdf .

1 голос
/ 22 апреля 2009

Вы можете использовать JRuby и анализатор библиотеки Java PDF, например, ApachePDFBox (https://www.ohloh.net/p/pdfbox). См. Также http://java -source.net / open-source / pdf-library .

0 голосов
/ 25 мая 2015

Вы смотрели библиотеку 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 вместо того, чтобы писать все с нуля.

0 голосов
/ 12 февраля 2010

Если вам просто нужно получить текстовое содержимое из файла pdf, pdftohtml в sourceforge эффективен. он не подходит для работы с изображениями.

0 голосов
/ 21 апреля 2009

Вот несколько вариантов:

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

По этой ссылке и поиску в sourceforge есть пара утилит командной строки, которые могут делать то, что вы хотите, например: http://pdftohtml.sourceforge.net/

В зависимости от ваших требований и того, как выглядят PDF-файлы, вы можете посмотреть с помощью API Google Docs (загрузить PDF, а затем загрузить его в виде текста) или также попробовать что-то вроде gocr . У меня было много удачи при разборе графического текста с помощью gocr в прошлом, и вам просто нужно было отскочить в оболочку, чтобы сделать это, например gocr -i whatever.pdf (я думаю, что это работает с PDF-файлами).

Недостатком всего этого является то, что они не являются чисто Ruby-реализациями, но многие хорошие (и бесплатные) проекты OCR, похоже, реализуются именно так.

...