虽然 Apache POI 是非常强大的针对 Microsoft Office 读写的工具,但是其太过于复杂,往往不太好编写代码,且编写出的代码不宜维护(也可能只是网上大家分享的代码大多都不好好整理的原因)。所以在导出读取 Excel 方面有阿里简化后的 easyexcel 可供使用,关于导出 word 我们可以使用 freemarker 模板引擎。

1、在 springboot 项目中添加 freemarker 的依赖

org.springframework.boot

spring-boot-starter-freemarker

2、使用 word 做一个你需要的文件模板,并将其中需要改变的部分编程变量(注:图片建议先贴上大小相等的其他图片),类似下面:

test.docx

3、制作完成之后,将其另存为xml格式

test.docx 转存 xml 格式

4、将转存的 xml 文件使用文本编辑器例如 notepad++ 等打开,将其中红色区域的删除掉,那些是图片的base64编码后的信息,然后替换为一个图片变量,传入新的图片的 base64 编码即可导出你所要的图片,一般来说导出的图片都是由前台 echarts 等工具生成的。

test.xml

改图片变量

5、导出列表的话还需要在 xml 中找到

,在其前加入 (注意第一个list 不能变,第二个list 为变量名,第三个list 为别名),和 后加入 #list> ,此外需将 name 改成 list.name,gender 改成 list.gender 。

6、复制 xml 粘贴至项目文件中,并将后缀名更改为 .ftl

test.ftl

7、编写导出 Word 工具类

@Slf4j

public class ExportWordUtil {

private Configuration config;

public ExportWordUtil() {

config = new Configuration(DEFAULT_INCOMPATIBLE_IMPROVEMENTS);

config.setDefaultEncoding("utf-8");

}

/**

* FreeMarker生成Word

* @param dataMap 数据

* @param templateName 模板名

* @param response HttpServletResponse

* @param fileName 导出的word文件名

*/

public void exportWord(Map dataMap, String templateName, HttpServletResponse response, String fileName) {

//加载模板(路径)数据,也可使用setServletContextForTemplateLoading()方法放入到web文件夹下

config.setClassForTemplateLoading(this.getClass(), "/templates");

//设置异常处理器 这样的话 即使没有属性也不会出错 如:${list.name}...不会报错

config.setTemplateExceptionHandler(TemplateExceptionHandler.IGNORE_HANDLER);

try {

if(templateName.endsWith(".ftl")) {

templateName = templateName.substring(0, templateName.indexOf(".ftl"));

}

Template template = config.getTemplate(templateName + ".ftl");

response.setContentType("application/msword");

response.setHeader("Content-disposition", "attachment;filename="+ URLEncoder.encode(fileName, StandardCharsets.UTF_8));

OutputStream outputStream = response.getOutputStream();

Writer out = new BufferedWriter(new OutputStreamWriter(outputStream));

//将模板中的预先的代码替换为数据

template.process(dataMap, out);

log.info("由模板文件:" + templateName + ".ftl" + " 生成Word文件 " + fileName + " 成功!!");

out.flush();

} catch (TemplateNotFoundException e) {

log.info("模板文件未找到");

e.printStackTrace();

} catch (MalformedTemplateNameException e) {

log.info("模板类型不正确");

e.printStackTrace();

} catch (TemplateException e) {

log.info("填充模板时异常");

e.printStackTrace();

} catch (IOException e) {

log.info("IO异常");

e.printStackTrace();

}

}

}

8、编写简单的Controller方法

@RestController

public class Controller {

/**

* @param image 注意该image参数为前台传过来图片

*/

@PostMapping("/exportWord")

public void exportWord(HttpServletResponse response, @RequestParam("image") MultipartFile image){

ExportWordUtil ewUtil = new ExportWordUtil();

Map dataMap = new HashMap<>();

dataMap.put("title", "荒野大镖客2人物");

Base64.Encoder base64 = Base64.getEncoder();

try {

dataMap.put("image", base64.encodeToString(image.getBytes()));

} catch (Exception e){

}

List userList = new ArrayList<>();

userList.add(new User("亚当·摩根","男"));

userList.add(new User("达奇","男"));

userList.add(new User("阿比盖尔·马斯顿","女"));

dataMap.put("list", userList);

ewUtil.exportWord(dataMap, "test.ftl", response, "荒野大镖客2人物.doc");

}

}

9、application.yml 中设置下 size,防止图片的字节数过大

spring:

servlet:

multipart:

max-file-size: 1024MB

max-request-size: 1024MB

10、启动项目,传入某个图片进行测试【注意:尽量前台直接传图片,而不是传图片的 base64 编码的字符串,这可能导致 word 中图片显示不完整】

导出的 word

参考如下:

java导出word图片格式_Java 导出带图片和列表的 Word相关推荐

  1. java csv 单元格格式_java导出csv格式文件的方法

    本文实例为大家分享了java导出csv格式文件的具体代码,供大家参考,具体内容如下 导出csv格式文件的本质是导出以逗号为分隔的文本数据 import java.io.BufferedWriter; ...

  2. java 模板 word转pdf 可分页 带图片

    java 模板 word转pdf 可分页 带图片 之前写过一个简单的案例,但是在项目中完全不能满足客户的需求,所以重新用啦一种方式来写,采用了word转换pdf的方式,这种经过不断研究,满足了可分页, ...

  3. php怎么将网页变成图片格式,php如何实现图片格式转换

    [摘要] PHP即"超文本预处理器",是一种通用开源脚本语言.PHP是在服务器端执行的脚本语言,与C语言类似,是常用的网站编程语言.PHP独特的语法混合了C.Java.Perl以及 ...

  4. php图片转换软件,能能图片格式转换器 支持主流图片格式批量转换,简单实用的图片转换软件...

    今天给大家分享一个我平常用的能能图片格式转换器,这个能能图片格式转换器也是非常强大,集合所有图片格式,支持相互转换哦,能能图片格式转换器还有图片剪切,调整分辨率,添加水印等功能.在这里也推荐大家看一下 ...

  5. java导出html word文档_java生成带html样式的word文件

    最近在项目中需要将通过富文本编辑器处理过的文字转换为Word,查了很久,大家通常的解决办法是使用Jacob或POI等组件直接生成Word,但是都无法将富文本编辑器处理过的文字保留样式并保存为Word, ...

  6. java导出excel数字格式_POI 导出excel带小数点的数字格式显示不对解决方法

    最近看到了一个问题就是java导出excel中带小数点的数字显示不对, 比如我想在excel中第一行显示:  3,000.0 但是在excle中导出的格式总是不带小数点 3000(非文本格式),而且也 ...

  7. java 导出本地xml文件_java导出xml文件

    JDOM 文档声明其目的是"使用 20%(或更少)的精力解决 80%(或更多)Java/XML 问题"(根据学习曲线假定为 20%).JDOM 对于大多数 Java/XML 应用程 ...

  8. Vue中使用html2canvas和jspdf插件实现导出pdf(自定义html样式可带图片)并下载

    场景 若依前后端分离版手把手教你本地搭建环境并运行项目: 若依前后端分离版手把手教你本地搭建环境并运行项目_BADAO_LIUMANG_QIZHI的博客-CSDN博客_若依前后端分离文档 在上面搭建起 ...

  9. java 图片合并_Java如何实现图片的叠加与拼接操作

    关于Java实现图片的叠加与拼接的文章网络上确实很多,碰巧小编开发工作中也遇到这些问题,就做了简要的梳理,作为笔记以备不时之需. Java对图片的处理主要使用的是BufferedImage类. Buf ...

  10. java html写入到word文档_java 使用jacob将html页面写入word

    在此先声明最重要的一点:使用jacob将html导入word时图片是使用链接的方式引入的,也就是说如果你的图片删除了,那么word中图片也没了. 原文链接:https://blog.csdn.net/ ...

最新文章

  1. 实战:人脸识别实战项目(源码共享)
  2. 关于JS客户端对服务器控件赋值,Post后不能保留值的解决办法
  3. MySQL Workbench/SQLyog 高分辨率屏幕上界面模糊的解决方法
  4. mac php 怎么启动命令,Mac 使用homebrew启动PHP环境命令
  5. html5 app开发重大消息-腾讯在技术端推进Html5生态发展
  6. KMP算法详解 网络上转的。。。仰慕此人
  7. 璀璨智行:V2X车路协同智慧交通
  8. mysql支持arm64架构吗_ARM架构下面安装mysql5.7.22
  9. 中班音乐活动计算机反思,中班音乐教学反思
  10. Tesseract处理背景渐变的图片
  11. ubuntu /dev/sda1 contains a file system error …… (initramfs)的问题
  12. Jquery 使用技巧总结
  13. 王珊数据库系统概论第五版视频课程
  14. Hbase-day03_java操作hbase_hbase_各种过滤器使用
  15. 黑马程序员 HTML基础
  16. oracle 内存翻译,dumping_oracle_blocks翻译(二)
  17. 手把手教你用原生js写一个文字提示框
  18. html embed如何禁止自动播放,html embed用法
  19. 如何买到便宜点的书(知乎)
  20. the pbr guide总结

热门文章

  1. 学习嵌入式,需要哪些硬核技能?
  2. 无敌!确定恋爱关系的搞笑招式
  3. retina 显示屏详细理解
  4. 会议摘要怎么写?这篇论文手把手教你
  5. 【探究服务】——服务的更多技巧
  6. 英语论文应该怎么查重?
  7. 科学计算机sd mode使用方法,科学计算器使用方法
  8. 谷歌地球二次开发基础平台
  9. vs2012 +WP8sdk 开发WP8应用
  10. Macbook无法登陆APP Store解决办法