[英]Prevent Word 2010 from saving o:gfxdata base64 or uuencoded VML?
我正在使用.docx文件,其中包含插入圖像的幾個繪圖畫布以及Word 2010中繪制的一些線條和箭頭。我使用的是2010格式,沒有兼容模式。
Word將o:gfxdata
屬性插入到每個v:shape
和v:group
元素中,並使用ascii編碼的東西填充它。 根據我的閱讀,它可能是描述v:shape
或v: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.