结合Freemaker导出文件
public void exportSimpleWord() throws Exception{
// 要填充的数据, 注意map的key要和word中${xxx}的xxx一致
Map<String,String> dataMap = new HashMap<String,String>();
dataMap.put("username", "张三");
dataMap.put("sex", "男");
//Configuration用于读取ftl文件
Configuration configuration = new Configuration();
configuration.setDefaultEncoding("utf-8");
/*以下是两种指定ftl文件所在目录路径的方式, 注意这两种方式都是
* 指定ftl文件所在目录的路径,而不是ftl文件的路径
*/
//指定路径的第一种方式(根据某个类的相对路径指定)
//configuration.setClassForTemplateLoading(this.getClass(),"");
//指定路径的第二种方式,我的路径是C:/a.ftl
configuration.setDirectoryForTemplateLoading(new File("C:/"));
// 输出文档路径及名称
File outFile = new File("D:/test.doc");
//以utf-8的编码读取ftl文件
Template t = configuration.getTemplate("a.ftl","utf-8");
Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile), "utf-8"),10240);
t.process(dataMap, out);
out.close();
}
在公司做在线简历导出,用freemaker导出word文档,无法换行,问题,解决方法如下:
当数据保存到数据库的时候如何有换行,换行也会存储到数据库里面,当页面拿到这些数据的时候,这些换行会以 ‘\n’ 的形式实现页面上换行的效果,导入到word文档,如果继续使用\n肯定是没用的
使用freemaker的replace方法,使用word文档的标签,替换\n,实现word文档的换行.
实现的关键代码,其次就是细心认真,一点一点调试。
<#if showcase?&&showcase!="">
<w:t>${showcase?replace("\n",
"</w:t>
</w:r>
<w:bookmarkStart w:id=\"0\" w:name=\"_GoBack\"/>
<w:bookmarkEnd w:id=\"0\"/>
</w:p>
<w:p w:rsidR=\"009025F9\" w:rsidRPr=\"002A1E10\" w:rsidRDefault=\"009025F9\"
w:rsidP=\"00514E73\">
<w:pPr>
<w:spacing w:before=\"42\" w:after=\"42\" w:line=\"241\" w:lineRule=\"atLeast\"/>
<w:rPr>
<w:rFonts w:ascii=\"微软雅黑\" w:eastAsia=\"微软雅黑\" w:hAnsi=\"微软雅黑\" w:cs=\"Tahoma\"/>
<w:color w:val=\"444444\"/>
<w:sz w:val=\"21\"/>
<w:szCs w:val=\"21\"/>
</w:rPr>
</w:pPr>
<w:r w:rsidRPr=\"002A1E10\">
<w:rPr>
<w:rFonts w:ascii=\"微软雅黑\" w:eastAsia=\"微软雅黑\" w:hAnsi=\"微软雅黑\" w:cs=\"Tahoma\"
w:hint=\"eastAsia\"/>
<w:color w:val=\"444444\"/>
<w:sz w:val=\"21\"/>
<w:szCs w:val=\"21\"/>
</w:rPr>
<w:t>")}</w:t>
</w:r>
<w:bookmarkStart w:id="0" w:name="_GoBack"/>
<w:bookmarkEnd w:id="0"/>
</w:p>
<#else>
<w:t></w:t>
</w:r>
<w:bookmarkStart w:id="0" w:name="_GoBack"/>
<w:bookmarkEnd w:id="0"/>
</w:p>
</#if>