目录
一 FreeMarker简介
二 集成springboot,实现案例导出
三 常见面试题总结
一 FreeMarker简介
FreeMarker 是一款 模板引擎: 即一种基于模板和要改变的数据, 并用来生成输出文本(HTML网页,电子邮件,配置文件,源代码等)的通用工具。 是一个Java类库。
二 集成springboot,实现案例导出
在本地磁盘随便准备一个文件,内容体如下:
内容案例如下:
代码实现:
2.1 导入jar
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>
2.2 新建FileController.java类,代码实现如下:
package com.yty.system.controller;import com.alibaba.fastjson.JSONObject;
import freemarker.template.Configuration;
import freemarker.template.Template;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import javax.servlet.http.HttpServletResponse;
import java.io.*;@RestController
@RequestMapping("/file")
@Api(tags = "文件管理api")
public class FileController {@GetMapping("exportPDF")@ApiOperation(value = "文件导出到PDF",notes = "文件导出到PDF")public void exportPDF(HttpServletResponse response) throws Exception{try {exportWord(response, "2012001.ftl", "/templates/ftl/");}catch (Exception e) {e.printStackTrace();}}public void exportWord(HttpServletResponse response, String templateName, String templatePath) throws Exception{Configuration configuration = new Configuration(Configuration.getVersion()); // 创建一个Configuration对象configuration.setClassForTemplateLoading(this.getClass(), templatePath);configuration.setDefaultEncoding("utf-8");//必须加此参数,否则任意key的值为空freemark都会报错configuration.setClassicCompatible(true);// 选择模板Template template = configuration.getTemplate(templateName); //加载模板// 导出文件名String fileName = System.currentTimeMillis() + ".doc";// 导出文件路径String path = "D:\\system\\ee\\模板\\" + fileName;// 创建文件File file = new File(path);Writer out = new FileWriter(file);// 填充数据JSONObject jsonObject = new JSONObject();jsonObject.put("surveyPersonName", "孙悟空");jsonObject.put("createTime", "2012-09");//调用模板对象的process方法输出文件template.process(jsonObject, out);// 下载文件downloadFile(response, file, out);}public void downloadFile(HttpServletResponse response, File file, Writer out) throws Exception{// 下载文件byte[] buffer = new byte[1024];response.addHeader("Content-Disposition","attachment;filename=" + new String(file.getName().getBytes(), "ISO-8859-1"));FileInputStream fis = new FileInputStream(file);BufferedInputStream bis = new BufferedInputStream(fis);OutputStream os = response.getOutputStream();int i = bis.read(buffer);while (i != -1) {os.write(buffer, 0, i);i = bis.read(buffer);}// 关闭流os.close();bis.close();fis.close();out.close();file.delete();}
}
直接复制代码,运行结果:
集成完毕,数据已填充,导出完毕
三 常见面试题总结
待补充...............