一、背景
有一个需求,要生成好几段文本,要求不管有没有内容,下划线必须铺满所有有文字的段落且全部对齐。
二、需求拆解
从Word设置里找线索,Word需要修改以下2个设置:
- 要铺满下划线,后面的空格就不能是库默认段尾空格自动隐藏下划线了,需在Word文档整体设置:选项---高级---以下对象的布局选项---勾选“为尾部空格添加下划线”
- 要段落对齐,就要防止标点溢出。在段落设置:段落---中文版式---取消勾选“允许标点溢出边界”
三、拆解Word-XML文件
(一)为尾部空格添加下划线
- 新建2个空文档,一个设置“允许标点溢出边界”,另一个不设置。
将文件拓展名改成zip,解包后,对比
word\settings.xml
文件可知,在<w:compat>
标签添加下面添加<w:ulTrailSpace />
即可实现该功能:<w:compat> <w:ulTrailSpace /> </w:compat>
(二)取消勾选“允许标点溢出边界”
通过(一)中类似方法,在 word\document.xml
文件中,段落格式标签 <w:pPr>
下面,添加 <w:overflowPunct w:val="0" />
即可,具体结构如下:
<w:body>
<w:p>
<w:pPr>
<w:overflowPunct w:val="0" />
</w:pPr>
</w:p>
</w:body>
注意:每个段落都需要设置段落格式。
四、修改officegen库文件实现功能(其他框架也可参照)
此处使用的库文件版本为 officegen: v0.6.5
(一)为尾部空格添加下划线
从生成库里找关键词 w:compat
,搜到在 node_modules\officegen\lib\docx\gendocx.js
103行左右,有设置 settings.xml
的文本,正好和上述内容对应。于是将原来的
<w:compat/>
修改为
<w:compat><w:ulTrailSpace /></w:compat>
该问题解决。其他的全局配置设置,也能通过类似的方式,通过查找属性名称来进行设置。
(二)取消勾选“允许标点溢出边界”
同样通过搜索,在 node_modules\officegen\lib\docx\gendocx.js
375行左右,此处的代码是判断段落是否存在属性配置,存在则添加相应的XML文件,我这里偷懒,直接在if语句外面,添加代码,整体结构如下:
if (objs_list[i].options.rtl) {
pPrData += '<w:bidi w:val="1"/>'
} // Endif.
pPrData += '<w:overflowPunct w:val="0" />'; // 添加的只有这一句,上面下面都是原来的代码
if (objs_list[i].options.textAlignment) {
pPrData +=
'<w:textAlignment w:val="' +
objs_list[i].options.textAlignment +
'"/>'
} // Endif.
其实按照框架的做法,应该是在段落options属性中设置一个是否允许的属性,然后这边也参照库的代码,根据是否存在属性设置相应的 w:val
的值,w:val="1"
则为允许标点溢出边界,0为不允许。我这里是偷懒了,因为每个段落都要设置“不允许溢出”。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。