- - PR -
FOPのstring-length関数の動作について
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2002-08-28 18:25
FOPのstring-lengthは、ユニコード文字で文字数をカウントしているようなので、
半角、全角の区別無くちゃんと1文字1文字数えてくれます。この動作なのですが、 全半角が混ざっている文字列をテーブルセル内に綺麗に文字を詰めようとすると、 一定の文字数ごとに改行文字を入れるということでは、文字の幅が異なるので 見た目が汚くなってしまいます。半角、全角文字の重みを累積して行き、ある幅 に達したところで改行を入れるなどすればいいのでしょうが、何とかスマートに やる方法はないでしょうか。 FOP0.20.1JPを使ってます。 |
|
投稿日時: 2002-08-29 17:29
う〜ん、実は難しいのでしょうかねーこういった処理は。
今日試してみた事を、自己レスになりますが書きます。 半角と全角が混ざっているから上手く行かないのであって、全角に統一 してしまえばいいのではと思い、XSLTでtranslate()関数を使って、 半角文字を全角文字に変換してから改行処理を行ってみました。 半角よりもスペースを食いますが、フォントサイズをその分落として対 処。決定打が見つからないうちはこれでやってこうと思いますが、もっ と楽な方法を切望してますので、書き込み待ってまーす。 |
|
投稿日時: 2002-09-01 00:51
元々が欧文組版エンジンなので、全角半角、字詰めの
発想とは動作が違うので、限界があるのでは。 (自分で行長計算で改行を予定したとしても) HTML / TeXなどの原稿データ修正で改行の変化を正しく予測 できる技能を持つ人なら可能かもしれないが。 ギリギリのサイズの小さな表項目にピッタリ詰めるのは 仕事としてはしたくないです。 たいていは XSL-FO のサンプルはスカスカで、行末1文字以上の空き で仕上げるのが安全でしょう。 改行が多発する場合に、日本語組版エンジンとの違いがはっきり します。改行の予測しやすさについては。 しかし、FO を使う理由は自分で行長計算しないためではなかったのか? [ メッセージ編集済み 編集者: MMX 編集日時 2002-09-02 23:19 ] |
|
投稿日時: 2002-09-02 12:37
ご返答どうもありがとうございました。
>FO を使う理由は自分で行長計算しないためではなかったのか? あ、FOを使うメリットの一つにあるんですか、行長計算をしない ということが。その通りいけばいいですよねー、使う前まではこ んなことで悩むとは思ってませんでした。 FOを使った理由というのは、FOPを使ってPDF出力したい(FOP 使っている人のほぼ全員がそうだと思う)から使い始めたのです。 私はXML-FOのサンプルを作るのが仕事では無いですし、大勢が 携わっている仕事で使う帳票を作っているので、「改行が上手 くいかないから」という理由で勝手にレイアウトが変えられま せん。PDF化のメリットと文章レイアウトの困難さを天秤にかけ て、なおPDF化のメリットがあったので、このような面倒臭い制 御が必要でもなんとかできる方法が無いかと思い、全角化などの 策を使っております。実際に日本語文章を罫線にぴっちり収めな ければ目的の帳票にはならないので、「やれない」では無くて 「やらなければいけない」もしくは「やれ!」の世界です、今。 対人間に渡す出力物とかユーザインターフェイス作りには、泥臭 い処理が必要だと思うんですよ。そういう場面から私の導き出し た結果は今のところ全角化であり、他にスマートな方法が無いか なと質問した次第です。 現場の人には、全角化が素直に受け入れらてちょっと安心してま すが、全半角混在文章の方も諦めたわけではないです。泥臭い 経験をお持ちの方からの書き込みをお待ちしてます。 |
1