[英]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.