java导出数据到word(一)
2016-01-25 00:00
225 查看
摘要: 利用freemarker的模板以及标签,把数据渲染到自定义work模板(doc转xml转ftl)上,利用doc和xml的互转。
一、首先再work上定义好模板
![](http://static.oschina.net/uploads/space/2016/0125/141834_3Z7H_1987856.png)
二、把定义好的work转成xml
![](http://static.oschina.net/uploads/space/2016/0125/142002_d6kl_1987856.png)
如果出现下图错误,请百度msxml5.0,下载并安装,功能就可以正常使用。
![](http://static.oschina.net/uploads/space/2016/0125/144120_tirF_1987856.png)
三、打开xml,把对应要编辑的数据改成freemarker标签
![](http://static.oschina.net/uploads/space/2016/0125/142309_rMz2_1987856.png)
四、放入具体代码中
(1)把文件名改为 ftl后缀,并放入对于工程目录下
![](http://static.oschina.net/uploads/space/2016/0125/142520_XRvR_1987856.png)
(2)Java后台代码实现数据填充,并输出
五、页面
一、首先再work上定义好模板
![](http://static.oschina.net/uploads/space/2016/0125/141834_3Z7H_1987856.png)
二、把定义好的work转成xml
![](http://static.oschina.net/uploads/space/2016/0125/142002_d6kl_1987856.png)
如果出现下图错误,请百度msxml5.0,下载并安装,功能就可以正常使用。
![](http://static.oschina.net/uploads/space/2016/0125/144120_tirF_1987856.png)
三、打开xml,把对应要编辑的数据改成freemarker标签
![](http://static.oschina.net/uploads/space/2016/0125/142309_rMz2_1987856.png)
四、放入具体代码中
(1)把文件名改为 ftl后缀,并放入对于工程目录下
![](http://static.oschina.net/uploads/space/2016/0125/142520_XRvR_1987856.png)
(2)Java后台代码实现数据填充,并输出
/** * * <p>【导出doc文档】</p> * <p>条件:</p> * <p>备注:</p> * <p>例子:</p> * <p>日志:</p> * * @author:zhu [2016年2月3日 下午5:11:04] */ public void outOfDocGeneral() { Writer out = null; try { //获取数据,内容不允许有类似HTML的标签(<p>、<table>),xml转doc会出错,必须文本 hdJyList = hdJyService.findAll(); hd = hdService.load(hd.getId()); Configuration configuration = new Configuration(); configuration.setDefaultEncoding("UTF-8"); //configuration.setDirectoryForTemplateLoading(new File("/WEB-INF/docTemplate")); //FTL文件所存在的位置 //我的Action在 com.a.b.c包下,所以需要跳到5层目录 configuration.setClassForTemplateLoading(this.getClass(), "../../../../../docTemplate"); Map<String, Object> dataMap = new HashMap<String, Object>(); dataMap.put("title", hd.getHdbt()); dataMap.put("creater", hd.getLrr()); dataMap.put("content", hd.getHdnr()); dataMap.put("createTime", hd.getLrsj()); dataMap.put("hdJyList", hdJyList); Template temp = configuration.getTemplate("hdJyList.ftl"); //调试时候用,输出到指定文件夹下 //File outFile = new File("D:/outFilessa" + Math.random() * 10000 + ".doc"); //out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile), "UTF-8")); //super.getWWResponse()获取的是HttpServletResponse out = super.getWWResponse().getWriter();// 取得输出流 super.getWWResponse().reset();// 清空输出流 super.getWWResponse().setHeader("Content-disposition", "attachment; filename=proposal.doc");// 设定输出文件头 super.getWWResponse().setContentType("application/vnd.ms-word;charset=UTF-8");// 定义输出类型 temp.process(dataMap, out); } catch (Exception ex) { ex.printStackTrace(); } finally { if (out != null) { try { out.close(); } catch (IOException e) { e.printStackTrace(); } } } }
五、页面
//后缀有个 .doc,页面就不会打开,自动下载关闭页面 window.open (url+"/hdAction!outOfDocGeneral.shtml?file=proposal.doc");
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- c++11 + SDL2 + ffmpeg +OpenAL + java = Android播放器
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序
- 二叉查找树