XMLからWord(.docx)をバッチ生成するXSLTスタイルシートを作っています.

良く以下のようなレイアウトがあると思います.説明文や手順を左に、その画像を右に配置するものです.

floatfigの例

これを記述できる要素をXML側に用意し、XSLTスタイルシートでは説明文はw:p(段落)、右の画像はテキストボックスの中に入れるようにして実現しています.(共にw:drawingでテキストボックスはw:pの先頭で生成)

単独の場合は良いのですが、説明や手順が複数になるとき、最初の説明文が右の画像より分量が少ないと、2番目の画像が1番目の画像に重なってしまいます.

画像が重なってしまうパターン

これを解決する手段をいろいろ調べましたが、どうも以下の様に本文側に空行を入れるしか手段がないようです.

空行の入力

しかしこれを手作業を行うには膨大な作業量が必要とされます.プログラムでなんとか空行を自動生成できればと考えています.つまり、b - a を計算して、空行の数に換算して自動挿入します.

持ち得ている材料は

  • bの高さは画像の高さなので容易に取得できます.
  • aの高さが問題です.元のXMLではなく、WordprocessingMLに変換したw:pの結果は得ることができます.

つまり後者から、Microsoft Wordが行うであろう組版/描画をシミュレートして、aの高さを求めたいという事になります.

XSLTプロセッサがJavaなので、これを計算するにはJavaの助けを借りる(なんらかのJavaのモジュールを作って、XSLTスタイルシートから呼び出す)という手段になると思います.

残念ながらこのようなJavaにおける組版/描画の分野は詳しくありません.ヒントや方法、手ほどきとなるような情報などありましたら教えていただければ幸いです.

以上