現在のOffice Server Document Converter(OSDC)(V7.0)はマージされたWord文書に対応していません。ユーザからの要望がありマージされた文書への対応を検討しています。
Word文書内のwordフォルダはいくつかのxml文書で構成されています。
| document.xml |
本文 |
| fontTable.xml |
フォント |
| settings.xml |
セッティング |
| style.xml |
スタイル |
| footer1.xml |
フッタ |
| header1.xml |
ヘッダ |
| footnote.xml |
脚注 |
| endnote.xml |
文末脚注 |
| numbering.xml |
箇条書き設定 |
などです。
OpenXMLSDKでマージした文書にはこのwordフォルダ内にマージされたWord文書がそのまま入っています。
afchunk1.docx
このdocxファイルの参照は本文中にある<w:altChunk>から行います。
<w:altChunk r:id="AltChunkId0"/>
ファイル_rels/document.xml.relsからr:idに対応する文書を得ます。
<Relationship Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/aFChunk" Target="/word/afchunk1.docx" Id="AltChunkId0" />
これで、マージされたWord文書(Target=”/word/afchunk1.docx”)を得ることができます。
このファイルはWord文書そのものです。
<w:altChunk>というエレメントはBlock要素です。
<xsd:group name="EG_BlockLevelElts">
<xsd:choice>
<xsd:group ref="EG_BlockLevelChunkElts" minOccurs="0" maxOccurs="unbounded"/>
<xsd:element name="altChunk" type="CT_AltChunk" minOccurs="0" maxOccurs="unbounded"/>
</xsd:choice>
</xsd:group>
Block要素としては<w:p><w:tbl>などがあります。
これらの要素と同じように処理すればマージした文書になるはずです。
<w:p/><w:p/><w:p/>
<w:altChunk/> ここにマージ文書を挿入する
<w:p/><w:p/><w:p/>
document.xml内は
<w:document>
<w:body>
<w:p/>
<w:p/>
<w:tbl/>
...
<w:p/>
</w:body>
</w:document>
のように並んでいます。
マージするとき、 <w:document><w:body>の処理を行えば、内部は外側の文書と同じBlock要素として処理できます。問題は、あくまで別文書として処理しなければいけない。外側と、内部文書では参照するファイルが異なります。style.xmlなどは独立した設定になるはずです。
OSDCでは <w:altChunk>で指定されたWordファイルから新しいdocumentクラスを作成する。
documentクラスからページ作成を継続する。
documentクラスの処理が終了したら親のdocumentの<w:altChunk>に戻り処理を継続する。
このような実装を行っています。
今後も要望などを検討しよい製品にしていきます。