最近项目导出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时添加或勾选复选框的更多相关文章

  1. Java使用freemarker导出word文档

    通过freemarker,以及JAVA,导出word文档. 共分为三步: 第一步:创建模板文件 第二步:通过JAVA创建返回值. 第三步:执行 分别介绍如下: 第一步: 首先创建word文档,按照想要 ...

  2. freemarker导出word带图片

    导出word带图片 如果你需要在word中添加图片,那你就在第一步制作模板时,加入一张图片占位,然后打开xml文档,可以看到如下的一片base64编码后的代码: <w:binData w:nam ...

  3. 使用Freemarker导出Word文档(包含图片)代码实现及总结

    .personSunflowerP { background: rgba(51, 153, 0, 0.66); border-bottom: 1px solid rgba(0, 102, 0, 1); ...

  4. freemarker导出word档

    1.word另存为xml:2.xml文件后缀名改成ftl:3.编写完整json字符串备用:4.修改ftl中动态字段为json中对应字段名:5.编写java代码自动生成word文件:(注意:换行用< ...

  5. freemarker导出word的一些问题

    首先,了解下freemarker导出word的流程: 参考https://www.cnblogs.com/llfy/p/9303208.html 异常一: freemarker.core.ParseE ...

  6. 关于使用freemarker导出word

    java使用FreeMarker导出word 一.      先做一个word模板 二.      将该word文件另存为xml格式(注意是另存为,不是直接改扩展名) 三.     打开xml文件把要 ...

  7. freemarker导出word文档——WordXML格式解析

    前不久,公司一个项目需要实现导出文档的功能,之前是一个同事在做,做了3个星期,终于完成了,但是在项目上线之后却发现导出的文档有问题,此时,这个同事已经离职,我自然成为接班者,要把导出功能实现,但是我看 ...

  8. freemarker导出word文档

    使用freemarker导出word文档的过程 **************************************************************************** ...

  9. Java Freemarker生成word

    Java Freemarker生成word freeMaker 简介: FreeMarker是一款模板引擎: 即一种基于模板和要改变的数据, 并用来生成输出文本(HTML网页.电子邮件.配置文件.源代 ...

随机推荐

  1. HDU 6165 FFF at Valentine

    题目大意:给出一个有向图,问你这个图中是否对于任意两点\(u,v\),都至少满足\(u\to v\)(\(u\)可到达\(v\),下同)或\(v\to u\)中的一个. 一看就是套路的图论题,我们先把 ...

  2. cmake 添加头文件目录,链接动态、静态库(转载)

    来源网址:http://www.cnblogs.com/binbinjx/p/5626916.html 罗列一下cmake常用的命令. CMake支持大写.小写.混合大小写的命令. 1. 添加头文件目 ...

  3. Jlink使用技巧之合并烧写文件

    前言 IAP(In-application-programming),即在应用中编程.当产品发布之后,可以通过网络方便的升级固件程序,而不需要拆机下载程序.IAP系统的固件一般由两部分组成,即Boot ...

  4. Linux中2>&1使用

    转:2>&1使用 一 相关知识 1)默认地,标准的输入为键盘,但是也可以来自文件或管道(pipe |).2)默认地,标准的输出为终端(terminal),但是也可以重定向到文件,管道或后 ...

  5. Apache Spark 2.2中基于成本的优化器(CBO)(转载)

    Apache Spark 2.2最近引入了高级的基于成本的优化器框架用于收集并均衡不同的列数据的统计工作 (例如., 基(cardinality).唯一值的数量.空值.最大最小值.平均/最大长度,等等 ...

  6. Stencil 基础

    Stencil 一个轻量化,渐进式编译器,注意,不是框架. 使用 TypeScript 进行所有操作,这是一个门槛,有一定技术门槛要求. PS:个人强烈推荐所有的前端同学都学习,或至少了解这个超集语言 ...

  7. Redis Cluster日常操作命令梳理

    在之前的一篇文章已经介绍了Redis Cluster及其部署,下面说下Redis Cluster日常操作命令: 一.以下命令是Redis Cluster集群所独有的,执行下面命令需要先登录redis: ...

  8. 团队作业Week14——源代码管理

    0. 在吹牛之前,先回答这个问题: 如果你的团队来了一个新队员,有一台全新的机器, 你们是否有一个文档,只要设置了相应的权限,她就可以根据文档,从头开始搭建环境,并成功地把最新.最稳定版本的软件编译出 ...

  9. 第七周 linux如何装载和启动一个可执行文件

    潘恒 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一.实验内容 1.预处理. ...

  10. 《Linux内核设计》第17章学习笔记