最近项目用到了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。解决本地可以导出。打包到服务器导出报错的问题相关推荐

  1. asp.net 导出word excel 当前上下文中不存在名称“Encoding”报错问题

    ======web页面============= <%@ Page Language="C#" EnableEventValidation="false" ...

  2. springboot导入项目依赖报错_如何解决spring boot 项目导入依赖后代码报错问题

    如何解决spring boot 项目导入依赖后代码报错问题 2020-08-15  14:17:18 代码截图如图所示(由于本人问题已经解决,没来得及截图,所以在网上找了一张图片) ​ 针对图中所示的 ...

  3. 解决使用requests_html模块,html.render()下载chromium报错、速度慢问题

    解决使用requests_html模块,html.render()下载chromium报错.速度慢问题 参考文章: (1)解决使用requests_html模块,html.render()下载chro ...

  4. 解决vs2015使用fopen、fprintf等函数报错的问题

    解决vs2015使用fopen.fprintf等函数报错的问题 参考文章: (1)解决vs2015使用fopen.fprintf等函数报错的问题 (2)https://www.cnblogs.com/ ...

  5. 解决使用mybatis分页插件PageHelper的一个报错问题

    解决使用mybatis分页插件PageHelper的一个报错问题 参考文章: (1)解决使用mybatis分页插件PageHelper的一个报错问题 (2)https://www.cnblogs.co ...

  6. 解决Windows下运行php Composer出现SSL报错的问题

    解决Windows下运行php Composer出现SSL报错的问题 2015-01-14 20:05 在windows下运行composer却出现SSL报错: E:\www>php -f co ...

  7. 解决“(1146, “Table ‘mydb.django_session‘ doesn‘t exist“)”报错的方法

    解决"(1146, "Table 'mydb.django_session' doesn't exist")"报错的方法 参考文章: (1)解决"(1 ...

  8. 解决CPLEX安装后无法运行代码,报错乱码(错误显示:ÔËÐÐÅäÖá°配置 1¡±²»´æÔڡ£)

    解决CPLEX安装后无法运行代码,报错乱码(错误显示:ÔËÐÐÅäÖá°配置 1¡±²»´æÔڡ£) CPLEX错误显示如下: 解决方法: 重命名"配置 1"为"Conf ...

  9. 解决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官方的 ...

  10. 已解决(from docx import Document导包报错)ModuleNotFoundError: No module named ‘exceptions‘

    已解决(from docx import Document导包报错)ModuleNotFoundError: No module named 'exceptions' 文章目录 报错代码 报错翻译 报 ...

最新文章

  1. Day_04-数组,元组,列表
  2. 计网 - TCP 实战:如何进行 TCP 抓包调试?
  3. 进击的 Spring Cloud Alibaba —— 框架与服务
  4. 跨域上传图片的尝试过程,最终成功了--- 转载
  5. python图片显示中文
  6. python教程1003无标题_OSError:[WinError 10038]试图对非s的对象执行操作
  7. mybatis 调用 oracle函数_从Oracle到PG 该做的改造工作一个都不能少!
  8. 如何使用Kdiff3作为GIT merge图形化工具
  9. word引用 html文件路径,Word怎么引用网页文档
  10. 基于注意力对抗生成网络的AlphaFold从氨基酸序列建立三维蛋白质结构
  11. win7升级win10正式版_win7升级win10数据是否会丢失?
  12. current account(经常账户)
  13. 好用的记事提醒软件,手机记事提醒便签下载
  14. 笔记本当服务器显示器怎么连接,笔记本连接显示器,详细教您笔记本怎么连接显示器...
  15. 左除与右除的区别--MATLAB
  16. 【习题35】交互程序三 + 汉化版
  17. WEB中文字体应用指南
  18. ZYNQ7000引脚-个人理解
  19. 在Android上设置imageview的透明背景
  20. 今日头条在线检测文章原创度,保障创作独特性!

热门文章

  1. 如何使用ArcGIS连接Excel表格
  2. 西北工业大学NOJ(C语言)(更新中)
  3. C语言实验——用*号输出字母C的图案 (sdut oj)
  4. 2018年最棒的三篇GAN文章
  5. PowerPoint2010的妙用之截图
  6. html5如何利用rem实现自适应布局,使用Rem布局实现自适应
  7. 第5章 SQL SELECT DISTINCT 语句教程
  8. 企业网安全防范系列之一:MAC地址泛洪攻击
  9. 全角半角 6种空白空格的区别
  10. 淘宝API获得淘口令真实url,网络爬虫系列