以前、こんな話題を掲載しました。 → PDFJ は perl5.12 では動作しない模様
相変わらず、原因を追いかけるほど暇もカネも無いので、ほったらかしだったですが、今般開発中の案件に使えたら使いたいと思い、諸般の事情も手伝って、無理やり時間割いてみました。。orz
Google 殿に尋ねると、Perl 5.12 でも動いているよという情報も・・・
「うーむ、ウチでは Perl 5.12 にしたら動作しなくなったんだけどな!!」と思いつつ・・
FreeBSD では、ports にも PDFJ-0.90 が入っていて、Perl 5.14 で動作するようなパッチが当てられているようです。なので、これを ports にてインストール。でも、相変わらず 「PDF ファイルが壊れています」とAdobe Reader に怒られます。。
テキストエディタで「壊れている PDFファイル」を覗いてみる。すると、エラー内容などがテキストで吐き出されている。orz こんな感じ:
error in 'BODY': error in 'Block': error in 'break': error in 'do': error in
'eval': eval error: 'print' trapped by operation mask at (eval 2122) line 2,
line 3873.
: '
print "page",$page->pagenum,"\n" if $Args{'XPDFJ:verbose'} >= 0;
$Args{hfpage} ||= $page->pagenum;
' at libs/XPDFJ.pm line 589, line 3873.
ここで再び Google殿に尋ねると、perl 5.10 にて同じ現象で嵌った方が、、
PDFJをperl5.10で動かす 〔紀子さん@へぼぷろぐらまの日常〕
もう4年前のものなんですが、例の Perl 5.10用パッチ入れても動作しないという現象。
「ウチでは、Perl 5.10 では動作したなぁ」と思いつつ、どう対処したかというと
『とりあえず該当行をコメントしてしまうという暴挙に出、まぁ解決』
ぉ、、・・・orz
でも、この暴挙を試そうと、該当箇所を探すが。。。
XPDFJ.pm 上に無い。。散々探したあげく、モジュールで提供されているインクルードファイルに stddef.inc というファイルがあり、その中にありました。orz
行番号なんかあてになりません。XPDFJ.pm にてインクルードした後の行番号が表示されている模様。。 stddef.inc の 1135行目あたりにありました。
# <eval>;
# print "page",$page->pagenum,"\n" if $Args{'XPDFJ:verbose'} >= 0;
# $Args{hfpage} ||= $page->pagenum;
# </eval>
こんな感じで「暴挙」を実施したところ・・・
動作するようになりました。たぶん、ページ番号振る部分ですかね。。
ひょっとして、これも Safeモジュール絡みかも??
エラーに print文の部分が含まれているからです。
追いかける暇なんぞ、なかなか持てないので、とりあえず文句言われない限りはこのままになると思います。。