乐于分享
好东西不私藏

Freemarker 生成 Word 报告:转义符与表格中英文间距优化方案

Freemarker 生成 Word 报告:转义符与表格中英文间距优化方案

  1. 转义符处理

Freemarker 导出 Word 存在特殊字符兼容问题:内容含<>&会使文档打不开,需后台预处理转义后再替换占位符。

/**  * freemaker 特殊字符转义  * @param str 传入参数  * @return String 处理后的字符串  */private String transform(String str){   if(str==null){        return null;   }   if(str.contains("<")||str.contains(">")||str.contains("&")){        str=str.replaceAll("&""&amp;");        str=str.replaceAll("<""&lt;");        str=str.replaceAll(">""&gt;");   }   return str;}

2. 中英文间隔大处理

  • 若是纯段落场景,模板定义段落样式时,直接开启「中文版式 – 允许西文在单词中间换行」即可,底层 XML 对应设置自动消除中英文自动加宽间距。
对应核心 XML 段落属性:
<w:pPr>  <!-- 允许西文单词内换行,解决中英文自动拉大间距 -->  <w:wordWrapw:val="on"/></w:pPr>
  • 表格内出现中英文间距过大问题(两种方案)
   1.先在表格外新建空白段落,设置样式开启「允许西文在单词中间换行」,段落形式调整好后将此段落放入到表格中。
   2.在表格单元格内的 <w:p> 段落标签内部,添加段落换行配置 + 拼写校验边界标签
<!-- 表格单元格段落 --><w:pwsp:rsidR="00987C04"wsp:rsidRPr="00485ACB"wsp:rsidRDefault="00987C04">    <!-- 段落属性:开启单词自动换行 -->    <w:pPr>        <w:wordWrapw:val="on"/>    </w:pPr>    <!-- 拼写标记开始,分割中英文字符渲染边界,消除多余间距 -->    <w:proofErrw:type="spellStart"/>    <w:rwsp:rsidRPr="00485ACB">        <w:rPr>            <wx:fontwx:val="宋体"/>        </w:rPr>        <w:t>${test}</w:t>    </w:r>    <w:proofErrw:type="spellEnd"/>    <!-- 拼写标记结束,分割中英文字符渲染边界,消除多余间距 --></w:p>