我正在处理包含多个绘图画布的 .docx 文件,其中插入了图像以及在 Word 2010 中绘制的一些线条和箭头。我使用的是没有兼容模式的 2010 格式。
Word 插入一个o:gfxdata
属性到每个v:shape
and v:group
元素并用 ascii 编码的东西填充它。根据我的阅读,它可能是描述以下内容的 VML 的副本v:shape
or v:group
。我不知道我是否只是不知道要查找什么,但我无法确定这些数据的用途,因为删除这些数据对我在 Word 2003、2007 或 2010 中阅读或编辑文档的能力没有明显影响。
它确实将 document.xml 膨胀到几乎是(表面上)所需大小的两倍。这相当会减慢 OpenTBS 的处理速度,因此如果可能的话,我想将其删除。有谁知道如何告诉 Word 2010 停止保存这些额外数据?或者说它是做什么用的?我真的很难找到任何关于它的文档这个帖子 http://answers.microsoft.com/en-us/office/forum/office_2010-word/word-2010-file-bloat/80f77059-10fa-4cb7-8bd2-ffd67e260761.
Edit:
这里有一个示例.docx http://www.sarahkempdesigns.com/now/wp-content/uploads/2013/01/ogee_washer_example.docx。 document.xml 约为 141KB,OpenTBS 平均需要 10.35 秒来创建一个包含该文件作为子模板 21 次的文件。如果我删除所有 o:ogfxdata 属性,文件大小将减少到约 37KB,并且 OpenTBS 只需 2.99 秒即可生成相同的文件。
Edit 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 时它们不会立即返回。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)