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

