質問: Microsoft Word の docx 形式ファイルにおいて、指定したテキスト要素が何ページに表示されるのか、取得したいと考えています。 Apache POI または XML を直接操作した場合どうやって取得したらよいでしょうか。 そもそも不可能なのでしょうか。
回答: document.xmlのページサイズ(w:pgSz)の高さからマージン(w:pgMar)のtop/bottom/header/footerを引いたものを変数で用意して、各パラグラフ(w:p)をドキュメントグリッド(w:docGrid)のlinePitchで乗算し、最初に用意した変数を超えたら改ページとするくらいしか浮かびませんね・・・。 例外として、各パラグラフの中にw:lastRenderedPageBreakもしくはw:brのw:type=pageがあればその場で改ページという条件が必要ですけれど。 ECMA-376でもページに関する記載は無いため、自力で上記のようにコンテンツ描画をエミュレートするしかなさそうです。 ただ注意してほしいのは、MS Officeは完全にECMA-376準拠というわけではないので、あらゆる例外が発生すると頭の片隅に残しておいてください。(私はExcelで泣きました・・・)