一、背景

有一个需求,要生成好几段文本,要求不管有没有内容,下划线必须铺满所有有文字的段落且全部对齐。

二、需求拆解

从Word设置里找线索,Word需要修改以下2个设置:

  1. 要铺满下划线,后面的空格就不能是库默认段尾空格自动隐藏下划线了,需在Word文档整体设置:选项---高级---以下对象的布局选项---勾选“为尾部空格添加下划线”
  2. 要段落对齐,就要防止标点溢出。在段落设置:段落---中文版式---取消勾选“允许标点溢出边界”

三、拆解Word-XML文件

(一)为尾部空格添加下划线

  1. 新建2个空文档,一个设置“允许标点溢出边界”,另一个不设置。
  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为不允许。我这里是偷懒了,因为每个段落都要设置“不允许溢出”。


热心的小熊猫
1 声望0 粉丝