版权声明:本文为博主原创文章,欢迎转载,转载请注明作者、原文超链接 ,博主地址:https://blog.csdn.net/qq_31122833。 https://blog.csdn.net/qq_31122833/article/details/83022466
1、首先,新建一个word文档:里面写需要下载的东西
2、编辑完后,另存为xml格式(不用管xml里面是什么),然后将后缀名xml改为ftl
3、这个ftl就是在Java代码中可生成word的模板文件了
进入前端代码模块:
<input type="button" class="btn_default" onclick="createSchoolWord();" value="导出word报表"/></br></br>
//下载
function createSchoolWord() {
window.location.href=path+"/web/api/word/createSchoolWord?accessToken=${accessToken}"
}
进入后端代码部分:
/**
* 一键生成全校分析报告
* @param response
*/
@ResponseBody
@RequestMapping("/createSchoolWord")
public void createSchoolWord(HttpServletRequest request,HttpServletResponse response) {
Map<String, Object> map = new HashMap<String, Object>();
try {
//1、全校共有多少人
map.put("studentNum",studentNum);
//2、非常异常多少人
map.put("veryUnusualNum",veryUnusualNum);
//3、一般异常多少人
map.put("generalUnusualNum",generalUnusualNum);
//4、正常多少人
map.put("normalNum",normalNum);
//5、在同类型高校中处于什么水平
map.put("sameSchoolLevel",sameSchoolLevel);
//6、全校本学期共有多少人被辅导
map.put("guidanceNum",guidanceNum);
//7、从全校看,问题较严重的有几个方面:社交、经济、感情
map.put("aspectsSerious",aspectsSerious);
//8、各个问题的排序
map.put("aspectSort",aspectSort);
//map----------------------------------------------------------end
InputStream inputStream = DocumentHandler.createSchoolWord(map);
response.setContentType("application/zip");
OutputStream out = response.getOutputStream();
response.setHeader("Content-Disposition", "attachment; filename="+"schoolReport"+".doc");
int b = 0;
byte[] buffer = new byte[1000000];
while (b != -1) {
b = inputStream.read(buffer);
if(b!=-1) out.write(buffer, 0, b);
}
inputStream.close();
out.close();
out.flush();
} catch (IOException e) {
e.printStackTrace();
logger.error("下载失败");
}
}
DocumentHandler代码如下:
生成临时文件,并返回流,其中schoolReport.ftl就是上文1、2、3说的生成word的模板文件,放在resources下的templates目录下
/**
* 生成全校分析报告
* @param map 数据
*/
public static InputStream createSchoolWord(Map<?, ?> map) {
InputStream inputStream = null;
try {
String templateName = "schoolReport.ftl";
Configuration configuration = new Configuration();
configuration.setDefaultEncoding("UTF-8");
// ftl模板文件
configuration.setClassLoaderForTemplateLoading(DocumentHandler.class.getClassLoader(),"/templates/");
// 获取模板
Template template = configuration.getTemplate(templateName);
File outFile = File.createTempFile("schoolReport", ".doc");
outFile.deleteOnExit();
// 将模板和数据模型合并生成文件
Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile), "UTF-8"));
// 生成文件
template.process(map,out);
out.flush();
out.close();
inputStream = new FileInputStream(outFile);
} catch (Exception e) {
e.printStackTrace();
}
return inputStream;
}