Docx文档如何实现的自动编号?
📃 不得不佩服优秀软件的规范
上次讲到使用Freemarker生成word文档,这种方案对不常变更的需求是非常不错的。但是,哪有产品需求不变更的?
今天就遇到了一个坑,标题的编号问题。
虽然我们可以动态替换文本,但是要是想借用docx自己的文档规范生成,岂不是一劳永逸?
序号定义
像往常一样,我们把一个docx文档解压,可以得到目录结构,而序号的定义就存在numbering.xml
中,包括从几开始、序号的样式:
有两种类型,abstractNum
和num
,其中每个numId
对应一个abstractNumId
,每个abstractNumId
对应一组格式,举例如下:
1 | <!-- abstractNum --> |
序号使用
主文档document.xml
引用序号格式如下:
1 | <w:numPr> |
每个numId对应一个abstractNumId,自动编号用两次就会自上而下生成“一、…… 二、……”。此时,这两段标题的numId是一样的。不需要自动编号的段落的numId为0,且没有对应的abstractNumId。
总结
带编号的段落在document.xml生成一个numId和ilvl,每个numId对应一个abstractNumId,每个abstractNumId有一组格式序列,每个ilvl对应改组格式序列的一种格式。每个格式有start确定起始编号,numFmt确定格式类型,lvlText确定格式样式。通过numFmt和lvlText的组合确定自动编号的最终的样式
关注获取更多资源
评论