自动更新TOC

时间:2014-03-13 17:38:45

标签: asp.net automation ms-word openxml

我在asp.net网站上使用OpenXML从模板创建Word文档,并通过altChunk从其他模板向模板添加其他部分以及添加HTML片段(同样为{{ 1}})和图像。除了我的模板有一个目录(TOC)并用正确的页码和正确的标题(对于添加的部分)更新它,一切都工作正常,最终用户必须选择TOC并更新它(通过点击F9,或点击上下文菜单中的更新字段)。即便如此,他们仍然需要在更新页码或更新整个表格之间做出选择(让最终用户感到困惑)。

我真的很想避免这一步,因为我希望文档准备就绪,看起来不像是在后端自动生成了。

我尝试在文档设置中添加altChunk,但这只会在打开文档时导致混淆(到最终用户)唠叨屏幕。

我想过可能尝试通过估算我添加的每个部分的长度(以页为单位)来手动更新OpenXML中的TOC(它们应该是相当恒定的+/-一页),以便在给出至少相当准确的TOC时用户首先打开文档,但这似乎不太健壮。

Word自动化可能会解决此问题,但不建议用于服务器端。

有没有更好的解决方案呢?在没有任何投诉的情况下,我可以任意插入其他文档和HTML的块,这似乎很愚蠢,但更新TOC是一个主要的安全问题!

1 个答案:

答案 0 :(得分:1)

正如您无疑发现的那样,自动更新TOC的这个问题是一个常见的抱怨。

在Java世界中,docx4j企业(即商业版)可以通过生成独立于Word的整个TOC来解决它[披露:我的公司]。

顺便说一下,docx4j社区版也可以将XHTML altChunk转换为原生/原始WordML,这是让TOC正确的重要的第一步。您可以在.NET环境中使用它;见http://www.nuget.org/packages/docx4j-ImportXHTML.NET/3.0.1

左场解决方案可能是调用LibreOffice(例如通过JODConverter);它会在没有提示的情况下自动更新TOC。