当前位置: 首页 > news >正文

java下载word

需要引入word模板的依赖,pom增加如下jar报包依赖

    <!--word模板--><dependency><groupId>com.deepoove</groupId><artifactId>poi-tl</artifactId><version>1.9.1</version></dependency>

但测试的时候发现,word模板填充时报错

com.deepoove.poi.exception.ResolverException: Compile template failed
    at com.deepoove.poi.XWPFTemplate.compile(XWPFTemplate.java:116)
    at cn.org.bjca.ywq.his.ca.controller.OrderInfoController.renderTemplate(OrderInfoController.java:307)
    at cn.org.bjca.ywq.his.ca.controller.OrderInfoController.downloadCaReport(OrderInfoController.java:286)
    at cn.org.bjca.ywq.his.ca.controller.OrderInfoController$$FastClassBySpringCGLIB$$5f1b3564.invoke(<generated>)
    at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)
    at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:771)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)
    at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:749)
    at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:95)

Caused by: java.io.IOException: ZIP entry size is too large or invalid
    at org.apache.poi.openxml4j.util.ZipArchiveFakeEntry.<init>(ZipArchiveFakeEntry.java:43)
    at org.apache.poi.openxml4j.util.ZipInputStreamZipEntrySource.<init>(ZipInputStreamZipEntrySource.java:53)
    at org.apache.poi.openxml4j.opc.ZipPackage.<init>(ZipPackage.java:106)
    at org.apache.poi.openxml4j.opc.OPCPackage.open(OPCPackage.java:307)
    at org.apache.poi.ooxml.util.PackageHelper.open(PackageHelper.java:47)
    at org.apache.poi.xwpf.usermodel.XWPFDocument.<init>(XWPFDocument.java:142)

搜了各种资料,原来maven打包时把resource下的word模板压缩了,导致读取模板文件时失败了。

完整的word模板和下载程序如下:

  @RequestMapping(value = "/downloadDocx", method = RequestMethod.GET)public void downloadDocx(HttpServletResponse response) {//根据业务查询数据,并组装模板中要替换的params,这里也可以使用guava工具类直接将java dto转换成mapMap<String, Object> params = new HashMap<>();
try {//模板放在项目的 resource目录下的templates目录,模板里需要替换的变量使用EL表达式标识,比如 {{userName}}   在params中有个key为userName的ClassPathResource resource = new ClassPathResource("templates\\test.docx");XWPFTemplate template = renderTemplate(resource.getStream(), params);response.setContentType("application/octet-stream;charset=utf-8");response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode("test", StandardCharsets.UTF_8.name()) + ".docx");try (OutputStream out = response.getOutputStream()) {template.writeAndClose(out);} catch (IOException e) {logger.error("io异常", e);}} catch (Exception e) {logger.error("下载docx异常", e);}}/*** 模板替换* @param templateInputStream* @param dataMap* @return*/
private XWPFTemplate renderTemplate(InputStream templateInputStream, Map<String, Object> dataMap) {ConfigureBuilder configureBuilder = Configure.builder().useSpringEL()  // 启用Spring EL表达式 模板中使用 {{}} {{userName}}.bind("dataTable", new HackLoopTableRenderPolicy());  // 设置循环策略Configure config = configureBuilder.build();return XWPFTemplate.compile(templateInputStream, config).render(dataMap);}

参考:java.io.IOException: ZIP entry size is too large or invalid-CSDN博客

http://www.dtcms.com/a/310514.html

相关文章:

  • 第七章 愿景14 数据规划
  • 吃透 B + 树:MySQL 索引的底层逻辑与避坑指南
  • SpringMVC全局异常处理+拦截器使用+参数校验
  • Bootstap Vue 之b-form-radio-group 不显示选中状态问题
  • 高并发爬虫的限流策略:aiohttp实现方案
  • 8.1 开始新的学习历程
  • 深入理解 Linux 进程地址空间
  • 一体化智能截流井市场报告:深度解析行业现状与未来增长潜力
  • 【Dart 教程系列第 51 篇】Iterable 中 reduce 函数的用法
  • Vue2 项目实现 Gzip 压缩全攻略:从配置到部署避坑指南
  • 静电释放检测漏报率↓85%!陌讯多模态融合算法在电子厂ESD防护实战解析
  • 【数据可视化-77】中国历年GDP数据可视化分析:Python + Pyecharts 深度洞察(含完整数据、代码)
  • QT中的window()方法/获取到控件最顶部容器
  • Effective C++ 条款16: 成对使用new和delete时要采用相同形式
  • 1、【C语言】【进阶】数组,指针与退化
  • 【Node.js安装注意事项】-安装路径不能有空格
  • Go 语言中 ​10 个高频实用写法
  • C语言:20250801学习(构造类型)
  • C++___快速入门(下)(引用)
  • Linux基础 -- 内核快速向用户态共享内核变量方案之ctl_table
  • 大模型学习思路推荐!
  • 基于K近邻的缺失值填补:原理、步骤与实战解析
  • Winform 中实现控件与数据的绑定,一方改变另一方同步改变。
  • 【Onvif从零实践】02、Onvif 测试工具(ONVIF Device Test Tool)的 安装、使用 教程
  • C++入门自学Day4-- c++类与对象(友元)
  • JavaScript语法树简介:AST/CST/词法/语法分析/ESTree/生成工具
  • 水果忍者经典版:离线版,永久无限制!!
  • IPD数字化的困难与解法
  • 如何在 VMware Workstation 虚拟机中利用 Nvidia 显卡的硬件加速功能
  • 利用 AI 在 iPhone 上实现 App 文本情绪价值评估(下)