springboot使用easypoi根据模板导出word。解决本地可以导出。打包到服务器导出报错的问题
最近项目用到了springboot导出word。
使用了这篇博客里的方法 https://blog.csdn.net/Tomwildboar/article/details/89856470
在本地测试使用IDEA运行都是可以导出的。但是打包以后就报如下错误:
cn.afterturn.easypoi.cache.WordCache : java.lang.NullPointerException
具体错误原因是路径不对。打包以后。springboot的路径会变。
找不到模板了。所以就报错。
有两种方法解决。第一种是把word模板文件都保存到服务器上的一个本地磁盘路径下(如桌面)。然后调用ExportWordUtils时写绝对路径:
ExportWordUtils.exportWord("C:/Users/Administrator/Desktop/cgspb.docx","D:/test","XXX.docx",params,request,response);
第二种方法是:使用
WordExportUtil.exportWord07(XWPFDocument document, Map<String, Object> map)方法
原文是使用的第一个方法。用URL做的参数
这时测试类需要修改如下: public void export(HttpServletRequest request, HttpServletResponse response){Map<String,Object> params = new HashMap<>(); params.put("title","这是标题");params.put("name","李四"); //这里是我说的一行代码 InputStream is = this.getClass().getResourceAsStream("/word/cgspb.docx");ExportWordUtils.exportWord(is,"D:/test","XXX.docx",params,request,response); }
工具类需要修改如下:
package com.tianhengyun.dockplatform.utils;import cn.afterturn.easypoi.word.WordExportUtil;
import cn.afterturn.easypoi.word.entity.MyXWPFDocument;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.springframework.util.Assert;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URLEncoder;
import java.util.Map;public class ExportWordUtils {/*** 导出word* <p>第一步生成替换后的word文件,只支持docx</p>* <p>第二步下载生成的文件</p>* <p>第三步删除生成的临时文件</p>* 模版变量中变量格式:{{foo}}** @param is word模板文件流* @param temDir 生成临时文件存放地址* @param fileName 文件名* @param params 替换的参数* @param request HttpServletRequest* @param response HttpServletResponse*/public static void exportWord(InputStream is, String temDir, String fileName, Map<String, Object> params, HttpServletRequest request, HttpServletResponse response) {Assert.notNull(is, "模板不能为空");Assert.notNull(temDir, "临时文件路径不能为空 ");Assert.notNull(fileName, "导出文件名不能为空 ");Assert.isTrue(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(is);WordExportUtil.exportWord07(doc, params);String tmpPath = temDir + fileName;FileOutputStream fos = new FileOutputStream(tmpPath);doc.write(fos);// 设置强制下载不打开response.setContentType("application/force-download");// 设置文件名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();}
}
springboot使用easypoi根据模板导出word。解决本地可以导出。打包到服务器导出报错的问题相关推荐
- asp.net 导出word excel 当前上下文中不存在名称“Encoding”报错问题
======web页面============= <%@ Page Language="C#" EnableEventValidation="false" ...
- springboot导入项目依赖报错_如何解决spring boot 项目导入依赖后代码报错问题
如何解决spring boot 项目导入依赖后代码报错问题 2020-08-15 14:17:18 代码截图如图所示(由于本人问题已经解决,没来得及截图,所以在网上找了一张图片) 针对图中所示的 ...
- 解决使用requests_html模块,html.render()下载chromium报错、速度慢问题
解决使用requests_html模块,html.render()下载chromium报错.速度慢问题 参考文章: (1)解决使用requests_html模块,html.render()下载chro ...
- 解决vs2015使用fopen、fprintf等函数报错的问题
解决vs2015使用fopen.fprintf等函数报错的问题 参考文章: (1)解决vs2015使用fopen.fprintf等函数报错的问题 (2)https://www.cnblogs.com/ ...
- 解决使用mybatis分页插件PageHelper的一个报错问题
解决使用mybatis分页插件PageHelper的一个报错问题 参考文章: (1)解决使用mybatis分页插件PageHelper的一个报错问题 (2)https://www.cnblogs.co ...
- 解决Windows下运行php Composer出现SSL报错的问题
解决Windows下运行php Composer出现SSL报错的问题 2015-01-14 20:05 在windows下运行composer却出现SSL报错: E:\www>php -f co ...
- 解决“(1146, “Table ‘mydb.django_session‘ doesn‘t exist“)”报错的方法
解决"(1146, "Table 'mydb.django_session' doesn't exist")"报错的方法 参考文章: (1)解决"(1 ...
- 解决CPLEX安装后无法运行代码,报错乱码(错误显示:ÔËÐÐÅäÖá°配置 1¡±²»´æÔڡ£)
解决CPLEX安装后无法运行代码,报错乱码(错误显示:ÔËÐÐÅäÖá°配置 1¡±²»´æÔڡ£) CPLEX错误显示如下: 解决方法: 重命名"配置 1"为"Conf ...
- 解决Docker添加Docker官方的GPG密钥报错gpg: can‘t open ‘–‘: No such file or directory
解决Docker添加Docker官方的GPG密钥报错gpg: can't open '–': No such file or directory ubuntu下载安装docker添加Docker官方的 ...
- 已解决(from docx import Document导包报错)ModuleNotFoundError: No module named ‘exceptions‘
已解决(from docx import Document导包报错)ModuleNotFoundError: No module named 'exceptions' 文章目录 报错代码 报错翻译 报 ...
最新文章
- Day_04-数组,元组,列表
- 计网 - TCP 实战:如何进行 TCP 抓包调试?
- 进击的 Spring Cloud Alibaba —— 框架与服务
- 跨域上传图片的尝试过程,最终成功了--- 转载
- python图片显示中文
- python教程1003无标题_OSError:[WinError 10038]试图对非s的对象执行操作
- mybatis 调用 oracle函数_从Oracle到PG 该做的改造工作一个都不能少!
- 如何使用Kdiff3作为GIT merge图形化工具
- word引用 html文件路径,Word怎么引用网页文档
- 基于注意力对抗生成网络的AlphaFold从氨基酸序列建立三维蛋白质结构
- win7升级win10正式版_win7升级win10数据是否会丢失?
- current account(经常账户)
- 好用的记事提醒软件,手机记事提醒便签下载
- 笔记本当服务器显示器怎么连接,笔记本连接显示器,详细教您笔记本怎么连接显示器...
- 左除与右除的区别--MATLAB
- 【习题35】交互程序三 + 汉化版
- WEB中文字体应用指南
- ZYNQ7000引脚-个人理解
- 在Android上设置imageview的透明背景
- 今日头条在线检测文章原创度,保障创作独特性!