javafreemarker导出word时添加或勾选复选框
最近项⽬导出word碰到⼀个需求,要求根据数据动态的决定word⾥的复选框是否勾选,
公司导出word⽤的是freemarker,相⽐较其他技术,freemarker可以很容易的控制输出样式,
在word⾥编辑好模板,将要输出的数据⽤${变量名}代替,然后java代码⾥给变量塞了值就可以输出了.
⾸先我们要知道在word⾥打钩和不打勾的复选框究竟是什么,新建⼀个word⽂档,在⾥⾯分别输⼊打钩和不打勾的复选框,然后右键另存为.xml ⽂件,
因为freemarker导出就是在这样的xml⽂件的基础上的
之所以在后⾯加了两个字,是为了之后能在n多的xml节点中到两种框的表现是什么
这个时候我们查看xml⽂件只有⼏⾏,有⼀⾏还特别长,是很⾮⼈类的,我们可以把它拷贝到eclipse等第三⽅⼯具中,然后格式化⼀下,看到的就是格式化都的xml,我们搜索⼀下清算两个字,然后可以清晰的看到在xml中两种框的表现如下:
这个时候要实现功能就要⽤到freemarker中的if else标签了,⾸先我们在java代码中添加变量值,⽐如map.put("check","true");
然后修改模板,使⽤标签判断,模板修改成类似这样:
其实输出的勾选复选框主要的核⼼就是<w:sym w:font="Wingdings 2" w:char="F052" />这句话,把之前的<w:r>标签去掉也⾏,最简单的写法可以直接这样:
<#if check=="true">
<w:sym w:font="Wingdings 2" w:char="F052" />
<#else>
<w:t>□</w:t>
</#if>
但是这样的输出时有问题,会发现⼤⼩不是你想要的,很容易理解,因为没有了那么多节点的样式控制,输出的⾃然按word默认表现来了
所以实际使⽤还是在⾃⼰模板中设置两个框,然后存成xml⽂件看两个框的表现,这样最后输出的框⼤⼩表现和你的word⽂档字体⼤⼩等是⼀样的.
最后将xml⽂件后缀名修改成.ftl,就可以导出了,随着代码中check变量的值不同,会导出不同的选择框,效果如下:
其实freemarker⾥除了if标签,还有很多其他的标签,灵活使⽤这些标签可以很⽅便的完成我们的需求,感觉有点类似jsp,可以让我们灵活输出结果java xml是什么

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。