package com.gddxit.waterpower.utils; import freemarker.template.Configuration; import freemarker.template.Template; import freemarker.template.TemplateException; import sun.misc.BASE64Encoder; import java.io.*; import java.util.Map; public class MDoc { private Configuration configuration = null; public MDoc() { configuration = new Configuration(); configuration.setDefaultEncoding("utf-8"); } public File createDoc(Map<String, Object> dataMap, String fileName) throws IOException { //dataMap 要填入模本的数据文件 //设置模本装置方法和路径,FreeMarker支持多种模板装载方法。可以重servlet,classpath,数据库装载, configuration.setDirectoryForTemplateLoading(new File("/data/klmy/template")); //configuration.setClassForTemplateLoading(this.getClass(), "template"); Template t = null; try { //plan12.ftl为要装载的模板 t = configuration.getTemplate("plan12.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"); //这个地方对流的编码不可或缺,使用main()单独调用时,应该可以,但是如果是web请求导出时导出后word文档就会打不开,并且包XML文件错误。主要是编码格式不正确,无法解析。 //out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile))); out = new BufferedWriter(oWriter); } catch (FileNotFoundException e1) { e1.printStackTrace(); } try { t.process(dataMap, out); out.close(); fos.close(); } catch (TemplateException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return outFile; } public String getImageStr(String imgFile) { InputStream in = null; byte[] data = null; try { in = new FileInputStream(imgFile); data = new byte[in.available()]; in.read(data); in.close(); } catch (IOException e) { e.printStackTrace(); } BASE64Encoder encoder = new BASE64Encoder(); return encoder.encode(data); } }
用ftl导出Word
最新推荐文章于 2025-07-10 18:02:44 发布