最近参加了一个比赛,需要生成一份word报告,查找了很多篇相关博客,都不太便于理解,最终还是非常坎坷的给整了出来,今天就详细的梳理下流程。

  • 主要分四个部分
    • ==1-首先创建一个word模板==
      • 1-1另存为.xml格式
      • 1-2把test.xml文件保存在idea的templates目录下,改后缀为.ftl
      • 1-3分析test.ftl文件
    • ==2-示例代码==
      • 2-1导入依赖
      • 2-2controller层
      • 2-3service层
    • ==3-编辑test.ftl模板==
    • ==4-测试结果==

主要分四个部分

1-首先创建一个word模板

.doc/.docx都行,我建的是test.doc

word模板的部分截图(记住这个景气指数),最后我们会更改这个图片和文字,而格式和其他设置会跟原模板一模一样

1-1另存为.xml格式

1-2把test.xml文件保存在idea的templates目录下,改后缀为.ftl

1-3分析test.ftl文件

首先:test.ftl的内容是压缩的,我们使用Ctrl+Alt+F来格式化代码,接着看下图

有错字=-=,总之就是Ctrl+F 查找 pkg:binaryData,这里存放着图片的字节码,然后点击左边的小标记,隐藏他(太多了),最后我们更换图片就是修改字节码,这里有十几张图片如何辨别我们想要修改的那个呢? 我们继续往下看:

隐藏完后的样子:
然后往上捣:


现在捣到了这个位置:

rid9在这个地方被引用了,那么我就可以认为,我检索的那张图片,就是被放到了这个位置(事实也正是这样)

这里截图错了,应该截到image2.jpeg(意思到了就行)

2-示例代码

2-1导入依赖

 <dependency><groupId>org.freemarker</groupId><artifactId>freemarker</artifactId><version>2.3.30</version></dependency>

2-2controller层

    @GetMapping ("/getWord")public void exportSellPlan(HttpServletRequest request, HttpServletResponse response) {System.out.println("节点");service.exportSellPlan(request, response);}

2-3service层

map里的键值对可以插入到test.ftl中,以做替换使用

  public void exportSellPlan(HttpServletRequest request, HttpServletResponse response){String imagePath ="src/main/resources/images/11.png";String imagePath2="src/main/resources/images/面码.jpg";String imagePath3="src/main/resources/images/favicon.ico";//获得数据Map<String, Object> map = new HashMap<>();map.put("title", "浅喜的果园");map.put("context", "users");map.put("context1",this.getImageBase(imagePath));//获取图片的字节码map.put("mm", this.getImageBase(imagePath2));map.put("favicon", this.getImageBase(imagePath3));try {WordUtil.exportMillCertificateWord(request, response, map, "test", "test.ftl");} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();
//            return new CommonResult<>(404,"failure");}
//        return new CommonResult<>(200,"success");}//获得图片的base64码@SuppressWarnings("deprecation")public String getImageBase(String src) {if(src==null||src==""){return "";}File file = new File(src);if(!file.exists()) {return "";}InputStream in = null;byte[] data = null;try {in = new FileInputStream(file);} catch (FileNotFoundException e1) {e1.printStackTrace();}try {assert in != null;data = new byte[in.available()];in.read(data);in.close();} catch (IOException e) {e.printStackTrace();}BASE64Encoder encoder = new BASE64Encoder();return encoder.encode(data);}

3-编辑test.ftl模板

这是我们service层中的map:

map.put(“title”, “浅喜的果园”);
map.put(“context”, “users”);
map.put(“context1”,this.getImageBase(imagePath));//获取图片的字节码
map.put(“mm”, this.getImageBase(imagePath2));
map.put(“favicon”, this.getImageBase(imagePath3));

同时把“景气指数”也替换掉

4-测试结果

启动我们的项目
在浏览器访问http://localhost:8082/getWord
保存这个word文档到本地
查看:

虽然中间有点小差错,不过没啥答问题。

springboot向word文档插入内容和图片相关推荐

  1. python 给word添加背景图片_Python如何使用word文档插入图片和表格

    Python如何使用word文档插入图片和表格 发布时间:2020-10-26 13:49:29 来源:亿速云 阅读:101 作者:挣扎的蓝藻 这篇文章运用简单易懂的例子给大家介绍Python如何使用 ...

  2. 用python将word文档导入数据库_python读取word文档,插入mysql数据库的示例代码

    表格内容如下: 1.实现批量导入word文档,取文档标题中的数字作为编号 2.除取上面打钩的内容需要匹配出来入库入库,其他内容全部直接入库mysql # wuyanfeng # -*- coding: ...

  3. python打开word并插入图片_Python操作word文档插入图片和表格的实例演示

    前言 图片是Word的一种特殊内容,这篇文章主要介绍了关于Python操作word文档,向里面插入图片和表格的相关内容,下面话不多说了,来一起看看详细的代码 实例代码: # -*- coding: U ...

  4. (一)JAVA基于OPENXML的word文档插入、合并、替换操作系列之基础篇

    (一)JAVA基于OPENXML的word文档插入.合并.替换操作系列之基础篇 前言 什么是Open Xml? Open XML SDK 这系列笔记要做点什么? 涉及技术点 关于word.openxm ...

  5. (五)、JAVA基于OPENXML的word文档插入、合并、替换操作系列之word文件合并[支持多文件]

    (五).JAVA基于OPENXML的word文档插入.合并.替换操作系列之word文件合并[支持多文件] 二.word合并的多种方案简单比较 三.基于Open Xml WordprocessingML ...

  6. word文档找不到smartart_图文详解Word文档插入SmartArt图形的方法

    这篇文章主要以图文结合的方式详细介绍了Word文档插入SmartArt图形的方法,具体内容如下 win7系统下Word文档插入SmartArt图形的方法分享给大家,我们经常使用Word文档编辑或保存资 ...

  7. java openxml 操作 word,(三)、JAVA基于OPENXML的word文档插入、合并、替换操作系列之html转word...

    (三).JAVA基于OPENXML的word文档插入.合并.替换操作系列之html转word 系列笔记传送门 富文本转word文档 准备待转换内容 内容清理与格式化 转换成word文档 输出结果展示 ...

  8. 可以将Word文档插入到CAD中吗?怎么操作?

    有工作中,我们经常会需要使用到Excel.Word等办公软件,像一些从事建筑.设计等行业的小伙伴们呢而言,有时候也会需要将CAD图纸中插入Word等内容,那么如何操作才能将Word插入到CAD图纸中呢 ...

  9. php怎么在表格里插图片,Python操作word文档插入图片和表格的实例演示

    今天带来Python操作word文档插入图片和表格的实例演示教程详解 前言 图片是Word的一种特殊内容,这篇文章主要介绍了关于Python操作word文档,向里面插入图片和表格的相关内容,下面话不多 ...

最新文章

  1. AI 创业周报第4期:AI芯片创企重磅发力,左手医生完成亿元 B 轮融资
  2. linux进程--写时拷贝技术copy-on-write(七)
  3. html 图片使用scale,CSS scale()用法及代码示例
  4. unix linux 安装mono,关于mono在linux连接unixodbc的问题
  5. CERC 2017 H:Hidden Hierarchy (模拟)
  6. 互斥量+条件变量实现 信号量
  7. 排查 java 程序CPU飙升问题
  8. txt文件内容导入mysql数据库中_将txt文件导入mysql数据库
  9. JS放大镜小功能功能之原理详细解析
  10. PID控制器的输入量和输出量的物理关系解释
  11. 半同步/半反应堆模型以及简单实现(一)
  12. C++书本综合实例(一)个人银行账户管理
  13. C++——m个月饼分给n个人
  14. Window操作系统基本知识
  15. 《ASP.NET AJAX程序设计 第I卷 服务器端ASP.NET AJAX Extensions与ASP.NET AJAX Control Toolkit》目录(最终定稿)...
  16. CentOS6实验模板机搭建
  17. 魔兽世界---熊猫人之谜
  18. 星起航:抖音小店体验分低怎么办,如何提高店铺体验评分?
  19. 画质超高的仙侠java游戏_画质超高的游戏有哪些?顶级画质大型游戏盘点
  20. Workrave怎么用 Workrave使用方法, Workrave 健康计时器,预防电脑长期操作的职业病伤害...

热门文章

  1. JS基础之数组--概述、创建数组的几种方式、数组的特点、数组的常用方法、数组的解构赋值、数组高级API
  2. C# 操作Excel加水印
  3. 【转载】用Python计算身份证校验码
  4. 疑惑!AI中台到底为什么火了?道翰天琼认知智能机器人平台API接口为您揭秘。
  5. 西瓜视频运营策略分析:借助平台优势实现内容升级
  6. python实现对输入日期计算日期为当年第几天
  7. centos7部署calamari
  8. 在CentOS 7 安装Calamari
  9. kotterKnife+dagger2+otto+okhttp+picasso+retrofit+rxjava示例项目,使用kotlin编写。
  10. 监控工具普罗米修斯(Prometheus)的介绍与安装