java 将ftl文件作为模板导出word文档
2018-02-28 16:23
573 查看
一、word文档
1、准备作为模板的word文档(提前设置好结构样式)
2、另存为xml文件(2003)
如下是我准备好的word文档:
红色字体是准备好的test.doc文档的内容,要怎样的样式自己在word里调,打开此word文档,另存为XML格式,即Word XML 文档 (*.xml),保存好后直接重命名将后缀.ftl,文件为test.ftl。
1. html代码:
js代码:
我的项目是基于SpringMVC的,所以前台触发只需要在view层的文件里加个点击事件即可。
2.我的项目是maven项目,直接在pom.xml文件引入freeMarker的包,不是maven项目的话再自己去下载freeMarker的包,然后build path就可以了。
3.后台代码:
1、准备作为模板的word文档(提前设置好结构样式)
2、另存为xml文件(2003)
如下是我准备好的word文档:
会议详情 1.会议名称:${meetingTitle?if_exists?html} //${ meetingTitle}变量也可以这样写,但如果该字段为空时页面将保错,所有在变量后加上?if_exists?html 2.会议发起人:${username?if_exists?html} 3.参与人:${takeParkIn?if_exists?html} 4.会议开始时间:${startTime?if_exists?html} 5.会议地点:${place?if_exists?html} 6.会议内容:${content?if_exists?html} 7.会议纪要:${allSummary?if_exists?html}
红色字体是准备好的test.doc文档的内容,要怎样的样式自己在word里调,打开此word文档,另存为XML格式,即Word XML 文档 (*.xml),保存好后直接重命名将后缀.ftl,文件为test.ftl。
1. html代码:
<span id="downWord" style="cursor:pointer;" >下载word模板</span>
js代码:
$("#downWord").click(function(){ //点击下载按钮触发的事件 window.location.href = '/meeting/exportWordDoc?meetingId=' + meetingId; //参数自己定 })
我的项目是基于SpringMVC的,所以前台触发只需要在view层的文件里加个点击事件即可。
2.我的项目是maven项目,直接在pom.xml文件引入freeMarker的包,不是maven项目的话再自己去下载freeMarker的包,然后build path就可以了。
<dependency> <groupId>org.freemarker</groupId> <artifactId>freemarker</artifactId> <version>2.3.21</version> </dependency>
3.后台代码:
/*** * 导出Word会议详情 * * @return * @throws Exception */ @RequestMapping(value = "/exportWordDoc", method = RequestMethod.GET) @ResponseBody public void exportMillCertificate(HttpServletRequest request,HttpServletResponse response,String meetingId) throws Exception { //获得数据,系统相关,就不展示了,下面写死一些数据为例 Map<String, Object> map = new HashMap<String, Object>();//将对象存入map中 map.put("meetingTitle","会议标题"); map.put("username","会议发起人"); map.put("takeParkIn","参会人员"); map.put("allSummary","概要"); map.put("duration","会议持续时间"); map.put("place","会议地点"); map.put("content","会议内容"); WordUtils.exportMillCertificateWord(request,response,map); } package com.sinosoft.meetingpass.util; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStreamWriter; import java.io.Writer; import java.net.URLEncoder; import java.util.Map; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.http.client.utils.DateUtils; import freemarker.template.Configuration; import freemarker.template.Template; public class WordUtils { //配置信息,代码本身写的还是很可读的,就不过多注解了 private static Configuration configuration = null; //这里注意的是利用WordUtils的类加载器动态获得模板文件的位置 private static final String templateFolder = WordUtils.class.getClassLoader().getResource("").getPath()+"/templates/"; //FTL文件所存在的位置 static { configuration = new Configuration(); configuration.setDefaultEncoding("utf-8"); try { configuration.setDirectoryForTemplateLoading(new File(templateFolder)); } catch (IOException e) { e.printStackTrace(); } } private WordUtils() { throw new AssertionError(); } public static void exportMillCertificateWord(HttpServletRequest request, HttpServletResponse response, Map map) throws IOException { Template freemarkerTemplate = configuration.getTemplate("test.ftl"); File file = null; InputStream fin = null; ServletOutputStream out = null; try { // 调用工具类的createDoc方法生成Word文档 file = createDoc(map,freemarkerTemplate); fin = new FileInputStream(file); response.setCharacterEncoding("utf-8"); response.setContentType("application/msword"); // 设置浏览器以下载的方式处理该文件名 String fileName = "会议详情"+".doc"; //String fileName = "材质单"+DateUtils.curDateTimeStr14() + ".doc"; response.setHeader("Content-Disposition", "attachment;filename=" .concat(String.valueOf(URLEncoder.encode(fileName, "UTF-8")))); out = response.getOutputStream(); byte[] buffer = new byte[512]; // 缓冲区 int bytesToRead = -1; // 通过循环将读入的Word文件的内容输出到浏览器中 while((bytesToRead = fin.read(buffer)) != -1) { out.write(buffer, 0, bytesToRead); } } finally { if(fin != null) fin.close(); if(out != null) out.close(); if(file != null) file.delete(); // 删除临时文件 } } private static File createDoc(Map<?, ?> dataMap, Template template) { String name = "f:/test.doc"; File f = new File(name); Template t = template; try { // 这个地方不能使用FileWriter因为需要指定编码类型否则生成的Word文档会因为有无法识别的编码而无法打开 Writer w = new OutputStreamWriter(new FileOutputStream(f), "utf-8"); t.process(dataMap, w); w.close(); } catch (Exception ex) { ex.printStackTrace(); throw new RuntimeException(ex); } return f; } }
相关文章推荐
- java根据ftl模板导出word文档
- java freemarker 通过ftl模板文件导出word文件发现在有中文地方出现在乱码,打开word文件提示xml错误解决办法
- java freemarker模板 实现word文件导出
- JAVA根据ftl模板生成需要的多表格word文档
- java根据ftl模板生成word文档(列表)
- JAVA 数据导出Word文档模板的功能实现
- java poi 基于模板文件替换字符生成word文档
- java使用freemarker模板导出word(带有合并单元格)文档
- java根据ftl模板生成word文档
- java IO 基于模板文件替换字符生成word文档
- JAVA原始的导出excel文件,快捷通用 方便 还能够导出word文档哦
- Java 导出word文件
- Struts2 FreeMarker FTL 模板文件中调用静态 java 方法
- 【FreeMarker】【模板文件FTL】【参考文档】特殊变量
- 用Java作为默认程序打开Eclipse导出的jar文件
- java导出word模板
- 【FreeMarker】【模板文件FTL】【参考文档】保留字
- JAVA 将数据导出Word文档(经过测试)
- 基于模板导出word文档
- Java语言结合Freemaker技术导出Word文档