RMagick で PDF を jpg や png に変換する

RMagick が内部で使用している ImageMagick には PDF を jpg などの画像に変換する機能があります。

convert test.pdf test.jpg

一番簡単な使い方は上の通り。手元の環境では特に jpg が残念な画質になりますが、そのあたりはオプションで(ある程度)補完が可能です。これをそのまま叩いてもいいのですが色々な配慮で Rmagick から実行するケースについて記載します。
テストは Mac を使い Ruby 2.0 で行いました。

準備

準備と言っても RMagick が正しくインストールされている環境であれば

require 'RMagick'

を書くだけで終わりです。

実際の変換

簡単なコードは

require 'RMagick'
file_name = "test.pdf"
image = Magick::Image.read(file_name)
image[0].write(file_name + ".jpg")

以上で終わりです。image[0] という記述で察しがつくとは思いますが image には PDF が1ページずつ読み込まれています。

応用編

オプションの指定

convert コマンドの各種引数にあたる値はブロックを使って設定します。

require 'RMagick'
file_name = "test.pdf"
image = Magick::Image.read(file_name) do
  self.quality = 100
  self.density = 200
end
image[0].write(file_name + ".jpg")

詳しいオプションについては公式ドキュメントを参照してください。

https://github.com/rmagick/rmagick

ページ指定読み込み

ページ数の多い PDF を読み込むとメモリの消費は増え、読み込みに時間もかかります。必要なページが決まっているのであれば、次のような指定で特定ページのみ読み込む事が可能です。

require 'RMagick'
file_name = "test.pdf[2]"
image = Magick::Image.read(file_name)
image[0].write(file_name + ".jpg")

オフセットの初期値は 0 なので、この場合 3 ページ目だけを読み込み、画像に変換する事ができます。

追記

環境によっては ghostscript がインストールされていないため PDF が正しく開けないかもしれません。パッケージは大体の環境に存在するはずなので、確認の後、適宜インストールしてください。