Apache FOPで、文字列を均等割り付けする

松本です。

Excelのようにセル内の文字列を均等割り付けして表示して欲しいと、リクエストがありました。FOPのリファレンスを探してみましたが、該当するようなプロパティは見つかりません。

そこで、別の機能を使用して、この機能を実現する事にしました。

実現方法として、以下の2パターンを考えてみました。

  1. text-align-last を使用する。
  2. word-spacing を使用する。

どちらも、文字間に半角スペースを入れて、各文字を単語として認識させ、単語の間隔を調整することで、均等割り付けを実現します。

 以下のような記述の場合、

<fo:table-cell>
  <fo:block start-indent=”8mm” end-indent=”8mm”>
    件数
  </fo:block>
  <fo:block start-indent=”8mm” end-indent=”8mm”>
    最大値
  </fo:block>
  <fo:block start-indent=”8mm” end-indent=”8mm”>
    最大件数
  </fo:block>
  <fo:block start-indent=”8mm” end-indent=”8mm”>
    超最大件数
  </fo:block>
</fo:table-cell>

このような出力になります。

20090925164737-00128

まずは、text-align-last を使用してみましょう。

以下のように記述を変更します。文字間の半角スペースを忘れずに入れてください。

 <fo:table-cell>
  <fo:block start-indent=”8mm” end-indent=”8mm”
            text-align-last=”justify”>
    件 数
  </fo:block>
  <fo:block start-indent=”8mm” end-indent=”8mm”
            text-align-last=”justify”>
    最 大 値
  </fo:block>
  <fo:block start-indent=”8mm” end-indent=”8mm”
            text-align-last=”justify”>
    最 大 件 数
  </fo:block>
  <fo:block start-indent=”8mm” end-indent=”8mm”
            text-align-last=”justify”>
    超 最 大 件 数
  </fo:block>
</fo:table-cell>

このような出力になります。

 20090925170827-00129

「超最大件数」を見て判るように、半角スペースの間隔未満には対応できません。

次に、word-spacing を使用してみましょう。

フォントサイズを使用して、間隔を計算します。

from-parent(‘font-size’)×((最大文字数-表示文字数)÷(表示文字数-1)-0.5)

以下のように記述を変更します。この場合も、文字間の半角スペースを忘れずに入れてください。

<fo:block start-indent=”8mm”
          word-spacing=”from-parent(‘font-size’) * (4 div 1 – 0.5)”>
  件 数
</fo:block>
<fo:block start-indent=”8mm”
          word-spacing=”from-parent(‘font-size’) * (3 div 2 – 0.5)”>
  最 大 値
</fo:block>
<fo:block start-indent=”8mm”
          word-spacing=”from-parent(‘font-size’) * (2 div 3 – 0.5)”>
  最 大 件 数
</fo:block>
<fo:block start-indent=”8mm”
          word-spacing=”from-parent(‘font-size’) * (1 div 4 – 0.5)”>
  超 最 大 件 数
</fo:block>

このような出力になります。

20090925172516-00130

この方法では、マイナスの間隔まで対応できますが、計算式が面倒くさいですね。

今のところ2番目の方法を使っていますが、最適なプロパティが埋もれているかもしれません。ご存知の方は、ご一報を

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です