このページは過去に掲載していたものをそのまま使用しています。
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