繁体   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