加载模板很慢,因为要进行内部清理工作

编程语言 2026-07-11

我有一个docx文档,大约85页,大小约1.6 MB。用 $TBS->LoadTemplate() 加载它需要超过80秒,原因在于调用内部方法 MsWord_Clean()。根据文档,这样做是“用于清理或准备某些子文件”,提出的变通方法是调用 $TBS->Plugin(OPENTBS_MAKE_OPTIMIZED_TEMPLATE, $template, $new_template);,随后使用 $new_template

我想知道这项优化到底是关于什么的?为什么需要?如果把 $TBS->OtbsClearMsWord 设置为 false 将其关闭,得到的文档仍然看起来没问题,模板加载也快得多。

解决方案

清理工作是关于替换或删除所有可能扭曲TBS标签的XML元素或特殊字符(因此OpenTBS找不到该标签)或在合并过程中可能引发错误的内容。

默认情况下,在加载模板时,OpenTBS会执行这项清理。
如果此前已经在模板上完成过该清理,那么下次就不需要再做,模板加载会更快。这就是这项优化的要点。

对于DOCX,有很多需要处理的地方。
例如,当你在文档中修改TBS标签时,MS Word可能在后台悄悄地拆分该TBS标签,以便放置历史编辑信息,这些信息在你验证用户修改时会用到。
同样,拼写和语法信息也可能拆分TBS标签。
此外,MS Word还可能在后台无声地复制文档中的某些项,以生成与旧版本Word兼容的等效替代结构。这在合并TBS块时可能产生无效的XML。

对于DOCX,需要进行的清理清单如下:

  • 将撇号替换为单引号。
  • 如果 $TBS->OtbsSpacePreserve 被设为 true(默认值):

  • 删除在不需要时用于保留空格的XML标签。

  • 如果 $TBS->OtbsClearMsWord 被设为 true(默认值):

  • 删除隐藏书签的XML标签。

  • 删除最后渲染的分页符的XML标签。
  • 删除用于语法和拼写的XML标签。
  • 删除重复的替代布局的XML标签。
  • 删除用于用户历史修改的XML标签。

也有可能根本不需要进行上述清理,这取决于具体情况。

站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章