我的方案可能不是最好的,却是我经过尝试觉得可用的方案,分享给大家。代码比较拙劣,希望大家指正。刚好在项目中有这个需求,因此我在网上也查了很多blog,大家的处理办法不外乎下边两个,我也是尝试过的,但都不尽如人意:
(下边两个是网上搜索出来的结果,我不推荐使用)
- 不要在word中直接输入参数,通过在文本中写好复制粘贴过来。
经过实践证明某些字段确实可以,但是像我上面的模板中month_fd和month_ld这种还是被分隔到多个runs中,还有其它情况也会被分隔。 - 将word另存为xml文件,在编辑器中将变量写进去,然后存为docx。
这种方式最终结果是可以实现的。但是在xml中找非常费神且容易改错,另外如果文档过大,基本上编辑器就被卡死了。
经过上面的实践浪费了我很多时间,而且并解决不了问题,所以我就尝试自己想办法处理。
方法其实也是非常简单,既然变量被分隔了,那么就可以通过代码合并,将分隔的内容合并回来,然后重新把变量设置进去
。
“[”和“]”可能在文档中是普通文本,替换为非常特殊的字符就可以了,目前在项目中使用还没有出现任何问题:
public XWPFDocument generateDoc(String path,Map param){
//创建文档对象