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



我正在使用.docx文件,其中包含多个绘图画布,其中插入了图像,并在Word 2010中绘制了一些线条和箭头。我使用的是没有兼容模式的 2010 格式。

Word 将o:gfxdata属性插入到每个v:shapev:group元素中,并用 ascii 编码的内容填充它。从我所读到的内容来看,它可能是描述v:shapev:group的 VML 的副本。我不知道我是否只是不知道要查找什么,但我无法确定此数据的用途,因为它的删除对我在 Word 2003、2007 或 2010 中阅读或编辑文档的能力没有明显影响。

它确实使文档膨胀.xml几乎是(明显)必要大小的两倍。这大大减慢了OpenTBS的处理速度,所以如果可能的话,我想删除它。有谁知道告诉Word 2010停止保存这些额外数据的方法?或者它是干什么用的?除了这篇文章之外,我真的很难找到任何关于它的文档。

编辑:

下面是一个示例.docx。文档.xml为 ~141KB,OpenTBS 平均需要 10.35 秒才能创建一个包含此子模板的文件 21 次。如果我删除所有 o:ogfxdata 属性,文件大小将减小到 ~37KB,OpenTBS 只需 2.99 秒即可生成相同的文件。

编辑 2:

经过进一步调查,似乎删除 o:gfxdata 可能会导致安装了较旧兼容包的 Word 2003 反对该文件,并显示以下错误:

"这是兼容包的预发布版本,可以打开 仅限预发布 Office 2007 文件。是否要检查较新的 兼容包的版本?

我已经能够通过安装较新的兼容包来打开该文件 - 尽管它会提示用户不兼容并转换文件以打开它。这不会损坏我的文件,但需要注意。

属性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 时,它们不会立即返回。

最新更新