rmagick で PDFを作るのがちょっと手間だったのでメモ
ruby の imagemagick 実装である rmagick が有ります。
RMagick を使えば、magick 関連が使えるbindings で重宝する。
無論、Rubyからmagickを使うには、convert/mogrifyのシェル呼び出しで済むのだ。
だけど、シェル呼び出しだと一時ファイルを作ったり消したりになるので、デバッグが一手間増えるんですよ。
シェル呼び出しは確実なんだけど、パパパパパパッと試したい時に不便だったりする。
RmagicでPDF作成
シェル呼び出しだとこれだけで済むのですが
convert sample1.jpg sample2.jpg out.pdf
これと同じをRMagickでやるには
#!/usr/bin/env ruby require 'RMagick' r = Magick::ImageList.new() r.push( Magick::Image.read( 'sample1.jpg')[0] ) r.push( Magick::Image.read( 'sample2.jpg')[0] ) r.write('out.pdf')
このようになる。
ポイントはImageListもImageも配列であるということ
ruby から処理を行うと Magick::Image
と Magick::ImageList
のどちらも、配列風のオブジェクトであるという点にある。
そのため、push しようとしても「配列なんていられるか!バーカ!」と rmagickに怒られることになる。
/Users/takuya/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/rmagick-2.15.4/lib/rmagick_internal.rb:1291:in `is_an_image': Magick::Image required (Array given) (ArgumentError) from /Users/takuya/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/rmagick-2.15.4/lib/rmagick_internal.rb:1729:in `block in push' from /Users/takuya/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/rmagick-2.15.4/lib/rmagick_internal.rb:1728:in `each' from /Users/takuya/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/rmagick-2.15.4/lib/rmagick_internal.rb:1728:in `push' from rmagick-test.rb:9:in `<main>'
そのため、Imageから先頭を取出す(どうせ要素数1なのに面倒くさい)
image_list = Magick::ImageList.new() i = Magick::Image.read( 'sample1.jpg')[0] image_list.push i
このような一手間増える処理が必要だった。
これを行うことで、JPEGだけから構成されるPDFを作成することが出来る。
画像JPEG だけから構成されるPDFはZipファイルをより管理が容易だし、メールなどで送付する際にも大変便利。