このページは過去に掲載していたものをそのまま使用しています。

EPSでのセンタリングの処理を改善

いままでは左寄せ以外のテキストオブジェクトを 正しくEPS出力することができなかった。この理由は日本語化による シンプルなものだったが、これを正確に修正する事は困難と考えられた。 そのために今回は抜け道を使ってこれを実現することにした。

解決方法

問題点は改めて述べない。テキストの配置については左寄せ、 右寄せ、中寄せの3つを指定することができた。EPS出力ではこれらを 各々違う方法で処理をしていたが、これが問題を深刻にした。

今回は元のプログラムを根本的に書換えることになった。次に述べる方法が 正しいかどうかコメントを求める。

日本語化以前

日本語化以前の処理を配置の方法毎に説明する。右寄せと中寄せの方法における 相異点を斜字体で示した。

左寄せ
文字の始点を表わす座標情報(x, y)、と文字(text)の対をrendererに渡し、 その位置に出力する
右寄せ
文字の終点を表わす座標情報(x, y)、と文字(text)の対をrendererに渡し、 (x, y)から(text)の幅だけ減算を行ない、その位置を始点として出力する
中寄せ
文字の終点を表わす座標情報(x, y)、と文字(text)の対をrendererに渡し、 (x, y)から(text)の半分の幅だけ減算を行ない、 その位置を始点として出力する

上の説明にある、演算は主にPostScriptの機能を使って実現されている。

日本語化によるEPS出力処理の変化

出力するテキストを「2byte文字」と「1byte文字」のかたまり毎にフォントを 切り替える処理を付加した。これによってテキストオブジェクトの配置によって そのままでは意図した通りに出力することができない。

左寄せ
出力した文字の幅だけ座標 xの値に加えて、次の文字を出力することで 容易に解決可能

上に上げた左寄せの解決方法を実装したままでは、次のような副作用がでる。

右寄せ
テキストの終点の位置を始点であるかのように出力してしまい、 画面の右端からはみだしてしまう
中寄せ
一番最初の文字が画面の中央に出力され、それ以降はその文字分+αだけ 右にずれる

わかりやすい例として以前書いたページ から画面のダンプ画像を紹介する。
[ small image (20KB) | large image (67KB) ]

具体的な解決策

右寄せと中寄せを左寄せの出力に変換することで、この問題点を解決した。

右寄せ
終点として与えられた x 座標から1,2byte文字を含む全体の長さを 引き算した結果を始点として左寄せで文字を出力する
中寄せ
中点として与えられた x 座標から1,2byte文字を含む全体の長さの 半分を引き算した結果を始点として左寄せで文字を出力する

Yasuhiro Abe <yasu@europa.u-aizu.ac.jp>
Last modified: Fri Feb 18 00:23:48 2000