poi-tl是对poi很好的一个封装,用起来相对来说也更加简单,将git的地址记录一下,方便大家去看

扣扣技术分享交流群:1125844267

源码和文档

https://github.com/Sayi/poi-tl

我们的项目是前后端分离的,前端vue,后端springboot,springCloud

前端:

前端的话很简单, window.open("后端访问地址");请求到下载的后端方法

后端:

后端的话首先我们需要引入相应的依赖:

<!-- 导出poi -->
<dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>3.17</version>
</dependency><!-- poi-tl word模板引擎 -->
<dependency><groupId>com.deepoove</groupId><artifactId>poi-tl</artifactId><version>1.5.0</version>
</dependency>

因为之前项目中做过excel的导出,所以有poi的依赖,后导出word文档的时候又引入了poi-tl,所以没有测试单独引入poi-tl是否能够导出word文档成功

制作需要导出的word文档的模板:

其实是很简单的,只要将我们要查出来的数据对应的实体类的每个字段跟我们word模板的字段能够对应上就可以了,然后将这个模板放入到resource下

具体实现导出的代码:

@RequestMapping(value = "exportLog", method = RequestMethod.GET)
public ResponseEntity<byte[]> exportLog(@RequestParam Long id){//这儿其实就是将要导出的数据查出来DutyLog dutyLog = dutyLogService.getDutyLogById(id);if(dutyLog != null){try {//获得resource路径String path = Thread.currentThread().getContextClassLoader().getResource("").getPath();//找到我们实现准备好的模板并且将我们自己的数据渲染进去XWPFTemplate template = XWPFTemplate.compile(path+"/template.docx").render(dutyLog);//文档说是用ServletOutputStream来导出,但是没有搞成功ByteArrayOutputStream baos = new ByteArrayOutputStream();template.write(baos);HttpHeaders headers = new HttpHeaders();headers.setContentDispositionFormData("attachment",new String((dutyLog.getName()+"_"+ dutyLog.getCreateTime() + ".docx").getBytes("UTF-8"), "iso-8859-1"));headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);ResponseEntity<byte[]> entity = new ResponseEntity<>(baos.toByteArray(), headers, HttpStatus.CREATED);return entity;} catch (IOException e) {logger.error("LogController=================================>exportLog:",e);}}return null;
}

之前的想法是将数据直接保存成模板文档,前端直接点击文档路径预览,但是没有实现成功,主要有这几点考虑:

1、如果将生成的文档保存到项目目录下,那么每次重新部署的话就得将之前生成的文档拷贝过来,这样做很不便捷;

2、如果将生成的文档放到项目外边,那么直接点击链接肯定无法实现点击预览,其实就算在项目目录下也不一定能成功。 word和图片还是有区别的,图片是可以根据链接直接显示的,个人觉得如果想实现word预览前端还是需要加插件的。之前也没做过,不敢肯定,有做过的朋友可以给点儿建议

3、主要还是数据库保存了一份,那么word文档再保存一份就显得多此一举,所以最后选择保留数据库

那么还是将按模板保存word文档的代码记录一下:

dutyLog是参数,是需要保存的数据

XWPFTemplate template = null;
FileOutputStream out = null;
try {SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");String now = format.format(new Date());dutyLog.setCreateTime(now);//获得resource路径String path = Thread.currentThread().getContextClassLoader().getResource("").getPath();template = XWPFTemplate.compile(path+"/template.docx").render(dutyLog);File dir = new File("/dutyLog/"+dutyLog.getName());if(!dir.exists()){dir.mkdirs();}//保存文件out = new FileOutputStream(dir+"/"+ dutyLog.getName() + "-" + dutyLog.getId() +".docx");template.write(out);out.flush();return true;
} catch (Exception e) {e.printStackTrace();return false;
}finally {try {if(out != null){out.close();}if(template != null){template.close();}} catch (IOException e) {e.printStackTrace();}
}
return false;

个人建的交流群1125844267,欢迎大家加入!

如果内容对大家有所帮助,感谢鼓励!实现我小时候一人给我一块钱的美梦,哈哈!

poi-tl实现word文档按模板下载相关推荐

  1. Java poi实现合并word文档,兼容图片合并(java实现word导出)

    需求,今天有个需求,实现word文档批量导出,并附带图片,这里的批量导出是指导出一份word文档存在多分相同类型的数据. 实现方式,定义一份word文档模板,使用占位符方式来替换文本内容. 问题,怎么 ...

  2. java后台利用模板生成Word文档提供前台下载

    2016.12.06更新,java后台利用Apache poi生成Excel文档提供前台下载,博客链接http://blog.csdn.net/u010251278/article/details/5 ...

  3. Apache POI 密码保护只读word文档在WPS中无效

    Apache POI 密码保护只读word文档在WPS中无效 最近项目有个要求就是从系统下载的WORD文档需要进行密码保护,防止篡改.于是很自然地想到了用POI去加入只读模式然后用密码保护: XWPF ...

  4. word文档封面免费下载_为Word 2007文档添加封面

    word文档封面免费下载 I've been using Microsoft Word since 1985, starting with Word for Mac and eventually mo ...

  5. 使用PHPWord把html转成word文档并支持下载

    在开发项目中,遇到的需求:把后台录入的数据保存成word文档,以便其他人员使用.于是在调研的时候,从git上找了PHPWord. PHPWord官方文档 PHPWord git地址 一.安装PHPWo ...

  6. Java使用POI实现导出Word文档

    POI官网链接:http://deepoove.com/poi-tl/(方便各位博友后期深入学习) 1.首先导入POM依赖包 <dependency><groupId>com. ...

  7. C#、NPOI生成Word文档(模板)

    项目需要集成word导出,做的时候网上文档资源不是很多,也比较杂乱,所以查了查,整理了整理,做个记录,也顺便把NPOI操作Word文档的一些基本操作分享给有需要的朋友. 本篇包括生成Word对word ...

  8. linux下poi把word转图片,我需要将Apache POI图片从Word文档转换为html文件

    我有一些代码使用Java Apache POI库打开一个Microsoft Word文档,并使用Apache POI将其转换为html,它还会获取文档上图像的字节数组数据.但是我需要将此信息转换为ht ...

  9. PNG图片转换word文档,不用下载软件,免费完成

    PNG格式也是我们工作中常见的图片格式,工作中难免会整理一些PNG图片资料,大家都是怎么做的呢?小编给大家分享一个方法,就是把PNG图片转换word文档,这样就方便我们去整理了,并且无需下载软件就可以 ...

最新文章

  1. HTTP 错误 500.21 - Internal Server Error 解决方案
  2. Android2.3.7源码结构分析
  3. 如何同步FTP服务器文件,ftp服务器文件同步
  4. html 价格列表组件,评价列表ratings组件
  5. 奇淫技巧之整形数组偏移量
  6. uint32是什么数据类型_C++编程基础: 4. 数据类型
  7. oracle 查看远程用户,oracle sysdba用户远程登录
  8. 怎么有效提高执行力?
  9. 微信开发:getLocation签名失效的问题
  10. c++string类寻找子串
  11. 20200815每日一句
  12. Eclipse优化设置技巧
  13. 8、信息隐藏技术:数字水印技术
  14. iphone 与 PC端电脑投屏设置
  15. SEM和SEO的区别
  16. 保存 web.xml 卡
  17. 第一个用python实现的数据化运营分析实例——销售预测
  18. AWS 云计算 SQS SNS
  19. html中背景条纹效果,CSS制作Web页面条纹背景样式的技巧分享
  20. 计算机多用户访问不同磁盘,win10系统实现多账户独享不同盘符的操作方法

热门文章

  1. XUPT 寒假算法集训第一周
  2. android USB OTG功能实现
  3. 电子邮件链接格式html主题,HTML的电子邮件链接标签mailto用法详解
  4. css3直线运动_css3动画--边框线条动画
  5. silverlight beet - 动态设置Clip
  6. beetl的配置文件介绍
  7. R语言时间序列ARIMA新手教程
  8. 黑科技教程——伪装 sn
  9. 设置 COM加载项 启动时加载(及 解决 PDFMaker 文件遗失问题)
  10. python一键安装神器_一键安装python