<!--freemarker-->
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.28</version>
</dependency>
引入依赖之后
找到word的doc文档 类似于这种 在doc中 保存 ${字段} ${title}
(114条消息) Java使用FreeMarker自动生成Word文档(带图片和表单)_JavaBigData1024的博客-CSDN博客_freemarker动态生成word表格
代码
package com.zcst.modules.doc.util;
import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateException;
import java.io.*;
import java.util.HashMap;
import java.util.Map;
/**
* 利用java代码,动态生成word文档
*/
public class DocumentHandler {
//饱汉模式,需要用到时才去创建
private Configuration configuration = null;
public DocumentHandler() {
configuration = new Configuration();
configuration.setDefaultEncoding("utf-8");
}
//创建后缀为.doc的文档
public void creatDoc() throws IOException {
//把数据放进这个map里面进行填充
Map dataMap = new HashMap();
//获取数据的方法
getData(dataMap);
//模板文件的位置,你们的模板就是自己修改的flt文档,我的是跟代码同一个包下(确保能找到就可以) acd.ftl 在这个路径下
configuration.setDirectoryForTemplateLoading(new File("E:\\print\\print"));
Template template = null;
try {
//加载---要装载的模板文件
template = configuration.getTemplate("acd.ftl");
} catch (Exception e) {
e.printStackTrace();
}
//输出文档路径及名称,注意后缀一定要.doc!不然代码运行完后会打不开
File outFile = new File("E:\\test.doc");
Writer out = null;
try {
out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile)));
} catch (FileNotFoundException e) {
e.printStackTrace();
}
try {
template.process(dataMap, out);
// System.out.println(out); 查看数据
// System.out.println(dataMap); 查看数据
} catch (TemplateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
private void getData(Map dataMap) {
// dataMap.put("businesstypes", "■开卡 □销户 □业务类型变更(变更类型:1新增号码、2 删除号码、3 更换号码)变更原因:______________");
// dataMap.put("applicationscene", "■AXB □AX □其他_______________________");
// dataMap.put("productfuntion", "□录音 ■非录音");
// dataMap.put("paymodel", "■预付 □预付");
// List<Map<String,Object>> list = new ArrayList<Map<String,Object>>();
// for (int i = 0; i < 2; i++) {
// Map<String,Object> map = new HashMap<String,Object>();
//
// map.put("neirong", "内容"+i);
// list.add(map);
// }
dataMap.put("title", "**科技");
// dataMap.put("companyaddress", "保亿创意大厦");
// dataMap.put("linkman", "daboss");
// dataMap.put("phonenumber", "13567890123");
// List<User> userList = new ArrayList<>();
/**
*这里有循环,是因为我的模板中序号可能有多条,所以我把序号,地区,数量,日 通话量,备注作为了一个bean
进行了循环添加,如果你们遇上要循环的地方也可以这样,但是模板文件也要修改, ctrl+F 搜索<w:tr,
找到对应的文字需要循环的下面添加 <#list userList as user>,并在</w:tr后面加上</#list>结尾!
*/
// for (int i = 0; i < 4; i++) {
// if (i != 3) {
// User u = new User();
// u.setSequence("1" + i);
// u.setLocal("浙江杭州" + i);
// u.setNumber("2" + i);
// u.setNoteone("测试" + i);
// u.setTime("5" + i);
// userList.add(u);
// } else {
// User u = new User();
// u.setSequence("合计");
// u.setLocal("----");
// u.setNumber("1000");
// u.setTime("----");
// u.setNoteone("----");
// userList.add(u);
// }
// }
// dataMap.put("userList", userList);
// dataMap.put("time", "2019-2-26");
// dataMap.put("year", "2019");
// dataMap.put("month", "02");
// dataMap.put("day", "26");
// dataMap.put("list", list);
}
public static void main(String[] args) throws IOException {
DocumentHandler documentHandler = new DocumentHandler();
documentHandler.creatDoc();
}
}
335

被折叠的 条评论
为什么被折叠?



