3

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

Wordo:gfxdata在每个元素中插入一个属性v:shapev:group并用 ascii 编码的东西填充它。从我读过的内容来看,它可能是描述v:shapeor的 VML 的副本v:group。我不知道我是否只是不知道要查找什么,但我无法确定这些数据的用途,因为删除它对我在 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 反对该文件并出现以下错误:

“这是兼容包的预发布版本,只能打开预发布的 Office 2007 文件。您要检查兼容包的更新版本吗?”

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

4

1 回答 1

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

于 2013-01-29T23:46:40.873 回答