爱营销app,网站seo综合查询,网站没备案能百度推广吗,济南建网站市场这篇文章#xff0c;主要介绍如何使用JavaFreemarker模板引擎#xff0c;根据XML模板文件生成Word文档。 目录
一、导出Word文档
1.1、基础知识
1.2、制作模板文件
1.3、代码实现
#xff08;1#xff09;引入依赖
#xff08;2#xff09;创建Freemarker工具类
主要介绍如何使用JavaFreemarker模板引擎根据XML模板文件生成Word文档。 目录
一、导出Word文档
1.1、基础知识
1.2、制作模板文件
1.3、代码实现
1引入依赖
2创建Freemarker工具类
3测试案例代码
4运行效果 一、导出Word文档
1.1、基础知识
Word文件有两种后缀格式分别是doc和docxdoc是Word2003之前使用的docx是Word2007之后使用的可以说docx是对doc的扩展和优化。docx的响应速度、性能、占用空间都比doc更好另外docx本质上是一个zip格式的压缩文件底层是基于OOXML组织数据的也就是说docx底层其实就是使用XML组成的一系列文件然后使用程序渲染XML文件最终就是我们看到的Word文件样式啦。 我这篇文章中使用的Word模板文件就是利用docx后缀的核心思想是将docx文件转换成对应的XML文件然后修改XML文件中的内容将其改成Freemarker模板引擎中的占位符之后通过Freemarker渲染程序将占位符替换成实际的数据并且将替换之后的模板文件转换成docx文档这样就实现了根据模板文件生成Word文档啦。
注意freemarker中的占位符是${}例如这里使用的是【${name}】的形式那么传递的数据中就需要有一个叫做【name】的字段。
1.2、制作模板文件
首先创建一个docx后缀的Word文件文件中的内容你自己根据实际需求编写就可以啦我创建的docx文件内容如下所示 内容编辑完成之后将其另存为XML文件如下图所示 导出XML文件之后打开这个文件此时你会看到里面都是XML标签首先格式化一下这样看起来会舒服些可以检查一下你的占位符内容是否满足freemarker语法。因为有些时候我们导出的XML文件中可能会将【${xxx}】分隔成两行从而导致占位符失效所以有时候需要手动修改一下占位符。导出的Word XML文件内容大致如下所示 替换完成之后我们的Word模板文件就做好啦这个XML文件就是我们最终需要的Word模板文件后面需要使用到。
1.3、代码实现
1引入依赖
如果是SpringBoot的工程SpringBoot已经给我们提供了freemarker的启动器这使得我们可以快速的集成freemarker如下
!-- 引入 freemarker 依赖 --
dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-freemarker/artifactId
/dependency
如果是普通的Java工程可以引入下面的依赖
!-- https://mvnrepository.com/artifact/org.freemarker/freemarker --
dependencygroupIdorg.freemarker/groupIdartifactIdfreemarker/artifactIdversion2.3.30/version
/dependency
2创建Freemarker工具类
引入freemarker依赖之后就可以使用Freemarker编写一个工具类专门用于处理文件的导出和数据渲染。 package com.gitcode.demo.util;import freemarker.template.Configuration;
import freemarker.template.Template;import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStreamWriter;
import java.nio.charset.StandardCharsets;
import java.util.Map;/*** version 1.0.0* Date: 2023/8/4 15:05* Author ZhuYouBin* Description: Freemarker 工具类*/
public class FreemarkerUtil {/*** 使用 Freemarker 生成 Word 文件* param templateName 模板文件路径名称* param fileName 生成的文件路径以及名称* param dataModel 填充的数据对象*/public static void exportWord(String templateName, String fileName, MapString, Object dataModel) {generateFile(templateName, fileName, dataModel);}/*** 使用 Freemarker 生成指定文件* param templateName 模板文件路径名称* param fileName 生成的文件路径以及名称* param dataModel 填充的数据对象*/private static void generateFile(String templateName, String fileName, MapString, Object dataModel) {try {// 1、创建配置对象Configuration config new Configuration(Configuration.VERSION_2_3_30);config.setDefaultEncoding(utf-8);config.setClassForTemplateLoading(FreemarkerUtil.class, /templates);// 2、获取模板文件Template template config.getTemplate(templateName);// 3、创建生成的文件对象File file new File(fileName);FileOutputStream fos new FileOutputStream(file);BufferedWriter writer new BufferedWriter(new OutputStreamWriter(fos, StandardCharsets.UTF_8));// 4、渲染模板文件template.process(dataModel, writer);// 5、关闭流writer.close();} catch (Exception e) {e.printStackTrace();}}}
3测试案例代码
package com.gitcode.demo.word;import com.gitcode.demo.util.FreemarkerUtil;import java.util.HashMap;
import java.util.Map;/*** version 1.0.0* Date: 2023/8/4 15:26* Author ZhuYouBin* Description: 使用 Freemarker 导出 Word 文件*/
public class ExportWordDemo {public static void main(String[] args) {String templateName freemarker模板文件.xml;String fileName 导出的word文档.docx;MapString, Object dataModel new HashMap();dataModel.put(name, 张三);dataModel.put(sex, 男);dataModel.put(age, 20);dataModel.put(address, xxx地址yyy号);// 执行导出FreemarkerUtil.exportWord(templateName, fileName, dataModel);}
}
4运行效果
运行测试案例的代码然后在工程目录下就可以看到生成的Word文档内容如下所示 上面的模板文件只是简单的文本你也可以添加表格、图片等内容到模板文件里面可以使用Freemarker中的循环标签实现表格数据的自动添加图片内容是采用base64编码所以需要读取图片将其转换成base64编码之后再渲染到XML文件中后面的文章在介绍表格和图片的模板导出。
到此Freemarker导出Word文档就介绍完啦。 综上这篇文章结束了主要介绍如何使用JavaFreemarker模板引擎根据XML模板文件生成Word文档。