« 2007年12月 | メイン | 2008年3月 »

2008年2月 アーカイブ

2008年2月21日

Imager::DTPの縦書きにおける「ー」問題のその場しのぎ的対処

Imager::DTPの縦書きは便利だけど「ー」がうまく「|」の方向になってくれない。 なので回転させてリフレクトさせた。 場所がずれるのでかなり適当に調整、ぶっちゃけ勘>< ちなみにこんな問題です。

--- Letter.pm.org       2008-02-21 00:36:56.000000000 +0900
+++ Letter.pm   2008-02-21 12:29:39.000000000 +0900
@@ -4,6 +4,7 @@
 use Imager;
 use Imager::Matrix2d;
 use vars qw($VERSION);
+use utf8;

 $VERSION = '0.05';

@@ -67,12 +68,28 @@
                $self->getFont()->transform(matrix=>$m);
        }
        # draw letter - using Imager::String method
+       my $font = $self->getFont;
+       my $x = $o{x} + $self->getLeftBearing();
+       my $y = $o{y} + $self->getGlobalAscent() - $self->getAscent();
+       if($self->getText() eq "ー" ){
+           my $m1 = Imager::Matrix2d->rotate(degrees => 270);
+           my $m2 = Imager::Matrix2d->reflect(axis => 'x');
+           my $matrix = $m1 * $m2;
+           $font->transform(matrix => $matrix);
+           my $bbox = $font->bounding_box( string => $self->getText(),
+                                           size=>$font->{size});
+           $x = $x + $bbox->total_width / 2;
+           $y = $y - $self->getAscent() + $self->getAscent() / 4;
+       }else{
+           my $matrix = Imager::Matrix2d->rotate(degrees => 0);
+            $font->transform(matrix => $matrix);
+       }
        $o{target}->string(
                %{$o{others}},
-               x => $o{x} + $self->getLeftBearing(),
-               y => $o{y} + $self->getGlobalAscent() - $self->getAscent(),
+               x => $x,
+               y => $y,
                text => $self->getText(),
-               font => $self->getFont(),
+               font => $font,
                utf8 => 1, vlayout => 0, align => 0
        ) or die $o{target}->errstr;
        # draw baseline position - for debug

About 2008年2月

2008年2月にブログ「Yusukebe::Tech」に投稿されたすべてのエントリーです。過去のものから新しいものへ順番に並んでいます。

前のアーカイブは2007年12月です。

次のアーカイブは2008年3月です。

他にも多くのエントリーがあります。メインページアーカイブページも見てください。


ブログSEO対策:track word seo