我正在使用.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退出保存这些额外数据的方法?或者它是为了什么?我真的很难找到this post以外的任何文档。
修改
这是sample .docx。 document.xml大约为141KB,OpenTBS平均需要10.35秒才能创建一个包含21次子模板的文件。如果删除所有o:ogfxdata属性,文件大小将减少到~37KB,而OpenTBS只需2.99秒即可生成相同的文件。
编辑2:
经过进一步调查后,似乎删除了o:gfxdata可能会导致安装了较旧的Compatibilty Pack的Word 2003反对该文件,并出现以下错误:
“这是兼容包的预发行版本,可以打开 仅预发布Office 2007文件。你想检查一下吗? 兼容包的版本?“
我已经能够通过安装更新的兼容包来打开文件 - 虽然它会提示用户有关不兼容性并转换文件以便打开它。这不会损坏我的文件,但需要注意的事项。
答案 0 :(得分:1)
在网络中记录的属性o:ogfxdata
很少。
根据您的调查,这是一种兼容性附加信息。
您可以使用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一起提供,并且未记录。
代码应该从OpenTBS 1.8.0开始工作。 (目前处于稳定的测试版)。
我注意到,由于删除了属性o:gfxdata
,因此在编辑docx时它们不会立即返回。