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

東綾瀬公園 (2)
今年は観測史上 2 番目に桜の開花が早いとのことでした。個人的には、ここ 1 年程は実際の気候とカレンダーが 1 ヶ月近くずれ続けている気がしています。それはともかく、自宅の近所には通路と公園を兼ねた
一番搾り フローズン (3)
今年の夏から開始して話題となっている 一番搾り フローズン <生> を是非専門店 一番搾り FROZEN GARDEN でまず試してみたいと 8/14 に行ってみました。最寄りの一番搾り
FreeBSD Logo
PHP 4.4.9 + OpenSSL 0.9.8 系の環境を OpenSSL 1.0.1j にアップデートした際に躓いた点を整理します。configure は通りますが make で以下の様にストッ
辛つけ麺 (中) + 半熟玉子
三田製麺所 (つけ麺) で開店間もない御茶ノ水店を訪れて 1 週間も空けずに再び訪れました。辛つけ麺が気になっていたからです。つけ麺さとう (辛つけ麺)つけ麺屋やすべえ (辛味つけ麺)近場にすでにある
フレッシュマック
マクドナルド 懐かしのメニュー (スーパーマック) の続きです。価格は単品で 380 円。発売時期は 1991 年 6 月頃 ?専用胚芽入りバンズ・ハム 3 種類・トマト・フレッシュオニオン・カラシマ
銀座わしたショップ 2014/06/13 (8)
銀座わしたショップ 2014/06/13 (三線自動演奏機) の続きです。1F は食料品を含めた物販がメインなので、改めて眺めてみることにしました。1F の入口左手側は冷蔵食品が並んでいて、最近興味が
和風おろしハンバーグと海老フライ定食
築地食堂 源ちゃん (魚河岸フライ定食) からあっという間に 1 年弱過ぎてしまいました。ここ最近はカリーライス専門店 エチオピア 本店 (No. 13 – 辛さ 70 倍メドレー 1)哲
Havana カレー (ビーフ, ライス大盛り, ルー大盛り x 2, 辛さ 20 倍)
沖縄出張 (No. 8 ? Havana CURRY) の続きです。前回 2012/10 に久しぶりに訪れた後、東京に戻ってからは 欧風カレー ボンディ (チキンカレー) や カリーライス専門店 エチ
雑貨さくら (5)
与那国島 (No. 13 – 雑貨さくら) が 2013/08/24 – 2013/08/28 の期間限定で東京に出店すると知り、楽しみにしていました。始めの方はきっと混雑もす
チキン + 野菜カレー (ルー大盛り, 辛さ 70 倍)
カリーライス専門店 エチオピア 本店 (No. 6 – 辛さ 55 – 60 倍) の続きです。さて、残るは辛さ 65 倍と 70 倍です。エチオピアに訪れる前までは &quo
Valid HTML5 Valid CSS3 Another HTML Lint