

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

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

[![floatfigの例](https://i.stack.imgur.com/6J5nh.png)](https://i.stack.imgur.com/6J5nh.png)

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

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

[![画像が重なってしまうパターン](https://i.stack.imgur.com/kcVeP.png)](https://i.stack.imgur.com/kcVeP.png)

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

[![空行の入力](https://i.stack.imgur.com/A6Kbx.png)](https://i.stack.imgur.com/A6Kbx.png)

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

持ち得ている材料は

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

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

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

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

以上


CC BY-SA 4.0
2018-05-12T14:48:18.347
43940
2018-05-30T06:22:10.987
9503
question
java xml xslt open-xml
.docxに自動的に空改行を入れる


自己RESです．同僚からのアドバイスで解決しました．

Wordにはテキストの回り込みを抑制する要素がありました．以下のメニューからその「区切り」を入れられます．

[![文字列の折り返し](https://i.stack.imgur.com/2qXl4.png)](https://i.stack.imgur.com/2qXl4.png)

WordprocessingMLを見ると次のような改行の特殊なものが入っていました．

[code]

    <w:r>
      <w:br w:type="textWrapping" w:clear="all"/>
    </w:r>
    
[/code]

XSL-
FOの@clearプロパティと似ています．@clearは回り込みを解くオブジェクトに指定するのに対して、w:brは回り込みを解く段落の直前に入れなければなりません．ここが違うようです．これでなんとか解決しました．


CC BY-SA 4.0
2018-05-30T06:22:10.987
44405
2018-05-30T06:22:10.987
9503
43940
answer