現在の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>に戻り処理を継続する。
このような実装を行っています。
今後も要望などを検討しよい製品にしていきます。