利用freemaker和ftl文件导出word带不开的问题
来源:互联网 发布:萧山网络问政进化镇 编辑:程序博客网 时间:2024/05/21 14:44
背景
自己写的小项目中需要一个word导出功能,经过网上的查找,发现利用freemaker和ftl文件的方法比较简单。
流程
先用word创建一个模板,将里面需要替换的内容使用${xxx}来代替,然后另存为.xml文件(保存为2003-xml),然后直接将后缀名替换为ftl即可,最后用editplus后者nodepad++检查一下替换的内容是否正确,有可能会出现将\$淡出处理的情况,如有错误改正即可。
代码:
public class WordTest { private Configuration configuration = null; public WordTest(){ configuration = new Configuration(); configuration.setDefaultEncoding("UTF-8"); } public static void main(String[] args) { WordTest test = new WordTest(); test.createWord(); } public void createWord(){ Map<String,Object> dataMap=new HashMap<String,Object>(); getData(dataMap); configuration.setClassForTemplateLoading(this.getClass(), "");//模板文件所在路径 Template t=null; try { t = configuration.getTemplate("test.ftl"); //获取模板文件 } catch (IOException e) { e.printStackTrace(); } File outFile = new File("E:/11/"+Math.random()*10000+".doc"); //导出文件 Writer out = null; try { FileOutputStream fos = new FileOutputStream(outFile); OutputStreamWriter oWriter = new OutputStreamWriter(fos,"UTF-8");// out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile))); out = new BufferedWriter(oWriter); } catch (Exception e1) { e1.printStackTrace(); } try { t.process(dataMap, out); //将填充数据填入模板文件并输出到目标文件 } catch (TemplateException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } private void getData(Map<String, Object> dataMap) { dataMap.put("title", "标题"); dataMap.put("nian", "2016"); dataMap.put("yue", "3"); dataMap.put("ri", "6"); dataMap.put("shenheren", "lc"); // List<Map<String,Object>> list = new ArrayList<Map<String,Object>>(); // for (int i = 0; i < 10; i++) { // Map<String,Object> map = new HashMap<String,Object>(); // map.put("xuehao", i); // map.put("neirong", "内容"+i); // list.add(map); // } // // // dataMap.put("list", list); } }
问题
生成的word打不开,总是报文件包含错误,xml错误之类的。苦恼了很久之后,发现是编码的问题。
一开始的代码写的是
out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile)));
这里缺少对流的编码,导致出现word打不开。
正确的修改为:
FileOutputStream fos = new FileOutputStream(outFile); OutputStreamWriter oWriter = new OutputStreamWriter(fos,"UTF-8");out = new BufferedWriter(oWriter);
问题解决。
阅读全文
0 0
- 利用freemaker和ftl文件导出word带不开的问题
- 利用freemaker导出word
- ftl文件 是什么文件 freemaker
- freemaker实现导出Excel和word
- freemaker的word文档导出实例使用
- freemaker导出word
- java 将ftl文件作为模板导出word文档
- 今天做了freemaker 导出word文档 的bug修复,解决 \n换行 问题
- 【FreeMaker】利用freemaker生成word版报表
- FreeMarker+FTL模版导出word
- ftl实现文档WORD导出
- freemaker导出word含图片格式
- 利用FreeMaker实现网页到Word文档的生成
- *.ftl文件中文乱码的问题:
- Freemaker初接触(五)导入公共ftl文件
- java根据ftl模板导出word文档
- FreeMaker FTL Tag
- FreeMaker+Xml导出word(含图片)
- HashTable----- List 299. Bulls and Cows
- Mysql 查询缓存
- Error:Execution failed for task ':app:transformResourcesWithMergeJavaResForDebug'. > com.android.bui
- Android_ADB_通过WIFI或USB方式完成调试
- ubuntu双系统安装
- 利用freemaker和ftl文件导出word带不开的问题
- 机器学习(十三)- Backpropagation in Practice
- live555与vlc的rtsp组播交互信息(Log)
- 欢迎使用CSDN-markdown编辑器
- 集合循环示例
- 某BCD工艺剖析
- Linux发行版Ubuntu安装Wine
- opencv 绘制目标矩形
- CodeForces