大きなPDFファイルをRuby(LinuxおよびOSX)で)読み取り/解析するための高速で信頼性の高い方法を探しています。
今まで私はかなり古くて単純な PDF-toolkit (a pdftotext -wrapper)と PDF-reader を見つけましたが、それはできませんでした私のファイルのほとんどを読んでください。 2つのライブラリは、私が探していた機能を正確に提供しますが。
私の質問:私は何かを逃したことがありますか?私の問題を解決するのにより適した(より速く、より信頼できる)ツールはありますか?
Docsplit 便利だと思うかもしれません:
Docsplitはコマンドラインユーティリティであり、Rubyドキュメントをコンポーネント部分に分割するためのライブラリ:検索可能なUTF-8プレーンテキスト、任意の形式のページ画像またはサムネイル、PDF、単一ページ、およびドキュメントメタデータ(タイトル、作成者、ページ数...)
さまざまな方法を試した後、現在は PDF-Toolkit を使用しています。かなり古いですが、高速で安定していて信頼性があります。その上、それは xpdfコマンドラインユーティリティ をラップするだけなので、実際には新しい必要はありません。
JRubyとa Java PDF ApachePDFBox( https://www.ohloh.net/pなどのライブラリパーサー)を使用できます。/pdfbox )。 http://Java-source.net/open-source/pdf-libraries も参照してください。
CombinePDF ライブラリをご覧になりましたか?
これは純粋なRubyソリューションであり、ページの抽出、PDFページのオーバーレイ、ページ番号付け、基本的なテキストや表の作成など、PDFの操作を可能にします。
これは、既存のPDFファイルをロゴで切り詰める例です。この例では、PDFファイルを読み取り、1つのページを抽出してスタンプとして使用し、別の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を使用して画像テキストを解析することは非常に幸運でしたが、それを行うにはシェルにバウンスする必要があります。 gocr -i whatever.pdf
のように(PDFで動作すると思います)。
これらすべての欠点は、それらが純粋なRuby実装ではないことですが、多くの優れた(そして無料の)OCRプロジェクトはそのように行われているようです。
PDFファイルからテキストコンテンツを取得する必要がある場合は、sourceforgeのpdftohtmlが効率的です。画像の取り扱いには適していません。