Server Based Converter V6.0 では Microsoft Word(.docx) 用読み込みエンジンの改定を行いました。
文書の処理部分を1から作成しなおしました。
以前の読み込みは、リッチテキストコンバータから続くOffice 文書処理技術の蓄積で作成されていました。 最初は doc(OLE) ファイルの処理から始まったプログラムは年月を重ね、プログラム、データ構造などが肥大化し新しい機能への対応も難しくなっていました。
最新の Word ファイル(.docx) の中身は XML ファイルです。
XML 文書処理においては AH Formatter という技術もあり、古い doc 形式のデータ構造から見直し、作り直すこととなりました。
Word の OOXML (Office Open XML) は文書であり、本文 (document.xml) は文字列の並びに Property が付いているだけです。文書ですから先頭からシーケンシャルに処理することが可能になります。
新しいエンジンではシーケンシャルに文書のタグをハンドリングし、処理が終わればデータのメモリは順次開放していきます。このあたりのデータ構造も新しく作り直し、使用メモリ量も抑えることができました。少ないメモリで動作するということは、大きな文書の処理でもスピードが遅くなることが少なくなります。
ページ処理は AH Formatter の Area という構造を使います(以前も使ってはいた)。文書では のパラグラフごとに BlockArea を作成し、Word の段落属性を attribute として設定します。BlockArea 内には LineArea を作成し、親の BlockArea の情報で TextArea を並べ行を作成していきます。
この Area 構造は AH Formatter と同じで、行などエリアの分割なども AH Formatter の組版エンジンプログラムを呼び出し処理します。
また、文字列以外のシェープなどの処理は、今まである Excel,PowerPoint と共通化して同じ処理を行っています。このように新しいエンジンを1から作成したといっても、AH Formatter などの既存のプログラムを使っており、安定感のあるプログラムになっています。
再現性が向上したとの評価もうけています。
興味のあるかた、以前のバージョンをお使いのかたは 評価版 をお試しください。
プログラマの疑問
Word の用紙設定 はなぜ最後にあるのだろう。
用紙設定を取得するために1度最後まで解析する必要がある。
途中にもあるので読み飛ばすわけにはいかない。
30年以上前に日本語ワープロを開発していたプログラマの疑問
[1] AH Formatter