springboot项目中利用Freemarker模板生成word文档-包含表格和图片

标题因项目需要导出word报告,就研究了一下java生成word,网上的文章无非就是那几种方式,最简单的还是使用Freemarker的模板导出word,下面简单介绍使用方法:

Freemarker介绍:

FreeMarker是一款模板引擎: 即一种基于模板和要改变的数据, 并用来生成输出文本(HTML网页、电子邮件、配置文件、源代码等)的通用工具。 它不是面向最终用户的,而是一个Java类库,是一款程序员可以嵌入他们所开发产品的组件。
FreeMarker是免费的,基于Apache许可证2.0版本发布。其模板编写为FreeMarker Template Language(FTL),属于简单、专用的语言。需要准备数据在真实编程语言中来显示,比如数据库查询和业务运算, 之后模板显示已经准备好的数据。在模板中,主要用于如何展现数据, 而在模板之外注意于要展示什么数据 [1] 。
------百度百科

我们利用Freemarker导出的本质也是通过组合好数据然后往模板里面对应的位置填充数据实现。

首先导入Freemarker的依赖:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>
# 版本的话还是用这个不容易出问题:
<dependency>
    <groupId>org.freemarker</groupId>
    <artifactId>freemarker</artifactId>
    <version>2.3.30</version>
</dependency>

制作ftl模板文件
word2003之后支持了xml格式,所以我们需要用word导出一份xml的文件,具体操作如下:
1.先预设好自己需要导出的格式,然后将需要输出的值用${}去占位,如果需要导出图片的话,要放一张图片去占位。
在这里插入图片描述
2.添加好占位符之后,将该Word文档另存为XML格式的文件
在这里插入图片描述

修改一下文件名称,保存
在这里插入图片描述
即得到一个XML文件
在这里插入图片描述
3.将xml文件放进idea,修改后缀名为ftl,使用格式化快捷键Ctrl+Alt+L,将内容格式化,这里转换成xml之后会将占位符分开例如这样:
在这里插入图片描述
需要将中间的多出来的部分删除掉,如果数据填充时为空会报错,解决方法可以在占位符里面加一个!,例如:"${name!}",如果是用集合点属性名的话需要用()包起来:"${(list.name)!}"
在这里插入图片描述
4.填充的图片转换成xml后会转换成base64的编码,需要把编码换成占位符:
在这里插入图片描述
在这里插入图片描述

5.需要导出表格的时候需要循环填充数据,这里就需要添加<#list><#list>,标签位置如何找,可以通过你的表格的最后一个表格头的名称找到表格结尾,我的表格结尾是"切片",那我就可以去xml中搜索切片两个字,找到后例如这样:

在这里插入图片描述
6.将文件放到resource目录下,这样方便项目打包后仍然可以找到模板,也可以将模板放在磁盘中,写代码时写成绝对路径,不过还是建议放在resource下。

在这里插入图片描述
7.代码层:编写你需要存放数据的实体类,这里就不展示了;编写控制层;编写实现层:

控制层:

 /**
     *
     * @param taskid  这个是我自己的业务需要的数据的id,你们可以根据自己实际业务处理
     * @param response
     * @return
     * @throws IOException
     */
  public Object downTestReport(@RequestParam(value = "taskid") String taskid, HttpServletResponse response) throws IOException {
   
        //获取报告的路径
        String path = remoteDetectio
Spring Boot是一个用于创建独立的、基于Spring的应用程序的框架。它简化了基于Spring的应用程序的开发过程,提供了自动配置和约定大于配置的原则。LibreOffice是一个开源的办公套件软件,它提供了创建和编辑Word文档等功能。Freemarker是一个适用于Java平台的模板引擎,可以实现动态生成文本文件,比如docx文档。 在Spring Boot应用程序使用LibreOffice和Freemarker来动态生成docx文档的过程如下: 1. 在pom.xml文件添加相关依赖: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-freemarker</artifactId> </dependency> <dependency> <groupId>org.libreoffice</groupId> <artifactId>libreoffice-java</artifactId> <version>1.1.0</version> </dependency> ``` 2. 创建一个Freemarker模板文件,用于定义生成docx文档的格式和内容。模板文件可以包含动态的变量,比如用户的姓名、日期等。 3. 在Spring Boot的主类创建一个API接口,用于接收生成docx文档的请求。可以使用`@GetMapping`或`@PostMapping`注解指定API的路径。 4. 在API的方法,使用Freemarker模板引擎来动态生成docx文档。可以使用`Configuration`类来加载模板文件,使用`Template`类来渲染模板生成文档内容。 5. 使用LibreOffice的Java API来将docx文档转换为其他文件格式,比如PDF。可以使用`OfficeManager`类来启动一个LibreOffice实例,使用`OfficeDocumentConverter`类来执行转换操作。 6. 将生成docx文档保存到服务器指定的目录,并返回给客户端进行下载。 通过以上步骤,就可以在Spring Boot应用程序利用Freemarker模板和LibreOffice实现动态生成docx文档的功能了。这样可以更加灵活和方便地生成各种格式的文档,并且可以自定义文档的内容和样式。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值