3

画像が挿入された複数の描画キャンバスと Word 2010 で描画された線と矢印を含む .docx ファイルを使用しています。互換モードのない 2010 形式を使用しています。

Word は各and要素o:gfxdataに属性を挿入し、ASCII でエンコードされたもので埋めます。私が読んだことから、それはまたはを記述した VML のコピーである可能性があります。何を探すべきかわからないだけかどうかはわかりませんが、Word 2003、2007、または 2010 でドキュメントを読み取ったり編集したりする能力には、データを削除しても明らかな影響がないため、このデータが何のためのものかを判断できません。 .v:shapev:groupv:shapev:group

これにより、document.xml が (見かけの) 必要なサイズのほぼ 2 倍に膨れ上がります。これによりOpenTBS の処理がかなり遅くなるため、可能であれば削除したいと考えています。Word 2010 にこの余分なデータの保存をやめる方法を知っている人はいますか? またはそれは何のためですか?この投稿以外のドキュメントを見つけるのに本当に苦労しました。

編集:

サンプルの .docxを次に示します。document.xml は最大 141KB で、OpenTBS はこれをサブテンプレートとして 21 回含むファイルを作成するのに平均 10.35 秒かかります。すべての o:ogfxdata 属性を削除すると、ファイル サイズは ~37KB に減少し、OpenTBS は同じファイルを生成するのに 2.99 秒しかかかりません。

編集2:

さらに調査した結果、o:gfxdata を削除すると、古い Compatibilty Pack がインストールされている Word 2003 が次のエラーでファイルに反対する可能性があるようです。

「これは互換性パックのプレリリース版であり、プレリリース版の Office 2007 ファイルのみを開くことができます。互換性パックの新しいバージョンを確認しますか?」

新しい互換パックをインストールすることでファイルを開くことができましたが、非互換性についてユーザーにプロンプ​​トを表示し、ファイルを開くためにファイルを変換します。これでファイルが破損することはありませんが、注意が必要です。

4

1 に答える 1

1

属性o:ogfxdataはWebで十分に文書化されていません。あなたの調査によると、それはある種の互換性の追加情報です。

OpenTBSを使用して、テンプレート内のこれらの属性を削除できます。クリーニングは、マージせずにテンプレートで1回実行してから、クリーニングしたテンプレートを新しいテンプレートとして保存できます。または、テンプレートを開くたびにクリーニングを実行できます。

DOCXファイルのクリーニング:

while ($x = clsTbsXmlLoc::FindStartTagHavingAtt($TBS->Source, 'o:gfxdata', 0) ) {
  $x->ReplaceAtt('o:gfxdata', '');
  $TBS->Source = str_replace(' o:gfxdata=""', '', $TBS->Source);
}

クラスclsTbsXmlLocはOpenTBSで提供されており、文書化されていないことに注意してください。このコードは、OpenTBS1.8.0以降で機能するはずです。(現在、安定したベータ版です)。

o:gfxdata属性が削除されているため、docxを編集してもすぐには戻らないことに気づきました。

于 2013-01-29T23:46:40.873 に答える