Spring Boot-导出word
背景
因项目需求,需要将数据填充到客户提供的word模板中导出供打印使用,故写此说明。
依赖
<!--加入freemarker模版引擎--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-freemarker</artifactId></dependency>
制作模板
打开文档,填写模板内容
模板示例如下:
保存文件,另存为时选择类型
修改文件后缀名
将模板后缀名修改为ftl即可
将模板加入项目中,位置为templates/ftl/
编辑模板
图片处理
修改图片位置
注意: 对于图片,修改的位置主要有三个地方,第一个是声明的地方,第二个是图片实际地址,第三个是图片的base64。如果导出时有多张图片,则需要添加遍历,所以需要考虑。
base64位置
删除base64留下空白内容
因为图片可能有多张,所以修改如下:
备注:
- 红标1:图片下标,标识多张图片,声明图片中需要用到。注意文件格式,以及名字保持一致。
- 红标2:图片的base64内容,需要将图片的base64获取(在后端通过工具操作得到)。
声明图片的地方
注意:红标的地方,这是图片声明的id,会在word内容中引用。因为图片是多张,所以这里id也需要遍历生成。
备注:
- 红标1:后缀带Png或者其他内容,别不带,切记。
- 红标2:与步骤(1)的下标以及图片后缀一致。
图片实际地址
找到图片内容的位置,收缩该标签。
因为图片可能存在多张,所以循环w:r
修改<w:r>中的内容,更改引用id
单张图片处理
如果是单张图片,直接设置base64数据即可。找到头像的base64位置,删除base64数据,然后设置base64数据即可。其余保留不变。 注意:判断是否为空
表单处理
找到填写的内容位置,删除模板填写的内容,填写对应的表达式即可。注意:可能值为空,一定要加入判断,比如下面的姓名,否则会报错!
<#if studentInfo.name??>${ studentInfo.name }<#else></#if>
功能调用
超链接中的方法名可以随意定义
参数说明:
参数 | 类型 | 说明 |
---|---|---|
gridId | string | 表格id,必须配置 |
downloadUrl | string | 下载文件地址的接口,必须配置 |
fileName | string | 文件名,非必须配置 |
示例控制层
@ApiOperation("导出Word")
@RequestMapping(value = "/export/wrod/{id}", method = RequestMethod.GET)
public void exportWrod(HttpServletResponse response,@PathVariable String id, String fileName) throws Exception {if (StringUtils.isNotEmpty(id)) {demoStudentService.exportWrod(response, id, fileName);}
}
业务代码
具体使用看以下代码说明即可
@Override
@Transactional(readOnly=true)
public void exportWord(HttpServletResponse response,String id,String fileName) throws Exception{// 查询学生信息DemoStudentEntity demoStudentEntity = demoStudentRepository.findOne(id);if(demoStudentEntity=null){return;}DemoStudentDto demoStudentDto = BeanMapperUtils.map(demoStudentEntity,DemoStudentDto.class);// 查询学生班级DemoClassroomDto classroomDto = demoClassroomService.getById(demoStudentEntity.getCid());if(null!=classrommDto && StringUtils.isNotEmpty(classroomDto.getGrade())&&StringUtils.isNotEmpty(classrommDto.getName())){demoStudentDto.setClassroom(classroomDto.getName());demoStudentDto.setGrade(classroomDto.getGrade());}// 将对象转成map,对象的属性值,转成键值对Map<String,Object> studentMap = XKJsonUtils.jsonToMap(XKJsonUtils.object2Json(demoStudentDto));Map<String,Object> map= new HashMap<>();DictEntryDto dictEntryDto = cacheService.getDictByCode("ASSOCICATIONTYPE","1");List<FileResourceAssociationDto> fileResourceAssociation = fileResourceAssociationService.getFileResourceAssociation(demoStudentEntity.getId(), dictEntryDto1.getDictcode());//调用方法获取学生图片的base64,并存到map中getImage(studentMap,fileResourceAssociation);// 存储信息到map中,该map用于渲染word模板中的数据map.put("studentInfo",studentMap);// 导出查询数据,调用工具类XKWordUtils.exportMillCertificateWord(response, ,map, fileName,"templates/ftl/demo.ftl");
}
注意:map中存储的key一定要与模板名称一
获取图片的base64
下面的代码针对项目的解决方案,可更改获取base64的业务代码
private void getImage(Map<String, Object> map, List<FileResourceAssociationDto> fileResourceAssociation) {if (fileResourceAssociation == null) return;for (int index = 0; index < fileResourceAssociation.size(); index++) {String imgUrl = (String) map.get("imgUrl");if (imgUrl == null || StringUtils.isEmpty(imgUrl)) {// 获取图片的存储路径imgUrl = Constant.FILE_SERVER + fileResourceAssociation.get(index).getFilepath() + ",";} else if (index == fileResourceAssociation.size() - 1) {// 获取图片的存储路径imgUrl += Constant.FILE_SERVER + fileResourceAssociation.get(index).getFilepath();} else {// 获取图片的存储路径imgUrl += Constant.FILE_SERVER + fileResourceAssociation.get(index).getFilepath() + ",";}map.put("imgUrl", imgUrl);}// 存储图片路径集合到map中map.put("imgUrlList", XKWordUtils.imgUrlToString(map.get("imgUrl")));String f1 = (String) map.get("f1");if (StringUtils.isNotEmpty(f1)) {String imgUrl = Constant.FILE_SERVER + f1;// 获取base64map.put("headImg", XKWordUtils.getImageStrFromUrl(imgUrl));}
}
测试结果
为导出excel和导出word的两个截图。
Spring Boot-导出word相关推荐
- java生成word(报告报表)含统计图表图片、循环表格,Spring Boot整合word生成
先给大家一个效果图: 左侧是word模板,右侧是生成后的word文档. 在工作中经常用到会有一些生成统计报告.请假等word的功能需求,小编之前做了一些报表的生成,使用过freemarker和poi, ...
- Spring Boot导出jar包发布
一:事由 现在的项目组开发项目使用的是Spring Boot的技术,开发的时候是直接通过一个入口主函数来启动项目的.如果将项目交给客户,怎样才能正确的发布运行呢?百度了一下有关的知识,大概了解到是通过 ...
- Spring Boot 导出Excel表格
添加支持 <!--添加导入/出表格依赖--> <dependency> <groupId>org.apache.poi</groupId> <ar ...
- Spring Boot整合模板引擎jsp
为什么80%的码农都做不了架构师?>>> jsp也算是一种模板引擎吧.整合jsp前,先说一下运行SpringBoot项目的几种方式 1. 运行SpringBoot项目的几种方式 ...
- Spring Boot:(四)开发Web应用之JSP篇
Spring Boot:(四)开发Web应用之JSP篇 前言 上一篇介绍了Spring Boot中使用Thymeleaf模板引擎,今天来介绍一下如何使用SpringBoot官方不推荐的jsp,虽然难度 ...
- Spring Boot(20)---开发Web应用之JSP篇
Spring Boot(20)---开发Web应用之JSP篇 前言 上一篇介绍了Spring Boot中使用Thymeleaf模板引擎,今天来介绍一下如何使用SpringBoot官方不推荐的jsp,虽 ...
- Spring Boot 结合 FreeMarker导出word文件
FreeMarker 是一款 模板引擎: 即一种基于模板和要改变的数据, 并用来生成输出文本(HTML网页,电子邮件,配置文件,源代码等)的通用工具. 它不是面向最终用户的,而是一个Java类库,是一 ...
- Spring Boot 菜鸟教程 12 EasyPoi导出Excel下载
GitHub src="//ghbtns.com/github-btn.html?user=je-ge&repo=spring-boot&type=watch&cou ...
- Spring Boot + EasyExcel 导入导出,好用到爆,可以扔掉 POI 了!
欢迎关注方志朋的博客,回复"666"获面试宝典 一.EasyExcel EasyExcel是阿里巴巴开源poi插件之一,主要解决了poi框架使用复杂,sax解析模式不容易操作,数据 ...
- java按需读取word文件_干货分享:ASP.NET CORE(C#)与Spring Boot MVC(JAVA)异曲同工的编程方式总结...
我(梦在旅途,http://zuowj.cnblogs.com; http://www.zuowenjun.cn)最近发表的一篇文章<.NET CORE与Spring Boot编写控制台程序应有 ...
最新文章
- 几种Windows进程通信
- Java 类加载全过程
- 要承认我们换电脑频繁的效率并不是很高
- Java的HashCode,Equal和==
- KernelShark Documentation
- 2017 ACM-ICPC 亚洲区(西安赛区)网络赛 xor (根号分治)
- 中国十个主要城市10-18年的统计年鉴
- 百度网盘解压显示服务器错误,百度网盘、Winrar等解压文件解压出错怎么办?
- 【工具网站推荐】文字转语音
- HTML+CSS+Bootstrap+ECMAScript+DOM
- 针对华为产品,如何在小红书宣传中发布有关图文笔记并达到最佳效果?
- M1芯片电脑安装cerebro
- vb雅西高速计算机考试,2016年高中信息技术学业水平考试--VB程序复习题.doc
- java的几种基本数据类型及其大小
- 支付宝当面付打shang系统源码分享
- MySql安装学习记录
- 百度seo快排点击系统源码[易语言]拨号模拟点击(仅供学习使用!)
- 2018全国数学建模总结
- [ Azure | Az-900 ] 基础知识点总结(一) - Cloud云概念
- Linux查看U盘的Vid,CheckUDisk(查看USB的VID/PID/厂商信息)v5.4
热门文章
- php 时间戳 精确到秒,时间戳与时间相互转换(php .net精确到毫秒)
- hdu 2224(dp)
- 华为FreeBuds 4轻体验,能打的不只舒适降噪
- 零基础学习CSS(10)——属性选择器
- 系统试运行报告是谁写的_煤矿安全监控系统升级改造验收方案
- 公司要倒闭的6大征兆——集齐任意5个,兑换一次破产清算
- 微信小程序的地址相关
- 瑞波Ripple概念解析-XRP账本概述(官方文档不完全翻译)
- 【蓝桥刷题】——如何轻松拿捏必考数论题?(第一弹)
- EmWin学习课堂_小白EmWin_EmWin快速入门_EmWin动态内存,显示和触摸屏_EmWin基础配置