网上有很多关于使用XDocReport导出Word的文章,都差不多试用了一下,也看了一些评论,发现实现功能的过程当中大家还是会出现各种问题。现在我来把我自己实现的过程说一下,顺便总结一下会出现的问题怎么样解决。

一、集成环境

        目前我用的SSM框架是maven工程创建的,只要在pom.xml文件当中配置,自动下载到本地maven仓库即可。

<dependency><groupId>fr.opensagres.xdocreport</groupId><artifactId>fr.opensagres.xdocreport.core</artifactId><version>2.0.2</version>
</dependency>
<dependency><groupId>fr.opensagres.xdocreport</groupId><artifactId>fr.opensagres.xdocreport.document</artifactId><version>2.0.2</version>
</dependency>
<dependency><groupId>fr.opensagres.xdocreport</groupId><artifactId>fr.opensagres.xdocreport.template</artifactId><version>2.0.2</version>
</dependency>
<dependency><groupId>fr.opensagres.xdocreport</groupId><artifactId>fr.opensagres.xdocreport.document.docx</artifactId><version>2.0.2</version>
</dependency>
<dependency><groupId>fr.opensagres.xdocreport</groupId><artifactId>fr.opensagres.xdocreport.template.freemarker</artifactId><version>2.0.2</version>
</dependency>
<dependency><groupId>org.freemarker</groupId><artifactId>freemarker</artifactId><version>2.3.23</version>
</dependency>

         目前我的项目里面已经集成了io和poi,如果需要的话也需要加上,我这里就不做赘述。

<dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>2.5</version>
</dependency>

二、制作模板

        这里注意wps和office有点不同:

         1、office编辑域的界面

        

        2、wps编辑域的界面

三、编写代码

package com.alibaba.controller;import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;import com.fitech.jgbbvalidate.vo.Goods;import fr.opensagres.xdocreport.core.XDocReportException;
import fr.opensagres.xdocreport.document.IXDocReport;
import fr.opensagres.xdocreport.document.registry.XDocReportRegistry;
import fr.opensagres.xdocreport.template.IContext;
import fr.opensagres.xdocreport.template.TemplateEngineKind;
import fr.opensagres.xdocreport.template.formatter.FieldsMetadata;@RestController
public class ExportWordController {@GetMapping("jgbb/exportWord")public void generateWord() throws IOException, XDocReportException {//获取Word模板,模板存放路径在项目的resources目录下InputStream ins = new FileInputStream("D:\\123.docx");//注册xdocreport实例并加载FreeMarker模板引擎IXDocReport report = XDocReportRegistry.getRegistry().loadReport(ins,TemplateEngineKind.Freemarker);//创建xdocreport上下文对象IContext context = report.createContext();//创建要替换的文本变量context.put("city", "北京市");context.put("startDate", "2020-09-17");context.put("endDate", "2020-10-16");context.put("totCnt", "3638763");context.put("totAmt", "6521");context.put("onCnt", "2874036");context.put("onAmt", "4768");context.put("offCnt", "764727");context.put("offAmt", "1753");context.put("typeCnt", "36");List<Goods> goodsList = new ArrayList<Goods>();Goods goods1 = new Goods();goods1.setNum("1");goods1.setType("臭美毁肤");goods1.setSv("675512");goods1.setSa("589");goodsList.add(goods1);context.put("goods", goodsList);//创建字段元数据FieldsMetadata fm = report.createFieldsMetadata();//Word模板中的表格数据对应的集合类型fm.load("goods", Goods.class, true);//输出到本地目录FileOutputStream out = new FileOutputStream(new File("D://商品销售报表1.docx"));report.process(context, out);}}

代码上面我说两点我遇到的问题:

1、InputStream ins = this.getClass().getResourceAsStream("/模板.docx");有的博主会用到这个来获取word模板文档,模板存放路径在项目的resources目录下,这就会遇到找不到模板文档的情况,就会报错:

fr.opensagres.xdocreport.core.XDocReportException: Impossible to create report for the input stream. The report loader supports only [docx] files type.

所以我直接把模板文档放到了D盘,因为在实际项目部署也是在服务器上的。

InputStream ins = new FileInputStream("D:\\123.docx");

2、第二个问题就是:

在生成表格的时候因为设置的模板原因,在创建Goods对象的时候有int类型的也会报错,得把属性变成String就可以了。

public class Goods {String num;String type;String sv;String sa;public String getNum() {return num;}public void setNum(String num) {this.num = num;}public String getType() {return type;}public void setType(String type) {this.type = type;}public String getSv() {return sv;}public void setSv(String sv) {this.sv = sv;}public String getSa() {return sa;}public void setSa(String sa) {this.sa = sa;}
}

        以上就是我在实现导出word文档的时候遇到的问题 ,希望对你们有所帮助,如果有什么问题可以私聊我,想要代码和模板文档也可以问我要!

SSM框架集成导出Word文档功能 XDocReport +FreeMarker相关推荐

  1. 【Java实现导出Word文档功能 XDocReport +FreeMarker】

    Java实现导出Word文档功能(XDocReport +FreeMarker) 前言 在日常的开发工作中,我们时常会遇到导出Word文档报表的需求,比如公司的财务报表.医院的患者统计报表.电商平台的 ...

  2. 思维导图软件MindManager导出Word文档功能详解

    Mindmanager思维导图软件作为一款能与Microsoft office软件无缝集成的思维导图软件,支持Word文档的快速导入与导出,并支持Word文档的目录生成.模板套用等,极大地方便了用户完 ...

  3. java循环导出word文档_Java使用freemarker导出word文档

    通过freemarker,以及JAVA,导出word文档. 共分为三步: 第一步:创建模板文件 第二步:通过JAVA创建返回值. 第三步:执行 分别介绍如下: 第一步: 首先创建word文档,按照想要 ...

  4. Springboot 项目导出word文档(文档内容包括数据以及服务器图片)

    Springboot 项目freemarker导出word文档(文档内容包括数据以及服务器图片) 前些天有需求要完成导出word文档功能,基础数据导出word文档,网上也能搜到很多源代码,但是我这边要 ...

  5. vue 生产word_nodejs(officegen)+vue(axios)在客户端导出word文档

    前言 我的项目中有一个需求:点击按钮生成可编辑的word文档订单详情的信息 我使用的前端框架是Vue.js.后台使用的是node.js node.js生成和导出word文档我参考的是下面这两篇文章,写 ...

  6. 利用docx4j完美导出word文档(标签替换、插入图片、生成表格)

    最近公司让我实现一个利用原有word模板,导出word文档的功能模块,发现docx4j是个很不错的工具,但是之前从来没有用过,对此并不了解,于是上网查找相关资料,也是非常少之,于是便自己开始摸索. 1 ...

  7. PHP导出word文档的简单实现方法(可导出图片)

    这是看了网上几篇关于PHP导出word文档的文章之后,本人改进一下的方法,可以导出带图片的,以下是demo. $row = M('Article')->where(array('id'=> ...

  8. freemarker导出word文档——WordXML格式解析

    前不久,公司一个项目需要实现导出文档的功能,之前是一个同事在做,做了3个星期,终于完成了,但是在项目上线之后却发现导出的文档有问题,此时,这个同事已经离职,我自然成为接班者,要把导出功能实现,但是我看 ...

  9. 如何导出word文档

    前言 一般导出word,是后台做的功能,如果确实需要前端做,可以借助jQuery的wordexport.js导出word文档 提示:以下是本篇文章正文内容,下面案例可供参考 一.使用步骤 1.引入文件 ...

最新文章

  1. mybatis逆向工程配置文件怎么再偷懒(懒出天际)
  2. 计算机考研深圳大学和广东工业大学,报考人数过万!这些院校已成为考研“重灾区”...
  3. android StringBuffer实现换行
  4. NgRx store.dispatch方法的单步调试
  5. Python通过amqp消息队列协议中的Qpid实现数据通信
  6. 作业优先调度java代码_如何在触发它时在java代码中为hadoop作业设置优先级?
  7. 数据结构与算法--面试必问AVL树原理及实现
  8. php files得不到导入的文件,PHP判断文件是否被引入的方法get_included_files用法示例...
  9. Lync Server 2010所需媒体网络流量带宽详解和计算
  10. python爬取js动态网页_Python 爬取网页中JavaScript动态添加的内容(一)
  11. clone git 要输入yes_GitHub,git与python连接使用
  12. shell制表与脚本运行进度条写法
  13. 小学生都能听懂的傅里叶变换讲解
  14. Asterisk 11 chan_sip.c: Failed to authenticate device 看不到IP的问题
  15. 思科交换机接口配置trunk_思科交换机配置TRUNK的主要步骤
  16. php四段拼接ip,合并相同的ip段算法
  17. python中几种去重的方法
  18. 奔驰S400商务型升级前排通风座椅系统,夏天必备的功能
  19. android gps locationCb 数据
  20. 采购订单管理的四种常见类型

热门文章

  1. scrapy快速入门
  2. 深度可分离卷积(Xception 相关)
  3. web3默克尔树MerleTree白名单校验
  4. 开源Jabber(XMPP) IM服务器介绍
  5. sc不是内部命令或外部命令
  6. mac os终端设置
  7. 技术人的管理学-业务管理
  8. 2020车载凯立德懒人包下载_华为HarmonyOS App开发工具DevEco Studio下载安装及第一个HarmonyOS App实战教程...
  9. 大数据之路 阿里巴巴大数据实践 读书笔记
  10. matlab中polyval与polyvalm函数的区别