java 导出word 并下载
记录一下导出操作
源码:
/************
* 导出word 并下载
* @param id 房号记录编号
* ***********************/
@RequestMapping("/exportAgent")
@ResponseBody
public void execute(String id, HttpServletRequest request,HttpServletResponse resp) throws Exception {
log.info("导出word 并下载==>>[id="+id+"]");
String path = request.getSession().getServletContext().getRealPath("/ExportWord");
String filename = exportSimpleWord(id, request);// 生成文件的文件名称 这个需要动态的获取
OutputStream out;// 输出响应正文的输出流
InputStream in;// 读取本地文件的输入流
// 获得本地输入流
File file = new File(path + "\\" + filename);
in = new FileInputStream(file);
// 设置响应正文的MIME类型
resp.setContentType("Content-Disposition;charset=GB2312");
resp.setHeader("Content-Disposition", "attachment;" + " filename=" + new String(filename.getBytes(), "ISO-8859-1"));
// 把本地文件发送给客户端
out = resp.getOutputStream();
int byteRead = 0;
byte[] buffer = new byte[512];
while ((byteRead = in.read(buffer)) != -1) {
out.write(buffer, 0, byteRead);
}
in.close();
out.close();
file.delete();
}
操作类:
/***
* 执行导出Word 文档
* @param id 记录编号
* ****/
public String exportSimpleWord(String id, HttpServletRequest request) throws IOException, TemplateException {
log.info("执行导出Word 文档==>>[id="+id+"]");
HouseAgent houseAgent = houseAgentService.houseAgent(id);
this.insertCommunityName2CommunityArea(houseAgent);
List<Integer> roleIds=new ArrayList<Integer> ();
List<String> communityIds=new ArrayList<String> ();
roleIds.add(8);
communityIds.add(houseAgent.getCommunityId());
//房屋租售管理员
CommunityDesResult CommunityDesResult = communityRpcService.getCommunityDesByCommunityId(houseAgent.getCommunityId());
CommunityDes communityDes = CommunityDesResult.getCommunityDes();
if (null != communityDes) {
houseAgent.setUserPhone(communityDes.getCommunityServicePhone());
} // 要填充的数据, 注意map的key要和word中${xxx}的xxx一致
Map<String, Object> dataMap = new HashMap<>();
dataMap.put("hosue_title", StringUtils.isNotBlank(houseAgent.getTitle())?houseAgent.getTitle():"");// 标题
dataMap.put("neirong", StringUtils.isNotBlank(houseAgent.getContent())?houseAgent.getContent():"");// 描述
dataMap.put("renovation", StringUtils.isNotBlank(houseAgent.getRenovation())?houseAgent.getRenovation():"");// 装修
dataMap.put("type", null!=houseAgent.getHouseType()?houseAgent.getHouseType():"");// 类型
dataMap.put("price", houseAgent.getMoney()+houseAgent.getMoneyUnit());// 售价
dataMap.put("house_size", null!=houseAgent.getHouseSize()?houseAgent.getHouseSize().toString()+"平米":"");// 面积
dataMap.put("layout_type", null!=houseAgent.getLayoutType()?houseAgent.getLayoutType():"");// 户型
dataMap.put("floors", StringUtils.isNotBlank(houseAgent.getFloors())?houseAgent.getFloors():"");// 楼层
dataMap.put("Rights", null!=houseAgent.getYearLimit()?(houseAgent.getYearLimit()+"年"):"");// 产权
dataMap.put("address", StringUtils.isNotBlank(houseAgent.getAddr())?houseAgent.getAddr():"");// 地址
dataMap.put("xiaoqu", StringUtils.isNotBlank(houseAgent.getCommunityName())?houseAgent.getCommunityName():"");// 小区
dataMap.put("area", StringUtils.isNotBlank(houseAgent.getCommunityErea())?houseAgent.getCommunityErea():"");// 区域
dataMap.put("money", (null!=houseAgent.getMoney()?houseAgent.getMoney()+(StringUtils.isNotBlank(houseAgent.getMoneyUnit())?houseAgent.getMoneyUnit():""):""));// 区域
dataMap.put("rentType", StringUtils.isNotBlank(houseAgent.getRentType())?houseAgent.getRentType():"");
dataMap.put("year", null!=houseAgent.getYear()?houseAgent.getYear()+"年":"");
dataMap.put("telephone",StringUtils.isEmpty(houseAgent.getUserPhone())?"":houseAgent.getUserPhone());
List<Map<String,Object>> imglist = null;
try {
imglist = getImg(houseAgent.getHouseImgs(), request);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
} // Configuration用于读取ftl文件
Configuration configuration = new Configuration();
configuration.setDefaultEncoding("utf-8"); /* 以下是两种指定ftl文件所在目录路径的方式, 注意这两种方式都是 */
// 获取当前类所在路径目录
String pathString = request.getSession().getServletContext().getRealPath("/ExportWord");
configuration.setDirectoryForTemplateLoading(new File(pathString)); String nameString = "house" + System.currentTimeMillis() + ".doc";
// 输出文档路径及名称
File outFile = new File(pathString + "\\" + nameString + ""); // 以utf-8的编码读取ftl文件
Template t;
String templateFile="";
//出租
if(houseAgent.getType().intValue()==0){
templateFile="rent.ftl";
//出售
}else if(houseAgent.getType().intValue()==1){
templateFile="sell.ftl";
}
t = configuration.getTemplate(templateFile, "utf-8");
dataMap.put("images", imglist); // 图片 Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile), "utf-8"), 10240);
t.process(dataMap, out);
out.close(); //删除已下载的图片
final List<Map<String,Object>> finalList=imglist;
ThreadPools.getInstance().execute(new Runnable() {
@Override
public void run() {
for (Map<String, Object> map : finalList) {
File file=new File(map.get("deleteImage").toString());
file.delete();
}
}
}); return nameString;
}
java 导出word 并下载的更多相关文章
- java导出word直接下载
导出word工具类 package util; import java.io.IOException; import java.io.Writer; import java.util.Map; imp ...
- java导出word的6种方式(复制来的文章)
来自: http://www.cnblogs.com/lcngu/p/5247179.html 最近做的项目,需要将一些信息导出到word中.在网上找了好多解决方案,现在将这几天的总结分享一下. 目前 ...
- java导出word文件
java导出word文件 test5.ftl文件生存方法, 第一步:用word新建test5.doc,填写完整模板,将需导出数据用${}代替 第二步:将test5.doc另存为test5.xml 第三 ...
- [转载]java导出word的5种方式
在网上找了好多天将数据库中信息导出到word中的解决方案,现在将这几天的总结分享一下.总的来说,java导出word大致有5种解决方案: 1:Jacob是Java-COM Bridge的缩写,它在Ja ...
- [原创]java导出word的5种方式
在网上找了好多天将数据库中信息导出到word中的解决方案,现在将这几天的总结分享一下.总的来说,java导出word大致有5种解决方案: 1:Jacob是Java-COM Bridge的缩写,它在Ja ...
- java导出word的6种方式(转发)
来自: http://www.cnblogs.com/lcngu/p/5247179.html 最近做的项目,需要将一些信息导出到word中.在网上找了好多解决方案,现在将这几天的总结分享一下. 目前 ...
- Freemarker + xml 实现Java导出word
前言 最近做了一个调查问卷导出的功能,需求是将维护的题目,答案,导出成word,参考了几种方案之后,选择功能强大的freemarker+固定格式之后的wordxml实现导出功能.导出word的代码是可 ...
- Java导出freemarker实现下载word文档格式功能
首先呢,先说一下制作freemarker模板步骤, 1. 在WPS上写出所要的下载的word格式当做模板 2. 把模板内不固定的内容(例:从数据库读取的信息)写成123或者好代替的文字标注 3. 把固 ...
- Java导出Word利用freemarker(含图片)
制作Word模版 建议使用高版本的office做,尽量不要用WPS做,生成xml会出现乱码 编码要统一,推荐UTF-8 建好模板,将模板另存为xml格式,建议原来模板不要删,xml的如果后期打不开,还 ...
随机推荐
- ASP.NET WebApi 文档Swagger中度优化
本文版权归博客园和作者吴双本人共同所有,转载和爬虫请注明原文地址:www.cnblogs.com/tdws 写在前面 在后台接口开发中,接口文档是必不可少的.在复杂的业务当中和多人对接的情况下,简 ...
- C#开发微信门户及应用(13)-使用地理位置扩展相关应用
本文继续上一篇<C#开发微信门户及应用(12)-使用语音处理>,继续介绍微信的相关应用.我们知道,地理位置信息可以用来做很多相关的应用,除了我们可以知道用户所在的位置,还可以关联出一些地理 ...
- 分布式搜索elasticsearch配置文件详解
elasticsearch的config文件夹里面有两个配置文件:elasticsearch.yml和logging.yml,第一个是es的基本配置文件,第二个是日志配置文件,es也是使用log4j来 ...
- servlet开发中遇到的问题集合
问题1: servlet插入数据库时中文会乱码. 解决方法:在数据库连接地址最后增加两个转码参数(?useUnicode=true&characterEncoding=utf8) url=jd ...
- [连载]《C#通讯(串口和网络)框架的设计与实现》- 9.插件引擎设计
目 录 第九章 插件引擎设计... 2 9.1 框架的契约-接口... 2 9.2 插件的雏形-抽象类... 3 9.3 ...
- HashSet,TreeSet和LinkedHashSet的区别
Set接口Set不允许包含相同的元素,如果试图把两个相同元素加入同一个集合中,add方法返回false.Set判断两个对象相同不是使用==运算符,而是根据equals方法.也就是说,只要两个对象用eq ...
- 【原】JAVA SE编码规范
/* * 编码规范: * 1.所有的命名遵循"见名知意"的原则 * 2.所有的命名不允许使用汉字或拼音 * 3.Java的工程命名建议使用小写,比如:oa.crm.cms... * ...
- app使用微信支付成功后,点击返回到该app却跳到另外一个app去了
刚接手了公司iOS的两个APP, 现在碰到了这样一个问题: 有一台iPhone在一个APP中使用了微信支付,支付成功后,点击返回到该APP,结果却跳到了另外一个APP去了. 这两个APP都是公司开发的 ...
- Android中使用ListView实现分页刷新(线程休眠模拟)
当要显示的数据过多时,为了更好的提升用户感知,在很多APP中都会使用分页刷新显示,比如浏览新闻,向下滑动到当前ListView的最后一条信息(item)时,会提示刷新加载,然后加载更新后的内容.此过程 ...
- ZooKeeper:数据模型
ZooKeeper数据模型 ZNode ZNode 分类 Stat Watcher Watcher工作原理 Watcher事件说明 Watcher注册 事件发布 示例 ZooKeeper 数据模型 整 ...