Freemarker 生成 Word 报告:转义符与表格中英文间距优化方案
-
转义符处理
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("&", "&");str=str.replaceAll("<", "<");str=str.replaceAll(">", ">");}return str;}
2. 中英文间隔大处理
-
若是纯段落场景,模板定义段落样式时,直接开启「中文版式 – 允许西文在单词中间换行」即可,底层 XML 对应设置自动消除中英文自动加宽间距。
<w:pPr><!-- 允许西文单词内换行,解决中英文自动拉大间距 --><w:wordWrapw:val="on"/></w:pPr>
-
表格内出现中英文间距过大问题(两种方案)
<!-- 表格单元格段落 --><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>
夜雨聆风