それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

PDFをページ数指定で高速に読み込む。

PDF 読み込み遅んだよ!

PDFってなんでこんなに無駄にページ数多いの。ってなりなす。PDFをMagickで読み込んだら遅いのなんのって。

require 'Rmagick'
name = 'out.pdf'
im = Magick::Image.read(name) # めっちゃ遅い
im.esize #=> 300

PDFが枚数多いとものすごく時間かかるんですよ。メモリも食うしたまったもんじゃない。PDF遅いってなる。

早く読む方法を見つけた

高速に処理できる。なんと、ページ数を指定して読み込むことが出来る。

require 'Rmagick'
name = 'out.pdf[0]'
im = Magick::Image.read(name) # 超早い!
im.esize #=> 1

PDFの各ページに配列のインデックスを扱うようにアクセスできる。便利。

速度を測定してみる。

out.pdf を作る

for i in {1..10}; cp src.png $i.png ; done 
convert *.png out.pdf

とりあえず、10枚程度のPNGを放り込んだPDFで実験する。

速い!

takuya@~/Desktop$ time ruby  while_pdf.rb

real    0m4.624s
user    0m4.132s
sys 0m0.226s
takuya@~/Desktop$ time ruby  one_page.rb

real    0m1.331s
user    0m1.211s
sys 0m0.047s

10枚のウチ1枚だから10%とまでは行かないけれど、4倍くらい速いかった。強い。

参考資料

RMagick で PDF を jpg や png に変換する - happy lie, happy life