利用freemarker导出我们想要的数据格式(此时以word文档为例)
程序员文章站
2022-04-29 22:39:51
...
利用freemarker导出我们想要的数据格式(此时以word文档为例)
freemarker百度百科
FreeMarker是一款模板引擎: 即一种基于模板和要改变的数据, 并用来生成输出文本(HTML网页、电子邮件、配置文件、源代码等)的通用工具。 它不是面向最终用户的,而是一个Java类库,是一款程序员可以嵌入他们所开发产品的组件。
准备工作
1.1基本介绍
freemarker是一个非常强大的转化的插件,我们可以用来做很多的事情,比如生成excel表格,word等,每次使用都有其独特的模块等,所以我们做事情的时候就要想好自己想要的做成的格式,这样我们就能够很快的达到我们的目的,本文主将的是生成word文档的相关的说明
1.2导入相应的jar包或者是坐标
<!--引入freemaker-->
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.22</version>
</dependency>
1.3建立相关的模板arc.doc文件
1.4将文件转化为xml格式,然后导入到相关的项目中,在项目中再转化为ftl格式,因为平时的文档不会转化为这种格式,所以在idea的环境中我们可以转化为这种格式
实现流程
2.1.通过工具类来将map中的输入到模块中去
2.2.相关的工具类的源码
package cn.ujiuye.utils;
import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateException;
import java.io.*;
import java.util.Map;
/**
* 传建文件对象的工具类
*/
public class MDoc {
//读取加载ftl文件
private Configuration configuration = null;
public MDoc() {
configuration = new Configuration();
configuration.setDefaultEncoding("utf-8");
}
/*
* 参数一dataMap:将要在doc上显示的数据保存在map里
* 参数二fileName:指定生成文件的绝对路径
*/
public void createDoc(Map<String,Object> dataMap,String fileName) throws UnsupportedEncodingException {
//获取模板文件所在的包路径
configuration.setClassForTemplateLoading(this.getClass(), "/cn/ujiuye/template");
Template t=null;
try {
//从模板文件所在的包路径中获取指定的模板
t = configuration.getTemplate("myarc.ftl");
} catch (IOException e) {
e.printStackTrace();
}
File outFile = new File(fileName);
Writer out = null;
FileOutputStream fos=null;
try {
fos = new FileOutputStream(outFile);
//字符流转化为字节流
OutputStreamWriter oWriter = new OutputStreamWriter(fos,"UTF-8");
//为字符输出流添加缓存的功能
out = new BufferedWriter(oWriter);
} catch (FileNotFoundException e1) {
e1.printStackTrace();
}
try {
//dataMap:将要在doc上显示的数据保存在map里;out:文件流
t.process(dataMap, out);
out.close();
fos.close();
} catch (TemplateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
2.3.下载附件,以我们想要的格式来下载
//下载附件,当点击的下载的时候以附件的形式开始下载 即下载当前登录用户的档案
@RequestMapping("/downarc")
public ResponseEntity<byte[]> downarc(HttpSession session) throws Exception{
Employee emp = (Employee) session.getAttribute("emp");
Employee emparc = us.getArc(emp.getEid());
//往map集合中存入相关的数据
Map map = new HashMap();
map.put("ename",emparc.getEname());
map.put("esex",emparc.getEsex());
map.put("bir",new SimpleDateFormat("yyyy-MM-dd").format(emparc.getArc().getBirthday()));
map.put("mz",emparc.getArc().getMinzu());
MDoc mDoc = new MDoc();
mDoc.createDoc(map,"D:\\oa\\files\\arc\\emparc.doc");
File file = new File("D:\\oa\\files\\arc\\emparc.doc");
HttpHeaders hh=new HttpHeaders();
hh.setContentDispositionFormData("attachment",new String("emparc.doc".getBytes("gbk"),"iso-8859-1"));
hh.setContentType(MediaType.APPLICATION_OCTET_STREAM);
return new ResponseEntity<byte[]>(FileUtils.readFileToByteArray(file),hh, HttpStatus.OK);
}
运行结果
上一篇: 汉朝能延续四百多年,与这个国家本身的政策有何关系?
下一篇: Bootstrap 第2章 排版样式