spring boot +word 模板下载
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 模板下载相关推荐
- Spring Boot - Thymeleaf模板简介以及集成
文章目录 Spring Boot - Thymeleaf模板简介以及集成 1.什么是Thymeleaf? 2.标准表达式 2.1 变量表达式 2.2 选择表达式/星号表达式 2.3 URL表达式 2. ...
- 后端开发实践——Spring Boot项目模板
在我的工作中,我从零开始搭建了不少软件项目,其中包含了基础代码框架和持续集成基础设施等,这些内容在敏捷开发中通常被称为"第0个迭代"要做的事情.但是,当项目运行了一段时间之后再来反 ...
- 软件架构-Spring boot集成模板引擎swagger2实现
上次说过springboot其实就是一个CI工具,如何体验出来CI的作用就是持续集成,它可以集成各种的工具,这里说说关于模板的集成引擎和Swagger. (一)Spring boot 集成模板引擎实现 ...
- Spring boot装载模板代码工程实践问题
Spring boot装载模板代码工程实践问题 动态化补充 @KafkaListener 其它问题 JDK版本问题及解决 动态编译失败,出现程序包无法找到问题 Spring boot装载模板代码工程中 ...
- spring boot 根据模板导出word功能实现,包含html内容,及office打开乱码问题的解决!!!
使用freemark来实现 yml配置文件: template-loader-path: classpath:/templates/ftl/ 这个是配置模板所在的位置 这里的配置要是带"/& ...
- 后端开发实践:Spring Boot项目模板
点击上方 好好学java ,选择 星标 公众号 重磅资讯.干货,第一时间送达今日推荐:2020年7月程序员工资统计,平均14357元,又跌了,扎心个人原创100W+访问量博客:点击前往,查看更多 作者 ...
- 后端开发实践:Spring Boot项目模板,拿去用吧!
点击上方 好好学java ,选择 星标 公众号 重磅资讯.干货,第一时间送达 今日推荐:干掉 Navicat:这个 IDEA 的兄弟真香!个人原创100W+访问量博客:点击前往,查看更多 作者:无知者 ...
- Spring Boot整合模板引擎jsp
为什么80%的码农都做不了架构师?>>> jsp也算是一种模板引擎吧.整合jsp前,先说一下运行SpringBoot项目的几种方式 1. 运行SpringBoot项目的几种方式 ...
- spring boot源码下载地址
github下载: https://github.com/spring-projects/spring-boot/tree/1.5.x git地址: https://github.com/spring ...
最新文章
- Redis重要文档、数据结构、操作行为
- 3d点击_gooood合辑:3D打印 | 精选全部3D打印案例
- XCTF_Web_新手练习区:simple_php
- oracle sql 分页
- 九章算术卷第三 衰分
- 2022年化工自动化控制仪表国家题库及答案
- 相信我,我们离成为废物阶级不远了!
- 大数据人工智能常用特征工程与数据预处理Python实践(2)
- 随笔---为什么一到选课时教务系统就卡顿甚至登不上去
- SFDC数据导出的几种方式
- 【课程学习】(中国大学MOOC)武汉理工大学高级人工智能原理与技术课后习题笔记(1-5章)
- 洛克菲勒家族是如何发家的,我们都看看
- java分页导出excel_报表中利用API来实现导出excel列后分页
- css 渐变 椭圆,CSS图形基础:利用径向渐变绘制图形
- Linux安装SQuirreL SQL Client
- grep -v grep
- 【已解决】java.lang.annotation.AnnotationFormatError: Invalid default: public abstract java.lang.Class or
- 【2023-03-07】携程春招笔试四道编程题
- Cannot GET / 错误解决
- K-verse 小型活动来袭!