読者です 読者をやめる 読者になる 読者になる

pdf ファイルからイメージファイルを取り出す(ruby, poppler)

ruby で pdfファイル内のテキスト、図の情報を取り出すのをどうするか。
簡単なのは poppler みたいなので、試して見る。
poppler 自体は他の gem のインストール時に勝手に入っているので問題なし。
ただし日本語を含むものはエラーが出るので poppler-data が必要のようだ。

Windows上のRubyで日本語PDFを読むためにpoppler-dataをインストールする方法 - アイデアの甕 を参考にさせてもらった。
Poppler の下の方にある、poppler-data のリンク
(本日現在で https://poppler.freedesktop.org/poppler-data-0.4.7.tar.gz )を解答したフォルダを
poppler にリネームして、poppler-gem の下に置けば良い。

こちらの環境では次のフォルダの下ということにになる。
C:\Programs\ruby\lib\ruby\gems\2.3.0\gems\poppler-3.0.8-x86-mingw32\vendor\local\share

テキストの取り出しは至って簡単。
イメージの取り出しは、pdf に格納されているままということではなく、write_to_pngpng ファイルとして書き出すことになる。
image_mapping メソッドがページ内のイメージ数の取得に使えそうだが、[]を返すので、nil になるまでループを回すしかなさそう。

require 'poppler'

if ARGV.empty?
  puts 'usage: rb get_image.rb file [files...]'
  exit
end

ARGV.each_with_index do |file, file_num|
  file = file.encode 'utf-8'
  doc = Poppler::Document.new file
  doc.pages.each_with_index do |page, page_num|
    puts "file: #{file}, page: #{page_num}"
    image_num = 0
    loop do
      img = page.get_image image_num
      break unless img
      filename = "#{File.basename(file, '.*')}_#{page_num}_#{image_num}.png"
      img.write_to_png filename
      image_num += 1
    end
  end
end