背景

因项目需求,需要将数据填充到客户提供的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相关推荐

  1. java生成word(报告报表)含统计图表图片、循环表格,Spring Boot整合word生成

    先给大家一个效果图: 左侧是word模板,右侧是生成后的word文档. 在工作中经常用到会有一些生成统计报告.请假等word的功能需求,小编之前做了一些报表的生成,使用过freemarker和poi, ...

  2. Spring Boot导出jar包发布

    一:事由 现在的项目组开发项目使用的是Spring Boot的技术,开发的时候是直接通过一个入口主函数来启动项目的.如果将项目交给客户,怎样才能正确的发布运行呢?百度了一下有关的知识,大概了解到是通过 ...

  3. Spring Boot 导出Excel表格

    添加支持 <!--添加导入/出表格依赖--> <dependency> <groupId>org.apache.poi</groupId> <ar ...

  4. Spring Boot整合模板引擎jsp

    为什么80%的码农都做不了架构师?>>>    jsp也算是一种模板引擎吧.整合jsp前,先说一下运行SpringBoot项目的几种方式 1. 运行SpringBoot项目的几种方式 ...

  5. Spring Boot:(四)开发Web应用之JSP篇

    Spring Boot:(四)开发Web应用之JSP篇 前言 上一篇介绍了Spring Boot中使用Thymeleaf模板引擎,今天来介绍一下如何使用SpringBoot官方不推荐的jsp,虽然难度 ...

  6. Spring Boot(20)---开发Web应用之JSP篇

    Spring Boot(20)---开发Web应用之JSP篇 前言 上一篇介绍了Spring Boot中使用Thymeleaf模板引擎,今天来介绍一下如何使用SpringBoot官方不推荐的jsp,虽 ...

  7. Spring Boot 结合 FreeMarker导出word文件

    FreeMarker 是一款 模板引擎: 即一种基于模板和要改变的数据, 并用来生成输出文本(HTML网页,电子邮件,配置文件,源代码等)的通用工具. 它不是面向最终用户的,而是一个Java类库,是一 ...

  8. Spring Boot 菜鸟教程 12 EasyPoi导出Excel下载

    GitHub src="//ghbtns.com/github-btn.html?user=je-ge&repo=spring-boot&type=watch&cou ...

  9. Spring Boot + EasyExcel 导入导出,好用到爆,可以扔掉 POI 了!

    欢迎关注方志朋的博客,回复"666"获面试宝典 一.EasyExcel EasyExcel是阿里巴巴开源poi插件之一,主要解决了poi框架使用复杂,sax解析模式不容易操作,数据 ...

  10. java按需读取word文件_干货分享:ASP.NET CORE(C#)与Spring Boot MVC(JAVA)异曲同工的编程方式总结...

    我(梦在旅途,http://zuowj.cnblogs.com; http://www.zuowenjun.cn)最近发表的一篇文章<.NET CORE与Spring Boot编写控制台程序应有 ...

最新文章

  1. 几种Windows进程通信
  2. Java 类加载全过程
  3. 要承认我们换电脑频繁的效率并不是很高
  4. Java的HashCode,Equal和==
  5. KernelShark Documentation
  6. 2017 ACM-ICPC 亚洲区(西安赛区)网络赛 xor (根号分治)
  7. 中国十个主要城市10-18年的统计年鉴
  8. 百度网盘解压显示服务器错误,百度网盘、Winrar等解压文件解压出错怎么办?
  9. 【工具网站推荐】文字转语音
  10. HTML+CSS+Bootstrap+ECMAScript+DOM
  11. 针对华为产品,如何在小红书宣传中发布有关图文笔记并达到最佳效果?
  12. M1芯片电脑安装cerebro
  13. vb雅西高速计算机考试,2016年高中信息技术学业水平考试--VB程序复习题.doc
  14. java的几种基本数据类型及其大小
  15. 支付宝当面付打shang系统源码分享
  16. MySql安装学习记录
  17. 百度seo快排点击系统源码[易语言]拨号模拟点击(仅供学习使用!)
  18. 2018全国数学建模总结
  19. [ Azure | Az-900 ] 基础知识点总结(一) - Cloud云概念
  20. Linux查看U盘的Vid,CheckUDisk(查看USB的VID/PID/厂商信息)v5.4

热门文章

  1. php 时间戳 精确到秒,时间戳与时间相互转换(php .net精确到毫秒)
  2. hdu 2224(dp)
  3. 华为FreeBuds 4轻体验,能打的不只舒适降噪
  4. 零基础学习CSS(10)——属性选择器
  5. 系统试运行报告是谁写的_煤矿安全监控系统升级改造验收方案
  6. 公司要倒闭的6大征兆——集齐任意5个,兑换一次破产清算
  7. 微信小程序的地址相关
  8. 瑞波Ripple概念解析-XRP账本概述(官方文档不完全翻译)
  9. 【蓝桥刷题】——如何轻松拿捏必考数论题?(第一弹)
  10. EmWin学习课堂_小白EmWin_EmWin快速入门_EmWin动态内存,显示和触摸屏_EmWin基础配置