(不需要copy代码,请专注于理解如何实现,我会详细解释代码!)
一、简要描述
One day,我参与的项目中,用户提了个新需求。要求:按照给定 word模板,填充数据并导出。
负责这个需求后,我查阅优快云,虽然也找到了一些文章,依据文章中的顺序,写出了demo。但demo毕竟是demo,在项目实战中,还是让我遇到不少坑。
由于 easypoi
对Word的支持不太友好,不支持多图片导出
,因此研究之后,也找到一个办法,后续会展开叙述。
二、项目描述
主要涉及:SpringBoot + MySQL + Linux
实际项目会部署在Linux上,图片也是需要从服务器上解析到本地,转成Base64位字节才可以。不过我会提供全部的图片转Base64公共方法。
注意理解:Word支持显示的图片,是图片通过IO流转成的Base64字节
(正式开始 ===> follow me!)
第一步:准备Word模板
第二步:导入Jar包
<!-- 集成 easypoi -->
<dependency>
<groupId>cn.afterturn</groupId>
<artifactId>easypoi-base</artifactId>
<version>3.3.0</version>
</dependency>
<dependency>
<groupId>cn.afterturn</groupId>
<artifactId>easypoi-web</artifactId>
<version>3.3.0</version>
</dependency>
<dependency>
<groupId>cn.afterturn</groupId>
<artifactId>easypoi-annotation</artifactId>
<version>3.3.0</version>
</dependency>
第三步:Controller层 接口
@ApiOperation(value = "导出巡查整改通知单")
@PostMapping("/letter/notice/export")
@ApiImplicitParams({
@ApiImplicitParam(name = "id", value = "巡查id")})
public void wordExport(@RequestParam Long id,HttpServletRequest request, HttpServletResponse response) throws IcmsException, IOException {
// 注入Service层
service.wordExport(id, request, response);
}
第四步:Service层 业务
@Override
public void wordExport(Long id, HttpServletRequest request, HttpServletResponse response) throws IcmsException, IOException {
// 1.查询数据
User user = userDao.selectList(new QueryWrapper<User>().eq("id",id));
// 2.创建 map
Map<String,Object> data = new HashMap<>();
data.put("number",new SimpleDateFormat("yyyyMMddHHmmss")