一:进行模板创建

我们要进行模板导出的话 需要首先将前台的数据传到后台再解析成流文件存储到相应位置,但是要将word以模板格式进行导出的话,我借助了freemark模板殷勤来进行实现,

我们需要在项目开始前,导入maven依赖

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>

然后找出我们需要的模板

首先需要一份想要导出的模板,通过office软件转换成xml格式 (一定要根据office 不是wps toon过“另存为”的方式转换格式不能手动更改拓展名来进行格式转换;

之后将xml文件放入到项目里面,我放到了 word导出对应的包下,并将其扩展名改为.ftl,使得该模板文件可以被模板殷勤识别并应用。

jpg是模板导出需要用到的图片,只有红色箭头标注的是本项目必须的文件 其余几个可以忽略,当然图片和导出样例.ftl  可以自己放到别的  写对他们的路径就可以(我放在了别处这只是演示)。

二:进行文件导出的工具类的创建

工具类的作用包含 编码文件名、获取下载/导出路径、进行模板导出的处理

编码文件名:

UUID.randomUUID 这个方法是给文件加上一个唯一字符串 防止文件名称重复 导致的比如数据覆盖等错误。 filename是自定义的文件名称

/*** 编码文件名*/public static String encodingFilename(String filename) {filename = UUID.randomUUID().toString() + "_" + filename + ".doc";return filename;}

获取下载路径 定义好要将该文档导出到哪一个文件里面 设置文件导出路径

代码解释:

NiuaConfig。getDownloadPath()是我采用的框架的自定义方法不通用,作用是获取到导出文件存储的根路径:“D://code/download//” 这都是可以自己定义的甚至不用方法直接写上去也可以。

if判断是根据我的方法来的 防止服务器没有该文件夹 进行自动创建。

/*** 获取下载路径** @param filename 文件名称*/public static String getAbsoluteFile(String filename) {String downloadPath = NiuaConfig.getDownloadPath() + filename;File desc = new File(downloadPath);if (!desc.getParentFile().exists()) {desc.getParentFile().mkdirs();}return downloadPath;}

模板导出核心方法:

代码解释

在准备数据这一块 采用的是map 根据freemark里面加了$符号的变量进行的赋值

采用map的赋值格式:

前面的是实体类的字段名,后面是想要对其进行的赋值。

dataMap.put("classPath", "com.freemark.hello");
dataMap.put("className", "AutoCodeDemo");

如:ftl里面${topScore.goodScoreMin} 在map里面为其赋值 就会在相应的模板里面进行显示

核心类代码:

public static ResultJson exportWordDoc(Map<String, Object> data, String wordName) throws IOException, TemplateException {/** 初始化配置文件 **/Configuration configuration = new Configuration(Configuration.DEFAULT_INCOMPATIBLE_IMPROVEMENTS);/** 设置编码 **/configuration.setDefaultEncoding("utf-8");/** 我的ftl文件是放在D盘的**/String fileDirectory = NiuaConfig.getFtlPath();//String fileDirectory = "D:\\niua-dev\\niua-admin\\src\\main\\resources\\word";/** 加载文件 **/configuration.setDirectoryForTemplateLoading(new File(fileDirectory));/** 加载模板 **/Template template = configuration.getTemplate("导出样例.ftl");/** 准备数据 **/Map<String, Object> dataMap;dataMap = data;String fileName = encodingFilename(wordName);/** 指定输出word文件的路径 **/String outFilePath = getAbsoluteFile(fileName);File docFile = new File(outFilePath);FileOutputStream fos = new FileOutputStream(docFile);Writer out = new BufferedWriter(new OutputStreamWriter(fos, "utf-8"), 10240);template.process(dataMap, out);if (out != null) {out.close();}return ResultJson.ok(fileName);}

对于word模板中图片处理 在对mapdata进行赋值的时候 根据图片的url将其转换为输入流数据,放入mapdata中

public static String getImageStr(String imgUrl) {imgUrl = NiuaConfig.getProfile() + "\\" + "upload" + "\\" +imgUrl;InputStream in = null;byte[] data = null;try {in = new FileInputStream(imgUrl);data = new byte[in.available()];in.read(data);in.close();} catch (IOException e) {e.printStackTrace();}BASE64Encoder encoder = new BASE64Encoder();return encoder.encode(data);}

三:对于 datamap中的数据 、导出word中的数据 、以及导出样例ftl 相互对应关系

datamap:

这里的data采用了map存储,

data:

data.put("number", number);

key value格式我就不介绍了 记住这个number 再ftl文件里面通过${number} 来对其进行值的读取,保存在word文件上

ftl:

word:

对应的考生编号就会根据number进行显示出来。

如果对应的表格需要用到多行一样的格式,这时候需要采用 freemark的遍历list方法。

eg:

运用freemark引擎的word模板导出相关推荐

  1. SpringBoot集成文件 - 如何基于POI-tl和word模板导出庞大的Word文件?

    前文我们介绍了通过Apache POI通过来导出word的例子:那如果是word模板方式,有没有开源库通过模板方式导出word呢?poi-tl是一个基于Apache POI的Word模板引擎,也是一个 ...

  2. poi-tl,根据word模板导出word(表格行循环,表格无表头的情况)

    最近项目里要做一个根据客户提供的word模板导出word的功能,方法有很多,比如easyPoi(对word的支持并不是很好),freeMark(太麻烦不想研究),以及poi-tl, 最后研究了半天发现 ...

  3. 8、jeecg 笔记之 自定义word 模板导出(一)

    8.jeecg 笔记之 自定义word 模板导出(一) 1.前言 jeecg 中已经自带 word 的导出导出功能,其所使用的也是 easypoi,尽管所导出的 word 能满足大部分需求, 但总是有 ...

  4. SpringBoot+EasyPOI word模板导出,含多张图片

    这几天客户提出了新的需求,要求记录要能够导出word,并且里面包含的图片也要导出来,这里借用EasyPOI来进行操作. 参考文章:https://blog.csdn.net/qq_34752942/a ...

  5. Net Core DocXCore 实现word模板导出

    实际工作中,往往有这样的需求,需要导出word,还有各种各样的样式,于是有了word模板导出. 实现以下几个需求: 1.表单导出 2.表格导出 3.表单表格混合导出 4.实际用例测试 解决方案: 实现 ...

  6. 在docxtemplater 和 open-docxtemplater-image-module按word模板导出图片 遇到个坑记录下

    在docxtemplater 和 open-docxtemplater-image-module按word模板导出图片 遇到个坑记录下 主要是一直提示 Cannot read property 'pa ...

  7. Java按照word模板导出、下载文档

    在日常的开发工作中,我们时常会遇到导出Word文档报表的需求,比如公司的财务报表.医院的患者统计报表.电商平台的销售报表等等. 导出Word方式多种多样,通常有以下几种方式: 1. 使用第三方Java ...

  8. java word导出表格_Java Word模板导出包含表格单元格合并

    java通过freemarker导出word循环合并表格单元格 本文主要讲解通过freemarker模板引擎来导出word,并且在word中包含表格的合并部分需要循环生成. 一.Java需要通过模板导 ...

  9. java 导出word,java根据提供word模板导出word文档

    本文主要讲解,利用poi-tl在word中动态生成表格行,进行文字.图片填充.一共提供了两种方式,1.基于本地文件 2.基于网络文件 本文讲解思路,1.先看示例,2. 示例对应的代码展示 3. 基本概 ...

  10. 用word模板导出word文档

    项目需求要把页面上的分析结果导出为word文档,实现的办法是POI.查了一下网上很多方式都采用FreeMark,自己认为比较麻烦,所以还是采取了POI导出.之前的框架是SSH的,现在换成了Spring ...

最新文章

  1. 取java.sql.date日期_JAVA 处理时间 - java.sql.Date、java.util.Date与数据库中的Date字段的转换方法[转]...
  2. oracle 隐藏视图定义,【学习笔记】show hidden parameter 创建查看隐藏参数视图
  3. python 文件操作 os.mkdir()函数
  4. 【感想文】找到自己的兴趣所在,坚持下去。写文章,学习,我的坚持。
  5. html5 --- IDBDatabase创建对象存储和索引
  6. Android日志[进阶篇]三-Logcat 命令行工具
  7. Java面向对象16种原则
  8. http_build_query()就是将一个数组转换成url 问号?后面的参数字符串,并且会自动进行urlencode处理,及它的逆向函数...
  9. Oracle MySQL sql 列转行 union all 实现
  10. 【MongoDB】索引属性 之 唯一索引
  11. 关于Cookie在顶级域名、二级域名和三级域名之间共享的情况
  12. Java多线程入门一
  13. kubernetes pod NodeLost 分析
  14. java file 只读_Java如何设置文件为只读?
  15. win7开机后资源管理器未响应或者停止问题
  16. OutLook中添加、取消送信者禁止
  17. Oxygen Eclipse安装Java EE
  18. Centos7使用Docker部署Chemex资产管理系统
  19. 【RTSP/RTP/RTCP/SDP】协议详解
  20. 用JavaScript获取网页中的js、css、Flash等文件

热门文章

  1. 苹果个人开发者账号出售_苹果开发者账号被调查血泪史总结
  2. 察举科目-汉代察举制度的重要环节
  3. pt达人教你如何用pttools批量刷新pt站点数据
  4. 为什么我的 WordPress 网站被封了?
  5. R 回归 虚拟变量na_互助问答第30期:工具变量、GARCH模型操作和多项选择效信度...
  6. SSD-tensorflow-1 demo
  7. windows网络和共享中心“查看基本网络信息并设置连接”为“未知”的解决方案
  8. 浙江日报软件测试怎么样,浙江日报
  9. PCI Express 2D 多媒体显卡_IOEHM-GC_V1.0 Mini-PCIe 显卡_嵌入式行业图像显示_视频加速和2D加速功能
  10. windowsPE系统的制作