运用freemark引擎的word模板导出
一:进行模板创建
我们要进行模板导出的话 需要首先将前台的数据传到后台再解析成流文件存储到相应位置,但是要将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模板导出相关推荐
- SpringBoot集成文件 - 如何基于POI-tl和word模板导出庞大的Word文件?
前文我们介绍了通过Apache POI通过来导出word的例子:那如果是word模板方式,有没有开源库通过模板方式导出word呢?poi-tl是一个基于Apache POI的Word模板引擎,也是一个 ...
- poi-tl,根据word模板导出word(表格行循环,表格无表头的情况)
最近项目里要做一个根据客户提供的word模板导出word的功能,方法有很多,比如easyPoi(对word的支持并不是很好),freeMark(太麻烦不想研究),以及poi-tl, 最后研究了半天发现 ...
- 8、jeecg 笔记之 自定义word 模板导出(一)
8.jeecg 笔记之 自定义word 模板导出(一) 1.前言 jeecg 中已经自带 word 的导出导出功能,其所使用的也是 easypoi,尽管所导出的 word 能满足大部分需求, 但总是有 ...
- SpringBoot+EasyPOI word模板导出,含多张图片
这几天客户提出了新的需求,要求记录要能够导出word,并且里面包含的图片也要导出来,这里借用EasyPOI来进行操作. 参考文章:https://blog.csdn.net/qq_34752942/a ...
- Net Core DocXCore 实现word模板导出
实际工作中,往往有这样的需求,需要导出word,还有各种各样的样式,于是有了word模板导出. 实现以下几个需求: 1.表单导出 2.表格导出 3.表单表格混合导出 4.实际用例测试 解决方案: 实现 ...
- 在docxtemplater 和 open-docxtemplater-image-module按word模板导出图片 遇到个坑记录下
在docxtemplater 和 open-docxtemplater-image-module按word模板导出图片 遇到个坑记录下 主要是一直提示 Cannot read property 'pa ...
- Java按照word模板导出、下载文档
在日常的开发工作中,我们时常会遇到导出Word文档报表的需求,比如公司的财务报表.医院的患者统计报表.电商平台的销售报表等等. 导出Word方式多种多样,通常有以下几种方式: 1. 使用第三方Java ...
- java word导出表格_Java Word模板导出包含表格单元格合并
java通过freemarker导出word循环合并表格单元格 本文主要讲解通过freemarker模板引擎来导出word,并且在word中包含表格的合并部分需要循环生成. 一.Java需要通过模板导 ...
- java 导出word,java根据提供word模板导出word文档
本文主要讲解,利用poi-tl在word中动态生成表格行,进行文字.图片填充.一共提供了两种方式,1.基于本地文件 2.基于网络文件 本文讲解思路,1.先看示例,2. 示例对应的代码展示 3. 基本概 ...
- 用word模板导出word文档
项目需求要把页面上的分析结果导出为word文档,实现的办法是POI.查了一下网上很多方式都采用FreeMark,自己认为比较麻烦,所以还是采取了POI导出.之前的框架是SSH的,现在换成了Spring ...
最新文章
- 取java.sql.date日期_JAVA 处理时间 - java.sql.Date、java.util.Date与数据库中的Date字段的转换方法[转]...
- oracle 隐藏视图定义,【学习笔记】show hidden parameter 创建查看隐藏参数视图
- python 文件操作 os.mkdir()函数
- 【感想文】找到自己的兴趣所在,坚持下去。写文章,学习,我的坚持。
- html5 --- IDBDatabase创建对象存储和索引
- Android日志[进阶篇]三-Logcat 命令行工具
- Java面向对象16种原则
- http_build_query()就是将一个数组转换成url 问号?后面的参数字符串,并且会自动进行urlencode处理,及它的逆向函数...
- Oracle MySQL sql 列转行 union all 实现
- 【MongoDB】索引属性 之 唯一索引
- 关于Cookie在顶级域名、二级域名和三级域名之间共享的情况
- Java多线程入门一
- kubernetes pod NodeLost 分析
- java file 只读_Java如何设置文件为只读?
- win7开机后资源管理器未响应或者停止问题
- OutLook中添加、取消送信者禁止
- Oxygen Eclipse安装Java EE
- Centos7使用Docker部署Chemex资产管理系统
- 【RTSP/RTP/RTCP/SDP】协议详解
- 用JavaScript获取网页中的js、css、Flash等文件
热门文章
- 苹果个人开发者账号出售_苹果开发者账号被调查血泪史总结
- 察举科目-汉代察举制度的重要环节
- pt达人教你如何用pttools批量刷新pt站点数据
- 为什么我的 WordPress 网站被封了?
- R 回归 虚拟变量na_互助问答第30期:工具变量、GARCH模型操作和多项选择效信度...
- SSD-tensorflow-1 demo
- windows网络和共享中心“查看基本网络信息并设置连接”为“未知”的解决方案
- 浙江日报软件测试怎么样,浙江日报
- PCI Express 2D 多媒体显卡_IOEHM-GC_V1.0 Mini-PCIe 显卡_嵌入式行业图像显示_视频加速和2D加速功能
- windowsPE系统的制作