使用freemarker导出到word
·
1、建立word模板需要填充位置用占位符,图片位置就直接放置一张图片

2、另存为Word XML文档(*.xml),然后改文件后缀为.ftl

修改文件后缀为.ftl

3、将文件放置到开发软件中,我的是在idea中,所以我直接快捷键Ctrl+Alt+L进行了排版

4、对于导入进来部分位置爆红处理点击file->Settings | Languages & Frameworks | Schemas and DTDs,将爆红的位置复制添加到这里边就可以了!!!

5、将文件中需要根据数据库导入数据的地方使用${字段名}替换

6、对于有复选框的位置我们需要做些改动


添加复选框如下代码:F052表示打上对号,00A3表示没打对号
<w:r>
<#if sex=='1'>
<w:sym w:font="Wingdings 2" w:char="F052"/>
<#else>
<w:sym w:font="Wingdings 2" w:char="00A3"/>
</#if>
</w:r>
7、如果有图片需求就先使用图片在Word中占位,然后按1走,最后删除文件中的base64编码,替换为${字段}

删除base64编码,修改为${image}

8、处理完.ftl文件后就开始写核心代码
try {
Configuration configuration = new Configuration(Configuration.DEFAULT_INCOMPATIBLE_IMPROVEMENTS);
//设置编码
configuration.setDefaultEncoding("UTF-8");
//要填入的数据,用map取出来,这里我是从数据库取的数据
Map<String, Object> repairApplication = webSignMapper.exportByRepairOrder(repairOrder);
//取出图片地址,转换base64,通过key值去取
String url= (String) repairApplication.get("key值");
//使用工具类转换为base64编码
String image1 = ImageUtils.imageFromUrlByHttps(url);
//存入map中
repairApplication.put("key值",image1);
//设置模本装置方法和路径,FreeMarker支持多种模板装载方法。可以重servlet,classpath,数据库教程装载,
configuration.setClassForTemplateLoading(this.getClass(), "/templates");
Template t = null;
try {
//获取模板
t = configuration.getTemplate("例子.ftl","utf-8");
} catch (IOException e) {
e.printStackTrace();
}
//输出文档路径及名称
File outFile = new File("C:\\Users\\Lenovo\\Desktop\\信息表.doc");
Writer out = null;
try {
out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile), "utf-8"));
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
//将数据填充,转为Word
t.process(repairApplication, out);
} catch (TemplateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
} catch (Exception e) {
e.getMessage();
e.printStackTrace();
}
这里就不输出了,如果没有导出成Word,里边的内容还是.ftl内容,可以好好检查一下.ftl文件,是不是那个位置有弄错☺
9、如果存入数据库的图片地址是https形式的,就会报证书错误,解决方法在上一篇文章!!!!!!!!后续会更新导出为PDF文件
更多推荐



所有评论(0)