Home » FreeBSD » Migrate to FreeBSD 9.1-RELEASE (PDFJ.pm) (Tag: , )

今回の適用内容は FreeBSD のバージョンよりインストールされている Perl のバージョンに依存するため、他の FreeBSD のバージョンや OS (CentOS, Mac OS 等) でも有用でしょう。

Drive Network では、見積書・請求書等は PDFJ.pm を使用して 100% Pure Perl で作成しています。

当初作成した 2004 年以降、システム系も顧客収容機器もすべて Perl のバージョンを 5.005 から 5.8.9 に変更しました。

PDFJ.pm は 0.72 を使用していましたが、バージョンアップされたリリースではインストールや使用時の違和感が拭えず、継続して 0.72 を使用することとしました。

ところが、Perl 5.8.9 で使用すると以下の様な警告が多発します。

Pseudo-hashes are deprecated at /usr/local/lib/perl5/site_perl/5.8.9/PDFJ.pm line 2839.
Pseudo-hashes are deprecated at /usr/local/lib/perl5/site_perl/5.8.9/PDFJ.pm line 2470.
Pseudo-hashes are deprecated at /usr/local/lib/perl5/site_perl/5.8.9/PDFJ.pm line 2475.
Pseudo-hashes are deprecated at /usr/local/lib/perl5/site_perl/5.8.9/PDFJ.pm line 2481.
Pseudo-hashes are deprecated at /usr/local/lib/perl5/site_perl/5.8.9/PDFJ.pm line 3570.
Pseudo-hashes are deprecated at /usr/local/lib/perl5/site_perl/5.8.9/PDFJ.pm line 3571.
Pseudo-hashes are deprecated at /usr/local/lib/perl5/site_perl/5.8.9/PDFJ.pm line 3572.
Pseudo-hashes are deprecated at /usr/local/lib/perl5/site_perl/5.8.9/PDFJ.pm line 3573.
Pseudo-hashes are deprecated at /usr/local/lib/perl5/site_perl/5.8.9/PDFJ.pm line 3570.
Pseudo-hashes are deprecated at /usr/local/lib/perl5/site_perl/5.8.9/PDFJ.pm line 3571.
Pseudo-hashes are deprecated at /usr/local/lib/perl5/site_perl/5.8.9/PDFJ.pm line 3572.
Pseudo-hashes are deprecated at /usr/local/lib/perl5/site_perl/5.8.9/PDFJ.pm line 3573.

Pseudo-hashes は Perl 5.10 以降ではエラーとして進まない様です。5.8.9 では警告で収まりますが、1 つの PDF ファイルを作成するだけで数 100 行以上出る場合があります。

PDFJ 0.90 Perl 5.10 向け patch は公開されていますが、PDFJ 0.72 用には公開されていないため、前述の patch を参考に PDFJ 0.72 用 patch を作成しました。

--- PDFJ.pm.0    2011-06-27 17:17:13.000000000 +0900
+++ PDFJ.pm      2011-06-27 17:35:56.000000000 +0900
@@ -2206,13 +2206,6 @@
     $self->{hyphened} = 0;
 }

-my %TextLineIndex = (
-    Start => 1,
-    Count => 2,
-    Shift => 3,
-    FixedGlues => 4,
-);
-
 sub _fold {
     my($self, $linesize, $align) = @_;
     my $chunks = $self->chunks;
@@ -2307,7 +2300,13 @@
                     $self->fixsize($start, $count, $fixedglues)) / 2;
             }
         }
-        push @lines, [\%TextLineIndex, $start, $count, $shift, $fixedglues];
+        my %hash =(
+            Start      => $start ,
+            Count      => $count ,
+            Shift      => $shift ,
+            FixedGlues => $fixedglues ,
+            );
+        push(@lines,\%hash);
         $start = $nextpos;
     }
     @lines;
@@ -2322,7 +2321,7 @@
     my($can, $canleft, $pre, $word);
     if( $string =~ /([A-Za-z]-)([A-Za-z])/ ) {
         $can = $`.$1;
-        $canleft = $2.$';
+        $canleft = $2.$'; #'
     } elsif( $string =~ /[A-Za-z]{5,}/ ) {
         $pre = $`;
         $word = $&;
@@ -3289,28 +3288,30 @@

 # chunk array index
 my %ChunkIndex = (
-    Style => 1,           # PDFJ::TextStyle object
-    Mode => 2,            # description as above
-    Class => 3,           # description as above
-    Splittable => 4,      # 1 for splittable at pre-postion
-    Glue => 5,            # normal glue width
-    GlueDec => 6,         # decrease adjustable glue width
-    GlueInc => 7,         # increase adjustable glue width
-    GluePref => 8,        # glue preference
-    Count => 9,           # characters count
-    String => 10,         # characters string
-    PreShift => 11,       # postion shift at pre-postion
-    PostShift => 12,      # postion shift at post-postion
-    GlueFix => 13,        # fixed glue (to be calculated)
-    Hyphened => 14,       # 1 for splitted, 2 for hyphened
-    RubyText => 15,       # ruby PDFJ::Text object
-    AltObj => 16,         # alternative object for String
+    Style       =>  0,    # PDFJ::TextStyle object
+    Mode        =>  1,    # description as above
+    Class       =>  2,    # description as above
+    Splittable  =>  3,    # 1 for splittable at pre-postion
+    Glue        =>  4,    # normal glue width
+    GlueDec     =>  5,    # decrease adjustable glue width
+    GlueInc     =>  6,    # increase adjustable glue width
+    GluePref    =>  7,    # glue preference
+    Count       =>  8,    # characters count
+    String      =>  9,    # characters string
+    PreShift    => 10,    # postion shift at pre-postion
+    PostShift   => 11,    # postion shift at post-postion
+    GlueFix     => 12,    # fixed glue (to be calculated)
+    Hyphened    => 13,    # 1 for splitted, 2 for hyphened
+    RubyText    => 14,    # ruby PDFJ::Text object
+    AltObj      => 15,    # alternative object for String
+    RubyOverlap => 16,    # ruby overlap size
 );

 sub new {
     my($class, @args) = @_;
-    unshift @args, \%ChunkIndex;
-    bless \@args, $class;
+        my %hash  = map {  $_ => $args[ $ChunkIndex{ $_ } ] } keys(%ChunkIndex) ;
+
+    bless \%hash, $class;
 }

 sub clone {

上記を適用することで警告は収まることは確認しています。

なお、適用の有無に関わらず Perl 5.8.9 では生成される PDF ファイルの内容に md5 の照合でも差がないこともまた確認しています。

# が、PDFJ のすべての動作を確認した訳ではありません。予めご了承ください。

Random Select

純生讃岐うどん (9)
うどん本陣 山田家 (純生讃岐うどん Part 1) の続きです。1 回目初回は冷やかけうどんをイメージしたので、だしは先に用意して冷ましておきました。実はうどん用のどんぶりがないので、片手ハンドルの
揚げずにからあげ (鮭) + 釜揚しらす
揚げずにからあげ (鮭 Part 1) の続きです。今回の調理に用意したかの様にちょうど良いサイズのフライパンがありました。小さじ 2 杯程のサラダ油を引いて熱した後、いよいよ焼き始めます。並べる前に
Pioneer BDR-XS05J (1)
VAIO Fit 13A (リカバリーメディアの作成) の続きです。VAIO Fit 13A はディスプレイサイズが 13.3inch ながらバッテリー込みで 1.31kg ですから、当然の様に DV
カフェテリア・スタイル
レンタルサーバ (ホスティングサービス) にカフェテリア・スタイルと聞くと、違和感を感じるかもしれません。世間では BTO (Build to Order) の方が通りが良いでしょう。現在の 共有サー
ハッシュ・ド・ビーフ (2)
ハッシュ・ド・ビーフの作り方 (No. 1) 以降 4 回に分けて紹介した作り方で、今でも最低年に 1 回はたっぷり作って堪能しています。ゴールデンウィークに久しぶりに作ろうと、牛肩ロースブロック(豪
ナポリタン (メン 大)
柏や (アジフライ定食) の続きです。連休が明けて今日もデータセンターで作業。データセンターでの作業も好きな部類ですが、最近は柏や目当てでもあるかの様に連続して通っています。やっぱり気になっていたナポ
FreeBSD Logo
携帯電話を ARROWS X F-10D に変更した後、調査不足かもしれませんが写真の解像度が 3M か 13M しか選択出来なくなりました。3M では以前使用していた X06HTII よりも劣るため
二代目つけ麺
東京オフィスから歩いて 3 分程度のところに、いつも行列の出来る麺どころが めん徳二代目つじ田 です。魚介豚骨と言われるジャンルでしょうか。提供されると、提供したスタッフが "すだちは途中で
iPhone 6 + iPhone 6 Plus
ARROWS X F-10D を使い続けて 2 年。使い始めから電池の持ちが悪かったのですが、iPhone 6 Plus が発売開始となり、ついに機種変更に踏み切りました。Apple Store Gi
野菜そば
最近 facebook で色々な方の沖縄ご飯を見ているせいか、突然沖縄そばが食べたくなる衝動が頻発して来ました。そう言えば、オフィスから歩いて 3 分程度の距離に すばや があるではないかとふと思い出
Valid HTML5 Valid CSS3 Another HTML Lint