(10日目/番外編) SVG とフォントについて愚痴る。

blockidag で SVG 形式を使っている人はよく文字がはみ出る場面に遭遇します。

これは SVG が HTML のように「表示時にフォントが決定する」仕組みであるためです。
つまり、SVG ファイルを出力したときはどのようなフォントが用いられるかわからないのです。

これには表示する端末に指定したフォントがインストールされているかわからないという理由があるのですが、
blockdiag のような図形を生成するソフトウェアにとっては致命的です。
また、とても残念なことにテキストの折り返し機能も SVG にはありません。
描画時に「ローカルのフォントを元に」折り返し位置を予想してレンダリングしています。
そのため、表示するフォントによってずれが発生するのです。*1

CSS では描画時のヒント情報として font-family 属性を埋め込んで対処しますが、
この font-family 情報の生成は面倒な上に、あまり当てにはなりません。
ということで、blockdiag では generic-family だけを利用しています。

この部分についてはいい落とし所がよくわからなかったので、
もし解決策やいいアイディアをお持ちの方がいらっしゃれば是非教えて下さい。


あと PIL で Bold や Italic のレンダリングを行う方法も教えてもらえると大喜びします。

未熟すぎるんで吊ってきます… orz

*1:さらに補足すると Interactive Shell では PIL が利用できないため、超適当な文字幅予測をしています。そのため、幅広の文字(w など)が特にずれます