Springboot系列(十六):集成easypoi实现word模板图片导出(实战篇三)

3,778 阅读7分钟

👨‍🎓作者:bug菌
✏️博客:CSDN掘金infoQ51CTO
🎉简介:CSDN博客专家,C站历届博客之星Top50,掘金/InfoQ/51CTO等社区优质创作者,全网合计8w粉+,对一切技术感兴趣,重心偏Java方向;硬核公众号「 猿圈奇妙屋」,欢迎小伙伴们的加入,一起秃头,一起变强。
..
✍️温馨提醒:本文字数:1999字, 阅读完需:约 5 分钟

       嗨,家人们,我是bug菌呀,我又来啦。今天我们来聊点什么咧,OK,接着为大家更《springboot零基础入门教学》系列文章吧。希望能帮助更多的初学者们快速入门!

       小伙伴们在批阅文章的过程中如果觉得文章对您有一丝丝帮助,还请别吝啬您手里的赞呀,大胆的把文章点亮👍吧,您的点赞三连(收藏⭐+关注👨‍🎓+留言📃)就是对bug菌我创作道路上最好的鼓励与支持😘。时光不弃🏃🏻‍♀️,创作不停💕,加油☘️

一、前言🔥

环境说明:Windows10 + Idea2021.3.2 + Jdk1.8 + SpringBoot 2.3.1.RELEASE

       前几期呢,我们主要是讲了如何集成easypoi实现excel的导入导出功能,word的导入导出,对吧。不知道你们掌握的如何,如果还对以下任意一篇有疑问,还请大家多多提问,哈哈哈,虽然不是什么大佬,但是我会尽全力相授,一起学习查缺补漏。

       既然word的导出都实现了多样化,那数据上要是如果携带图片,那该怎么办呢?

比如啊,导出所有用户的基本信息,而用户表中,就存有每一个用户的自画像,比如一寸照啥的,像这个情况,那word导出应该得怎么实现呢?还是跟以前一样么??

       接下来我就开始啦,同学们可得竖起耳朵好好听讲哦~我会带着大家一步一步实现它,至于怎么实现,接着往下看。

二、引入pom依赖

       像你如果要实现word携带图片导出,还是引入前几期的easypoi版本肯定是不能用,比如easypoi3.2.0虽然提供了拓展图片导出,但是bug菌的的确确是尝试过了,没有导出成功,可能是作者在这些版本中,压根就没有加入对该图片解析的代码吧。大家请看:

       接着本来我是直接封装了一个对图片进行设置的方法,但凡是一涉及该实体,就被划线处理,应该就是被废弃了。

       所以在查询资料发现,easypoi4.3版本及以上却支持了word图片导出,就很完美,这下对于有word导出图片需求的同学来说,这就是福音啊。即我们就以easypoi4.3为例给大家演示如何实现word图片导出,好吧?

<!--easypoi依赖,excel导入导出-->
<dependency>
    <groupId>cn.afterturn</groupId>
    <artifactId>easypoi-spring-boot-starter</artifactId>
    <version>4.3.0</version>
</dependency>

切记!注意依赖版本 4.3.0+才支持多图片循环导出。

三、实现word图片导出

1、先来定义一个word模板文件

       我们分别以单word模板导出多页数据和word模板导出多数据两种模式进行演示,这样大家日后遇到此需求,就不用再查阅相关资料了,直接上手就是开撸(代码)。

模式一:

模式二:

       以上是两种不同的word模板,接下来我们就根据这两份不同的模板依次为大家演示如何导出该画像图片。

2、Controller添加word导出方法

       我们先来定义一个word文档导出方法,目的是提供一个口子,好方便自己通过浏览器访问进行测试。

/**
 * word文档导出到一个模板中
 */
@GetMapping("export-word-all")
@ApiOperation(value = "word文档导出到一个模板中", notes = "word文档导出到一个模板中")
public void exportUsersToWordAll(HttpServletResponse response) throws Exception {
    userService.exportUsersToWord(response);
}

/**
 * word文档导出
 */
@GetMapping("export-word")
@ApiOperation(value = "word文档导出", notes = "word文档导出")
public void exportUsersToWord(HttpServletResponse response) throws Exception {
    userService.exportUsersToWord(response);
}

       不需要任何返回值及参数,你只需要携带你调用接口时的请求HttpServletResponse 即可。

3、定义导入接口

/**
 * word文档导出到一个模板中
 */
void exportUsersToWordAll(HttpServletResponse response) throws Exception;

/**
 * word文档导出
 */
void exportUsersToWord(HttpServletResponse response) throws Exception;

4、实现导出方法(核心)

       如下这个导出实现类就很关键了,我们还是直接使用easypoi提供的exportWord07()方法,具体细节就看我上两期教学内容啦,这里我们着重演示添加图片:

代码具体设置如下:

//添加简单图片map.put("image", this.imgFormatting("static/image/刘亦菲.jpg", 100, 100));

       我就直接不贴所有代码了啊,毕竟其余代码上几期教学内容中都全部有,还有,我这里只是作为演示,所以图片地址固定死了,如遇实际环境,肯定是直接传入该用户的图片地址即可。

附上设置图片封装的方法,仅供参考:

/**
 * 图片格式化,Word导出图片格式
 *
 * @param imgPath 图片路径
 */
private ImageEntity imgFormatting(String imgPath, int width, int height) {
    //设置图片
    ImageEntity image = new ImageEntity(imgPath, width, height);
    //表格外添加简单图片
    image.setType(ImageEntity.URL);
    return image;
}

5、浏览器测试接口

       我们打开浏览器,在地址栏,输入我们刚才在Controller暴露出来的接口地址:

比如我的:http://localhost:8080//user/export-word-all 和 http://localhost:8080//user/export-word你按你的接口地址进行访问即可。

       我分别截图给大家看一下,两种模式分别展示图片是何种效果:

模式一:直接导出单模板多页数据

       以上就只截图了一页模板内容啦,反正图片就是一样的,你们的国民女神。

模式二:直接导出word模板多内容显示

       对比出来了么,这两种导出方式,差异还是有点大,对吧,但是这期内容重点不是这两种导出模式,而是图片在这两种模式下,都展示成功了,还以为要翻车,嘿嘿,内容教你们啦,剩下的就靠大家去摸索咯。

       ... ...

       好啦,以上就是我这期的全部内容啦,如果还想学习更多,你可以看看我的往期热文推荐哦,每天积累一个奇淫小知识,日积月累下去,你一定能成为令人敬仰的大佬的。好啦,咱们下期见~

四、往期热门推荐

文末🔥

如果还想要学习更多,小伙伴们可关注bug菌专门为大家创建的专栏《springboot零基础入门教学》,从无到有,从零到一!希望能帮助到更多小伙伴们。

我是bug菌,一名想走👣出大山改变命运的程序猿。接下来的路还很长,都等待着我们去突破、去挑战。来吧,小伙伴们,我们一起加油!未来皆可期,fighting!

感谢认真读完我博客的铁子萌,在这里呢送给大家一句话,不管你是在职还是在读,绝对终身受用。
时刻警醒自己:
抱怨没有用,一切靠自己;
想要过更好的生活,那就要逼着自己变的更强,生活加油!!!