例によってRedHat EL4にて、yumでconvertを入れたものの、バージョンが6.4.6と古く、Powerpointで作成したPDFがエラーになる。
エラー内容はこんな感じ。
$ convert -channel RGB ./test.pdf ./test.jpg **** This file has a corrupted %%EOF marker, or garbage after the %%EOF. **** The file was produced by Microsoft? PowerPoint? 2010: **** please notify the author of this software **** that the file does not conform to Adobe's published PDF **** specification. Processing of the file will continue normally. Error: /rangecheck in --.buildshading2-- Operand stack: --dict:8/8(L)-- --dict:3/5(L)-- --nostringval-- false --nostringval-- --nostringval-- --nostringval-- --nostringval-- --dict:3/4(L)-- --nostringval-- --dict:5/5(L)-- Execution stack: %interp_exit .runexec2 --nostringval-- --nostringval-- --nostringval-- 2 %stopped_push --nostringval-- --nostringval-- --nostringval-- false 1 %stopped_push 1 3 %oparray_pop 1 3 %oparray_pop 1 3 %oparray_pop --nostringval-- 2 1 2 --nostringval-- %for_pos_int_continue --nostringval-- --nostringval-- --nostringval-- --nostringval-- 1 %stopped_push --nostringval-- --nostringval-- --nostringval-- 1 %stopped_push --nostringval-- --nostringval-- %array_continue --nostringval-- false 1 %stopped_push --nostringval-- %loop_continue --nostringval-- --nostringval-- --nostringval-- 3 10 %oparray_pop --nostringval-- --nostringval-- false 1 %stopped_push --nostringval-- --nostringval-- Dictionary stack: --dict:1069/1123(ro)(G)-- --dict:0/20(G)-- --dict:93/200(L)-- --dict:93/200(L)-- --dict:97/127(ro)(G)-- --dict:229/230(ro)(G)-- --dict:19/24(L)-- --dict:4/6(L)-- --dict:19/20(L)-- --dict:3/5(L)-- Current allocation mode is local GNU Ghostscript 7.07: Unrecoverable error, exit code 1 convert: Postscript delegate failed `./test.pdf': No such file or directory @ pdf.c/ReadPDFImage/612. convert: missing an image filename `./test.jpg' @ convert.c/ConvertImageCommand/2710.
で、見る限り、GhostScriptのエラーのようなので、gsのバージョンを調べてみると、
$ gs -v
GNU Ghostscript 7.07 (2003-05-17)
Copyright (C) 2003 artofcode LLC, Benicia, CA. All rights reserved.
というわけで、GhostScriptのコマンドの最新版を別にインストールして対応。その際、元のgsコマンドを入れ替えるわけにいかなかったので、ImageMagickから読み込むgsコマンドのファイルだけを指定できないかと思ったら、ImageMagickはXMLでコマンドを定義していたんですね。
ImageMagick • View topic – manually set delegate path to gs (ghostscript)
各種コマンドのオプションがImageMagick-6.4.6/config/delegates.xmlに記述されています。
gsコマンドの箇所を絶対パスに書き換えてやるだけで完了。便利。