簡體   English   中英

阻止Word 2010保存o:gfxdata base64或uuencoded VML?

[英]Prevent Word 2010 from saving o:gfxdata base64 or uuencoded VML?

我正在使用.docx文件,其中包含插入圖像的幾個繪圖畫布以及Word 2010中繪制的一些線條和箭頭。我使用的是2010格式,沒有兼容模式。

Word將o:gfxdata屬性插入到每個v:shapev:group元素中,並使用ascii編碼的東西填充它。 根據我的閱讀,它可能是描述v:shapev:group的VML的副本。 我不知道我是否只是不知道該尋找什么,但我無法確定這些數據是什么,因為它的刪除對我在Word 2003,2007或2010中閱讀或編輯文檔的能力沒有明顯影響。

它會使document.xml膨脹到幾乎兩倍(明顯的)必要大小。 大大減慢了OpenTBS的處理速度,所以如果可能的話我想刪除它。 有誰知道告訴Word 2010退出保存這些額外數據的方法? 或者它是為了什么? 除了這篇文章,我真的很難找到任何關於它的文檔。

編輯:

這是一個示例.docx document.xml大約為141KB,OpenTBS平均需要10.35秒才能創建一個包含21次子模板的文件。 如果刪除所有o:ogfxdata屬性,文件大小將減少到~37KB,而OpenTBS只需2.99秒即可生成相同的文件。

編輯2:

進一步調查后,似乎刪除o:gfxdata可能會導致Word 2003安裝較舊的Compatibilty Pack,以反對該文件,並出現以下錯誤:

“這是兼容包的預發行版本,只能打開預發布的Office 2007文件。是否要檢查兼容包的更新版本?”

我已經能夠通過安裝更新​​的兼容包來打開文件 - 雖然它會提示用戶有關不兼容性並轉換文件以便打開它。 這不會損壞我的文件,但需要注意的事項。

屬性o:ogfxdata在Web中記錄不足。 根據您的調查,這是一種兼容性附加信息。

您可以使用OpenTBS刪除模板中的這些屬性。 清理可以在模板上完成一次而不進行任何合並,然后將清理后的模板另存為新模板。 或者,您可以在每次打開模板時執行清潔。

清理DOCX文件:

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

請注意,類clsTbsXmlLoc隨OpenTBS clsTbsXmlLoc提供,並且未記錄。 代碼應該從OpenTBS 1.8.0開始工作。 (目前處於穩定的測試版)。

我注意到,由於屬性o:gfxdata被刪除,因此在編輯docx時它們不會立即返回。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM