Ruby: чтение файлов PDF
Я ищу быстрый и надежный способ читать/разбирать большие PDF файлы в Ruby (на Linux и OSX).
До сих пор я нашел довольно старый и простой PDF-toolkit (a pdftotext -wrapper) и PDF-reader, который не смог прочитать большинство моих файлов. Хотя две библиотеки предоставляют именно ту функциональность, которую я искал.
Мой вопрос: я что-то пропустил? Есть ли инструмент, который лучше подходит (быстрее и надежнее) для решения моей проблемы?
Ответы
Ответ 1
Вы можете найти Docsplit полезный:
Docsplit - это утилита командной строки и библиотека Ruby для разделения документов на свои составные части: открытый текст UTF-8, изображения страниц или миниатюры в любом формате, PDF файлы, отдельные страницы и метаданные документа (название, автор, количество страниц...)
Ответ 2
После использования разных методов я теперь PDF-Toolkit. Это довольно старый, но быстрый, стабильный и надежный. Кроме того, он действительно не должен быть новым, потому что он просто обертывает утилиты xpdf командной строки.
Ответ 3
Вы можете использовать JRuby и парсер библиотеки Java PDF, например ApachePDFBox (https://www.ohloh.net/p/pdfbox). См. Также http://java-source.net/open-source/pdf-libraries.
Ответ 4
Вот несколько вариантов:
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 файлами).
Недостатком всего этого является то, что они не являются реализациями pure-Ruby, но многие хорошие (и бесплатные) проекты OCR, похоже, выполняются именно так.
Ответ 5
Если вам просто нужно получить текстовый контент из pdf файла, pdftohtml в sourceforge эффективен.
он не подходит для работы с изображениями.
Ответ 6
Вы просмотрели библиотеку 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-шаблоны вместо того, чтобы писать все с нуля.