1.导入poi坐标

  <!-- word --><dependency><groupId>cn.afterturn</groupId><artifactId>easypoi-base</artifactId><version>3.0.3</version></dependency><dependency><groupId>cn.afterturn</groupId><artifactId>easypoi-web</artifactId><version>3.0.3</version></dependency><dependency><groupId>cn.afterturn</groupId><artifactId>easypoi-annotation</artifactId><version>3.0.3</version></dependency>

2.创建导出word 工具类(可自行修改导出工具类,我这里就将临时文件注释掉了)。注意这里一定要设置,不然会报其他异常。 response.setContentType(“application/msword”);//导出word格式

`public class ExportWordUtils {/*** 导出word* <p>第一步生成替换后的word文件,只支持docx</p>* <p>第二步下载生成的文件</p>* <p>第三步删除生成的临时文件</p>* 模版变量中变量格式:{<!-- -->{foo}}* @param templatePath word模板地址* @param temDir 生成临时文件存放地址* @param fileName 文件名* @param params 替换的参数* @param request HttpServletRequest* @param response HttpServletResponse*/public static void exportWord(InputStream templatePath, String temDir, String fileName, Map<String, Object> params, HttpServletRequest request, HttpServletResponse response) {// AssertUtil.isNotNull(templatePath,"模板路径不能为空");AssertUtil.isNotNull(temDir,"临时文件路径不能为空");AssertUtil.isNotNull(fileName,"导出文件名不能为空");AssertUtil.isNotTrue(fileName.endsWith(".docx"),"word导出请使用docx格式");if (!temDir.endsWith("/")){temDir = temDir + File.separator;}File dir = new File(temDir);if (!dir.exists()) {dir.mkdirs();}try {String userAgent = request.getHeader("user-agent").toLowerCase();if (userAgent.contains("msie") || userAgent.contains("like gecko")) {fileName = URLEncoder.encode(fileName, "UTF-8");} else {fileName = new String(fileName.getBytes("utf-8"), "ISO-8859-1");}MyXWPFDocument doc = new MyXWPFDocument(templatePath);WordExportUtil.exportWord07(doc, params);//XWPFDocument doc = WordExportUtil.exportWord07(templatePath, params);// 临时文件暂时注释掉/*   String tmpPath = temDir + fileName;FileOutputStream fos = new FileOutputStream(tmpPath);doc.write(fos);*/// 设置强制下载不打开request.setCharacterEncoding("utf-8");response.setContentType("application/msword");//导出word格式//response.setContentType("application/force-download");response.addHeader("Content-Disposition", "attachment;filename=" +new String((fileName).getBytes(),"UTF-8"));// 设置文件名// response.addHeader("Content-Disposition", "attachment;fileName=" + fileName);OutputStream out = response.getOutputStream();doc.write(out);out.close();} catch (Exception e) {e.printStackTrace();} finally {delFileWord(temDir,fileName);//这一步看具体需求,要不要删}}/*** 删除零时生成的文件*/public static void delFileWord(String filePath, String fileName){File file =new File(filePath+fileName);File file1 =new File(filePath);file.delete();file1.delete();}
}

3.将模板引入到项目中,注意存放的位置,一般都是在resources底下。
模板有两种方式,一种是直接放在项目中,另一种是读取服务器中的地址,该案例演示的是放在项目中。
读取服务器的话需要将下载工具类路径改为String 类型。然后修改下载demo中的filePath为文件所在路径。

4.创建测试类,进行接口测试;注意模板路径一定要在word前加上/,这样才能找到模板,不让路径会报空指针异常。

    @ApiOperation(value = "word模板下载", notes = "word模板下载")@GetMapping("/word/demo/export")public void wordExport(HttpServletRequest request, HttpServletResponse response) throws IOException {Map<String,Object> params = new HashMap<>();params.put("title","这是标题");params.put("name","张三");//模板路径// String filePath = "C:\\Users\\DELL\\Desktop\\demo.docx";String filePath = "/word/demo.docx";InputStream is = this.getClass().getResourceAsStream(filePath);//这里是我说的一行代码ExportWordUtils.exportWord(is,"D:/test","aaa.docx",params,request,response);}

5.后记:实际下载中的问题,在测试的时候导出的文件一直是response,后来才发现要在pom 文件中加入不编译的功能。

  <nonFilteredFileExtensions><nonFilteredFileExtension>xlsx</nonFilteredFileExtension><nonFilteredFileExtension>xls</nonFilteredFileExtension><nonFilteredFileExtension>docx</nonFilteredFileExtension></nonFilteredFileExtensions>

以上整体word下载基本功能完成。

spring boot +word 模板下载相关推荐

  1. Spring Boot - Thymeleaf模板简介以及集成

    文章目录 Spring Boot - Thymeleaf模板简介以及集成 1.什么是Thymeleaf? 2.标准表达式 2.1 变量表达式 2.2 选择表达式/星号表达式 2.3 URL表达式 2. ...

  2. 后端开发实践——Spring Boot项目模板

    在我的工作中,我从零开始搭建了不少软件项目,其中包含了基础代码框架和持续集成基础设施等,这些内容在敏捷开发中通常被称为"第0个迭代"要做的事情.但是,当项目运行了一段时间之后再来反 ...

  3. 软件架构-Spring boot集成模板引擎swagger2实现

    上次说过springboot其实就是一个CI工具,如何体验出来CI的作用就是持续集成,它可以集成各种的工具,这里说说关于模板的集成引擎和Swagger. (一)Spring boot 集成模板引擎实现 ...

  4. Spring boot装载模板代码工程实践问题

    Spring boot装载模板代码工程实践问题 动态化补充 @KafkaListener 其它问题 JDK版本问题及解决 动态编译失败,出现程序包无法找到问题 Spring boot装载模板代码工程中 ...

  5. spring boot 根据模板导出word功能实现,包含html内容,及office打开乱码问题的解决!!!

    使用freemark来实现 yml配置文件: template-loader-path: classpath:/templates/ftl/ 这个是配置模板所在的位置 这里的配置要是带"/& ...

  6. 后端开发实践:Spring Boot项目模板

    点击上方 好好学java ,选择 星标 公众号 重磅资讯.干货,第一时间送达今日推荐:2020年7月程序员工资统计,平均14357元,又跌了,扎心个人原创100W+访问量博客:点击前往,查看更多 作者 ...

  7. 后端开发实践:Spring Boot项目模板,拿去用吧!

    点击上方 好好学java ,选择 星标 公众号 重磅资讯.干货,第一时间送达 今日推荐:干掉 Navicat:这个 IDEA 的兄弟真香!个人原创100W+访问量博客:点击前往,查看更多 作者:无知者 ...

  8. Spring Boot整合模板引擎jsp

    为什么80%的码农都做不了架构师?>>>    jsp也算是一种模板引擎吧.整合jsp前,先说一下运行SpringBoot项目的几种方式 1. 运行SpringBoot项目的几种方式 ...

  9. spring boot源码下载地址

    github下载: https://github.com/spring-projects/spring-boot/tree/1.5.x git地址: https://github.com/spring ...

最新文章

  1. Redis重要文档、数据结构、操作行为
  2. 3d点击_gooood合辑:3D打印 | 精选全部3D打印案例
  3. XCTF_Web_新手练习区:simple_php
  4. oracle sql 分页
  5. 九章算术卷第三 衰分
  6. 2022年化工自动化控制仪表国家题库及答案
  7. 相信我,我们离成为废物阶级不远了!
  8. 大数据人工智能常用特征工程与数据预处理Python实践(2)
  9. 随笔---为什么一到选课时教务系统就卡顿甚至登不上去
  10. SFDC数据导出的几种方式
  11. 【课程学习】(中国大学MOOC)武汉理工大学高级人工智能原理与技术课后习题笔记(1-5章)
  12. 洛克菲勒家族是如何发家的,我们都看看
  13. java分页导出excel_报表中利用API来实现导出excel列后分页
  14. css 渐变 椭圆,CSS图形基础:利用径向渐变绘制图形
  15. Linux安装SQuirreL SQL Client
  16. grep -v grep
  17. 【已解决】java.lang.annotation.AnnotationFormatError: Invalid default: public abstract java.lang.Class or
  18. 【2023-03-07】携程春招笔试四道编程题
  19. Cannot GET / 错误解决
  20. K-verse 小型活动来袭!

热门文章

  1. 万豪发布后疫情时代餐饮业十大新兴趋势;凯悦旗下中高端酒店品牌逸扉在上海亮相 | 美通企业日报...
  2. SAP-MM-采购申请-价值特性
  3. Acrobat Pro DC破解安装
  4. 【转载】人的一生最后悔什么
  5. java itext html转PDF解决中文无法显示以及base64图片处理
  6. HDU1010 Tempter of the Bone(DFS奇偶剪枝)
  7. 黑马程序员-Java基础:设计模式总结
  8. 疯狂的网络视频版权:业内尝试抱团压低价格
  9. Shoot Game
  10. web渗透-------信息收集