拙著「WordPress Web開発逆引きレシピ」が発売されました。
WordPressの様々なカスタマイズについて、逆引きの形式で取り上げています。
PHP 7.0での動作確認も行っています。
PerlでPDFのサムネイルを作る
MTQに、「PDFファイルのサムネイルが作成されない」といった内容の質問がありました。
現状のMovable Typeには、PDFのサムネイルを自動で作成する機能はありませんので、仕様ということになります。
ただ、PDFのサムネイルをPerlで出力することができれば、サムネイルの自動作成機能を追加することができるはずです。
そこで、PDFのサムネイルをPerlで出力する方法を調べてみました。
ImageMagickでサムネイルを出力する
各種の画像ファイルを操作するプログラムとして、ImageMagickがよく使われています。
ImageMagickでは、PDFを読み込んで、そのサムネイルを出力することもできます(ただし、GhostScriptもインストールされていることが必要)。
例えば、「foo.pdf」というPDFファイルがあるとします。
このPDFファイルの1ページ目のサムネイルを作って、「foo.png」というファイルに保存するとします。
この場合、以下のようにコマンドを入力します。
「foo.pdf[0]」の「[0]」が、PDFの最初のページを表します。
convert foo.pdf[0] foo.png
また、サムネールのサイズを指定することもできます。
それには、「-resize」というパラメータを指定します。
例えば、サムネイルの幅を300ピクセルにし、高さはPDFの縦横に応じて自動的に決まるようにしたいとします。
この場合は、以下のようにコマンドを入力します。
convert foo.pdf[0] -resize 300 foo.png
PerlでImageMagickを操作してサムネイルを出力する
PerlでImageMagickを操作するには、「PerlMagick」というモジュールを使います。
PerlMagickはImageMagickに同梱されています。
PerlMagickを使うには、以下の手順を取ります。
- 「use Image::Magick;」の文で、PerlMagickのモジュールを読み込みます。
- 「Image::Magick->new;」でPerlMagickのオブジェクトを作成します。
- PerlMagickオブジェクトのメソッドを使って、各種の操作を行います。
例えば、先ほど取り上げた「foo.pdfのサムネイルを、幅300ピクセルで出力する」という例だと、以下のようなソースコードになります。
4行目の「foo」が、ファイル名から拡張子を除いたものです。
また、5行目の「300」が、サムネイルの幅です。
4行目と5行目を書き換えれば、任意のPDFのサムネイルを任意のサイズで出力することができるはずです(ただし、パスワード付きのPDFについては検証していません)。
use strict; use Image::Magick; my $filename = 'foo'; my $thumb_width = 300; my $image = Image::Magick->new; $image->Read("${filename}.pdf[0]"); $image->Thumbnail(geometry => $thumb_width); $image->Write("${filename}.png");