关于使用freemarker导出word
java使用FreeMarker导出word
一、 先做一个word模板
二、 将该word文件另存为xml格式(注意是另存为,不是直接改扩展名)
三、 打开xml文件把要导出的文字都加上${xxx} 例如:${bianhao}
导出表格要在目标行(例如:bianhao这一行)的<w:tr></w:tr>标签包一个<#list xxx as xxx></#list> 例如:<#list userlist as userlist >标签,把要导出的文字都加上${ userlist . xxx} 例如:${ userlist . bianhao },保存后把xml文件后缀名改成 .ftl
四、 将文件保存到指定的文件夹下,在pom文件中导入FreeMarker.jar
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.20</version>
</dependency>
五、 Java代码如下(这里是一个测试方法)
import freemarker.template.Configuration;
import freemarker.template.TemplateException; import java.io.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map; public class WordTest {
private Configuration configuration = null; public WordTest(){
configuration = new Configuration();
configuration.setDefaultEncoding("UTF-8");
} public static void main(String[] args) {
WordTest test = new WordTest();
test.createWord();
} public void createWord(){
Map<String,Object> dataMap=new HashMap<String,Object>();
getData(dataMap);
//模板文件所在路径
// configuration.setClassForTemplateLoading(this.getClass(), "");
try {
configuration.setDirectoryForTemplateLoading(new File("D:\\IdeaProjects\\SpringMVC\\src\\word"));
} catch (IOException e) {
e.printStackTrace();
}
freemarker.template.Template t=null;
try {
//获取模板文件
t = configuration.getTemplate("test.ftl");
} catch (IOException e) {
e.printStackTrace();
}
//导出文件
File outFile = new File("D:/outFile"+Math.random()*10000+".doc");
Writer out = null;
try {
out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile)));
} catch (FileNotFoundException e1) {
e1.printStackTrace();
} try {
//将填充数据填入模板文件并输出到目标文件
t.process(dataMap, out);
} catch (TemplateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
} private void getData(Map<String, Object> dataMap) {
dataMap.put("a", "/");
dataMap.put("b", "名称");
dataMap.put("c", "性别");
dataMap.put("d", "电话");
dataMap.put("e", "邮箱");
dataMap.put("f", "职位");
dataMap.put("A", "/");
dataMap.put("B", "名称");
dataMap.put("C", "经理");
dataMap.put("D", "电话");
dataMap.put("E", "邮箱"); List<Map<String,Object>> userlist = new ArrayList<Map<String,Object>>();
for (int i = 0; i < 50; i++) {
Map<String,Object> map = new HashMap<String,Object>();
map.put("bianhao", i);
map.put("name", "刘慧文"+i);
map.put("sex", "男"+i);
map.put("phone", "15122693135"+i);
map.put("email", "1305156911@qq.com"+i);
map.put("zhiwei", "开发工程师"+i);
userlist.add(map);
}
List<Map<String,Object>> deptlist = new ArrayList<Map<String,Object>>();
for (int i = 0; i < 50; i++) {
Map<String,Object> map = new HashMap<String,Object>();
map.put("BIANHAO", i);
map.put("NAME", "刘慧文"+i);
map.put("JINGLI", "张经理"+i);
map.put("PHONE", "15122693135"+i);
map.put("EMAIL", "1305156911@qq.com"+i);
deptlist.add(map);
} dataMap.put("userlist", userlist);
dataMap.put("deptlist", deptlist);
}
}
六、 导出效果
关于使用freemarker导出word的更多相关文章
- freemarker导出word带图片
导出word带图片 如果你需要在word中添加图片,那你就在第一步制作模板时,加入一张图片占位,然后打开xml文档,可以看到如下的一片base64编码后的代码: <w:binData w:nam ...
- freemarker导出word文档——WordXML格式解析
前不久,公司一个项目需要实现导出文档的功能,之前是一个同事在做,做了3个星期,终于完成了,但是在项目上线之后却发现导出的文档有问题,此时,这个同事已经离职,我自然成为接班者,要把导出功能实现,但是我看 ...
- freemarker导出word文档
使用freemarker导出word文档的过程 **************************************************************************** ...
- 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文档(包含图片)代码实现及总结
.personSunflowerP { background: rgba(51, 153, 0, 0.66); border-bottom: 1px solid rgba(0, 102, 0, 1); ...
- java freemarker导出word时添加或勾选复选框
最近项目导出word碰到一个需求,要求根据数据动态的决定word里的复选框是否勾选, 公司导出word用的是freemarker,相比较其他技术,freemarker可以很容易的控制输出样式, 在wo ...
- Java用freemarker导出word
概述 最近一个项目要导出word文档,折腾老半天,发现还是用freemarker的模板来搞比较方便省事,现总结一下关键步骤,供大家参考,这里是一个简单的试卷生成例子. 详细 代码下载:http://w ...
- spring boot freemarker 导出word 带echarts图形报表
创建word文件内容如下 将word导出为xml格式 将文件后缀名改为 .ftl 在springboot项目中添加freemarker依赖 <!-- 导出word文档--> <dep ...
随机推荐
- [Usaco2018 Open]Talent Show
Description FarmerJohn要带着他的N头奶牛,方便起见编号为1-N,到农业展览会上去,参加每年的达牛秀!他的第i头奶牛重量为wi,才艺水平为ti,两者都是整数.在到达时,Farmer ...
- .net中RSA加密解密
1.产生密钥: private static void CreateKey() { using (RSACryptoServiceProvider rsa = new RSACryptoService ...
- DataGridView 动态绑定 CheckBox
下面演示如何在 DataGridView 中动态绑定 CheckBox: public class Test { /// <summary> /// 构造器 /// </summar ...
- 《从Paxos到ZooKeeper 分布式一致性原理与实践》阅读【Leader选举】
从3.4.0版本开始,zookeeper废弃了0.1.2这3种Leader选举算法,只保留了TCP版本的FastLeaderElection选举算法. 当ZooKeeper集群中的一台服务器出现以下两 ...
- 专题七:UDP编程补充——UDP广播程序的实现
一.程序实现 UDP广播程序的实现代码: using System; using System.Net; using System.Net.Sockets; using System.Text; us ...
- IFormattable,ICustomFormatter, IFormatProvider接口
定 义 1.IFormattable 提供一种功能,用以将对象的值格式化为字符串表示形式. 2.IFormatProvider 提供用于检索控制格式化的对象的机制 ...
- python自动化--接口请求及封装
基于http协议,最常用的是GET和POST两种方法. 接口文档需要包含哪些信息: 接口名称接口功能接口地址支持格式 json/xml请求方式请求示例请求参数(是否必填.数据类型.传递参数格式)返回参 ...
- 介绍Git的17条基本用法
本文将介绍Git的17条基本用法.本文选自<Python全栈开发实践入门>. 1.初始化Git仓库 Git仓库分为两种类型:一种是存放在服务器上面的裸仓库,里面没有保存文件,只是存放.gi ...
- 伪装IP进行投票
伪装IP投票说明 1,目的 在访问网页链接进行投票时,网站往往对同一个IP的投票次数进行了限制,无法连续重复投票.为此可以使用“火狐浏览器+IP修改插件”,通过人为设置浏览器IP,绕过网站IP检查,可 ...
- MFC_1.2 消息映射宏 数据绑定和交换
消息映射宏 有三个主要的宏 类内声明 DECLARE_MESSAGE_MAP 表示使用消息映射 在CPP文件中使用 BEGIN_MESSAGE_MAP 和 END_MESSAGE_MAP 包含对应的消 ...