第一步:打开word,设计表格,另存为另一种格式的word也就是.xml的格式
第二步:把文档需要更改的数据替换成${字段名} 并且把修改后的文档修改后缀名.ftl,放入到eclipse的根目录下建一个文件夹
(事先填好假数据,是为了能够在xml中快速找到位置,然后修改成${字段名}的形式, .ftl是freemaker的后缀名,就是一种模板)
第三步:就是代码的体现了
@RequestMapping("exportToWord")
public void exportToWord(HttpServletRequest request, HttpServletResponse response) {
try {
Template template = FreeMarkerUtils.getTemplate(request.getSession().getServletContext(), "/cons_org_design_scheme.ftl");
Map
root.put("name", "xxxxxxxxxxxxxxxxxxxxxxx");
root.put("date", "2018-08-21");
response.setContentType("application/x-msdownload");
final HttpServletResponse responseTemp = response;
responseTemp.addHeader("Content-Disposition", "attachment;filename=" + new String("实施性施工组织方案审核表.doc".getBytes(), "ISO-8859-1"));
Writer out = new OutputStreamWriter(response.getOutputStream(), "UTF-8");
template.process(root, out);
out.flush();
out.close();
} catch (IOException e) {
e.printStackTrace();
} catch (TemplateException e) {
e.printStackTrace();
}
}
//工具类
package com.longshine.framework.crcc.utils;
import freemarker.template.Configuration;
import freemarker.template.DefaultObjectWrapper;
import freemarker.template.Template;
import javax.servlet.ServletContext;
import java.io.IOException;
/**
* Created by cheng on 2018/8/21.
*/
public class FreeMarkerUtils {
private static Configuration cfg;
public static Template getTemplate(ServletContext servletContext,String templateName){
Template template = null;
if (cfg == null) {
cfg = new Configuration();
cfg.setDefaultEncoding("UTF-8");
cfg.setServletContextForTemplateLoading(servletContext, "/export_template");
cfg.setObjectWrapper(new DefaultObjectWrapper());
}
try {
template = cfg.getTemplate(templateName);
} catch (IOException e) {
e.printStackTrace();
}
return template;
}
}
效果就是第一步中的效果了
注明:如果word里面导入图片,需要得到图片的base64格式,在扔到模板里面,附上代码转化代码如下
String imgageFile = "图片路径"
InputStream inputStream = null;
byte[] data = null;
try {
inputStream = new FileInputStream(imgageFile);
data = new byte[inputStream.available()];
inputStream.read(data);
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
// 加密
BASE64Encoder encoder = new BASE64Encoder();
String image = encoder.encode(data);
把image扔到map里传到模板里面.
再次注明这样代码生成的 base64不带,听好是不带 data:image/jpeg;base64,但是对本身程序没有影响,但是如果你想网上在线观看这个base64的图片,就加上前面这个东西 附上截图