java freemarker导出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 freemarker导出word时添加或勾选复选框的更多相关文章
- Java使用freemarker导出word文档
通过freemarker,以及JAVA,导出word文档. 共分为三步: 第一步:创建模板文件 第二步:通过JAVA创建返回值. 第三步:执行 分别介绍如下: 第一步: 首先创建word文档,按照想要 ...
- freemarker导出word带图片
导出word带图片 如果你需要在word中添加图片,那你就在第一步制作模板时,加入一张图片占位,然后打开xml文档,可以看到如下的一片base64编码后的代码: <w:binData w:nam ...
- 使用Freemarker导出Word文档(包含图片)代码实现及总结
.personSunflowerP { background: rgba(51, 153, 0, 0.66); border-bottom: 1px solid rgba(0, 102, 0, 1); ...
- freemarker导出word档
1.word另存为xml:2.xml文件后缀名改成ftl:3.编写完整json字符串备用:4.修改ftl中动态字段为json中对应字段名:5.编写java代码自动生成word文件:(注意:换行用< ...
- freemarker导出word的一些问题
首先,了解下freemarker导出word的流程: 参考https://www.cnblogs.com/llfy/p/9303208.html 异常一: freemarker.core.ParseE ...
- 关于使用freemarker导出word
java使用FreeMarker导出word 一. 先做一个word模板 二. 将该word文件另存为xml格式(注意是另存为,不是直接改扩展名) 三. 打开xml文件把要 ...
- freemarker导出word文档——WordXML格式解析
前不久,公司一个项目需要实现导出文档的功能,之前是一个同事在做,做了3个星期,终于完成了,但是在项目上线之后却发现导出的文档有问题,此时,这个同事已经离职,我自然成为接班者,要把导出功能实现,但是我看 ...
- freemarker导出word文档
使用freemarker导出word文档的过程 **************************************************************************** ...
- Java Freemarker生成word
Java Freemarker生成word freeMaker 简介: FreeMarker是一款模板引擎: 即一种基于模板和要改变的数据, 并用来生成输出文本(HTML网页.电子邮件.配置文件.源代 ...
随机推荐
- 【LGR-048 五周年庆贺】洛谷6月月赛
Luogu的五周年庆典比赛,还是比较满意的. 题目清新不毒瘤,数据优质不卡常,解法自然,为出题人点赞. 前三题的难度都很低,T5个人感觉还好.但是最后那个splay+hash是什么神仙东西. 最后好像 ...
- 系统引导修复,grub2下的各种骚作
新买的xps装了一个rhel7.5,各种恶心... 第一次:升级内核之后居然引导不了! 进入bios setup,把bios 引导的文件选择为 grub64.eif,成功进入系统 第二次:升级grub ...
- springboot 发送邮件+模板+附件
package com.example.demo; import org.junit.Test;import org.junit.runner.RunWith;import org.springfra ...
- vue 过滤器基本使用
Vue.js 允许你自定义过滤器,可被用于一些常见的文本格式化,例如时间戳格式化. 过滤器可以用在: 双花括号插值 v-bind 表达式 (2.1.0+ 开始支持). 过滤器应该被添加在 JavaSc ...
- 关于Prometheus运维实践项目
关于Promethues运维实践项目 1. 什么是Prometheus运维实践项目 是什么 Prometheus,普罗米修斯,是古希腊神话中为人间带来火种的神. Prometheus运维实 ...
- linux-安装-源码安装
编译安装 tengine
- swap函数
#include<iostream> using namespace std; void swap(int& a,int& b){ int t=a; a=b; b=t; } ...
- CF 1047 C. Enlarge GCD
传送门 [http://codeforces.com/contest/1047/problem/C] 题意 给你n个数,移除最少的数字使剩下的数字GCD大于初始GCD 思路 需要一点暴力的技巧,先求出 ...
- VIM编辑器常用命令(转)
转自:https://www.cnblogs.com/Nice-Boy/p/6124177.html
- Fake NP CodeForces - 805A (思维)
Tavak and Seyyed are good friends. Seyyed is very funny and he told Tavak to solve the following pro ...