【问题标题】:Prevent Word 2010 from saving o:gfxdata base64 or uuencoded VML?防止 Word 2010 保存 o:gfxdata base64 或 uuencoded VML?
【发布时间】:2013-01-12 10:51:11
【问题描述】:

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

Word 在每个 v:shape 和 v:group 元素中插入一个 o:gfxdata 属性,并用 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 可能会导致安装了旧兼容包的 Word 2003 反对该文件并出现以下错误:

"这是兼容包的预发布版本,可以打开 仅预发布 Office 2007 文件。你想检查一个更新的 兼容包的版本?”

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

【问题讨论】:

  • 你能提供一个docx作为例子吗?
  • 我已经编辑了帖子以包含示例文件和一些基准。感谢您阅读。

标签: ms-word vml wordprocessingml opentbs drawingml


【解决方案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 时它们不会立即返回。

【讨论】:

  • 您没有错认为缺少此属性的文档 - 我确实很难找到任何东西。我相信在 Word 2010 中对旧文档运行“文件 > 信息 > 转换”时会引入 o:gfxdata 属性。无论如何,这个解决方案在我的快速测试中效果很好,我相信它对我来说效果很好,尤其是如果你能回答我要问的关于 getpart 的另一个问题。
猜你喜欢
  • 2013-06-02
  • 2013-05-13
  • 1970-01-01
  • 2011-11-11
  • 2018-02-09
  • 1970-01-01
  • 2015-10-05
  • 1970-01-01
  • 2013-01-04
相关资源
最近更新 更多