c/fe

http://d.hatena.ne.jp/uzulla から移行しました。

PDFJで文字色指定

PDFを生成する案件に取り組んでいるのだが、なかなかややこしい。
組版言語ってややこしいですね、HTMLって単純ですね。


PDFは座標の始点が左下であるとか、その割にBlock オブジェクトの内部的な座標自体は左上始点とか、まあこんがらがる。
10ポイント動かして再コンパイル、リロード、ずれすぎた、5ポイント戻して再コンパイル、リロード、戻りすぎた。


最終的に背景に用紙サイズぴったりの画像をおいて、その画像のサイズをぴったり595*841ピクセルの画像にして、そのドット位置を確認するという事をすれば案外に目安をとりやすいという技を考えた。
(PDFでは595ポイント*841ポイントがA4用紙サイズ)


さておき、PDFJではオブジェクトにスタイルを適用して体裁を決める。
たとえば

my $text = Text($textline, TStyle(font => $font, fontsize => 10));
$text->show($page, $x, $y);

こんなノリ。

基本図形(丸とか)は

my $bgraph = Shape->polygon([$bx[0],$by[0], $bx[1],$by[1], $bx[2],$by[2] ], 's', SStyle( strokecolor => Color('#0000FF') ) );
$bgraph->show($page, $x, $y);

こんなノリ。

HTMLに慣れている身としは結構わかりやすい。

で、作業中、当然のように文字の色を変える必要がでたのだが、なんとTStyle(たぶんTextStyle)にcolorプロパティがないのだ。
上のShapeをみればわかるが、ShapeのStyleにはstrokecolorというものがあり、Color()で生成したオブジェクトを渡して指定出来る。しかしそれがテキストには無い。


まさかテキストには色が指定出来ない?



さすがにそんなわきゃーなかった、でもすごい面倒だった

TStyle( shapestyle => SStyle(fillcolor => Color("#FFFFFF")) )

こう指定する。
うん、まあTextはShapeの継承なんだろうなーというのはわかるので、こういう風に書くのはわからんでもない。
でも普通文字の色ってよく変えるじゃん、なんでこんな面倒な?


そしてPDFJのリファレンスになる作者のページ*1にも特別な記載がないでやんの。サンプルコードに載ってたからわかったけど(正しくは載っているよ、と書いてあるページを見つけたのだが)、そんなみんな文字の色変えないのか?(違