- PR -

FOPのstring-length関数の動作について

1
投稿者投稿内容
小僧
ぬし
会議室デビュー日: 2002/08/14
投稿数: 526
投稿日時: 2002-08-28 18:25
FOPのstring-lengthは、ユニコード文字で文字数をカウントしているようなので、
半角、全角の区別無くちゃんと1文字1文字数えてくれます。この動作なのですが、
全半角が混ざっている文字列をテーブルセル内に綺麗に文字を詰めようとすると、
一定の文字数ごとに改行文字を入れるということでは、文字の幅が異なるので
見た目が汚くなってしまいます。半角、全角文字の重みを累積して行き、ある幅
に達したところで改行を入れるなどすればいいのでしょうが、何とかスマートに
やる方法はないでしょうか。

FOP0.20.1JPを使ってます。


小僧
ぬし
会議室デビュー日: 2002/08/14
投稿数: 526
投稿日時: 2002-08-29 17:29
う〜ん、実は難しいのでしょうかねーこういった処理は。
今日試してみた事を、自己レスになりますが書きます。

半角と全角が混ざっているから上手く行かないのであって、全角に統一
してしまえばいいのではと思い、XSLTでtranslate()関数を使って、
半角文字を全角文字に変換してから改行処理を行ってみました。
半角よりもスペースを食いますが、フォントサイズをその分落として対
処。決定打が見つからないうちはこれでやってこうと思いますが、もっ
と楽な方法を切望してますので、書き込み待ってまーす。


MMX
ぬし
会議室デビュー日: 2001/10/26
投稿数: 861
投稿日時: 2002-09-01 00:51
元々が欧文組版エンジンなので、全角半角、字詰めの
発想とは動作が違うので、限界があるのでは。
(自分で行長計算で改行を予定したとしても)

HTML / TeXなどの原稿データ修正で改行の変化を正しく予測
できる技能を持つ人なら可能かもしれないが。

ギリギリのサイズの小さな表項目にピッタリ詰めるのは
仕事としてはしたくないです。
たいていは XSL-FO のサンプルはスカスカで、行末1文字以上の空き
で仕上げるのが安全でしょう。

改行が多発する場合に、日本語組版エンジンとの違いがはっきり
します。改行の予測しやすさについては。

しかし、FO を使う理由は自分で行長計算しないためではなかったのか?


[ メッセージ編集済み 編集者: MMX 編集日時 2002-09-02 23:19 ]
小僧
ぬし
会議室デビュー日: 2002/08/14
投稿数: 526
投稿日時: 2002-09-02 12:37
ご返答どうもありがとうございました。

>FO を使う理由は自分で行長計算しないためではなかったのか?

あ、FOを使うメリットの一つにあるんですか、行長計算をしない
ということが。その通りいけばいいですよねー、使う前まではこ
んなことで悩むとは思ってませんでした。
FOを使った理由というのは、FOPを使ってPDF出力したい(FOP
使っている人のほぼ全員がそうだと思う)から使い始めたのです。
私はXML-FOのサンプルを作るのが仕事では無いですし、大勢が
携わっている仕事で使う帳票を作っているので、「改行が上手
くいかないから」という理由で勝手にレイアウトが変えられま
せん。PDF化のメリットと文章レイアウトの困難さを天秤にかけ
て、なおPDF化のメリットがあったので、このような面倒臭い制
御が必要でもなんとかできる方法が無いかと思い、全角化などの
策を使っております。実際に日本語文章を罫線にぴっちり収めな
ければ目的の帳票にはならないので、「やれない」では無くて
「やらなければいけない」もしくは「やれ!」の世界です、今。
対人間に渡す出力物とかユーザインターフェイス作りには、泥臭
い処理が必要だと思うんですよ。そういう場面から私の導き出し
た結果は今のところ全角化であり、他にスマートな方法が無いか
なと質問した次第です。
現場の人には、全角化が素直に受け入れらてちょっと安心してま
すが、全半角混在文章の方も諦めたわけではないです。泥臭い
経験をお持ちの方からの書き込みをお待ちしてます。



1

スキルアップ/キャリアアップ(JOB@IT)