基于Java+freemarker实现动态赋值以及生成Word文档

简介: 使用Java和Freemarker技术实现动态数据填充到Word文档模板并生成新的Word文档。

前言

有一个需求就是给定一个正确格式的 Word 文档模板,要求通过动态赋值方式,写入数据并新生成 该模板格式的 Word 文档。这很明显使用 Java+freemarker 方式来实现颇为简单。

一、导入依赖

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

二、存入模板

(1)准备好一个正确格式的 Word 文档(测试文档 - 原版.docx)

(2)将其另存为xml文件(测试文档 - 原版.xml)

(3)随便找个在线 XML 格式化工具处理一下(测试文档 - 原版【格式化】.xml)

(4)将该 xml 模板存放在 /src/main/resources/templates/freemaker/ 目录中

(5)使用 EL 表达式对模板进行赋值

三、Xml 转 Doc/Docx

(1)/src/main/java/org/example/test/Main.java

import freemarker.template.Configuration;
import freemarker.template.Template;

import java.io.*;
import java.util.HashMap;
import java.util.Map;

public class ConvertXmlToDoc {
   
   

    /**
     * Xml 转 Doc
     */
    private static void tranform() {
   
   
        Map<String, Object> map = new HashMap<>();
        map.put("question_1","一加一等于几");
        map.put("answer_1","二");
        map.put("question_2","什么叫余弦定理");
        map.put("answer_2","余弦定理,欧氏平面几何学基本定理。余弦定理是描述三角形中三边长度与一个角的余弦值关系的数学定理,是勾股定理在一般三角形情形下的推广,勾股定理是余弦定理的特例。");

        try {
   
   
            Configuration configuration = new Configuration(Configuration.VERSION_2_3_20);
            configuration.setClassForTemplateLoading(ConvertXmlToDoc.class, "/templates/freemaker"); // 指定 xml 模板存放的位置,即:项目目录/src/main/resources/templates/freemaker

            // 获取 xml 模板
            Template template = configuration.getTemplate("测试文档 - 原版【格式化】.xml");

            // 输出 doc/docx 文件
            File outFile = new File("D:/" + "测试文档 - 修订版【重制版】" + ".docx");
            Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile)));
            template.process(map, out);

            System.out.println("转换成功");
        } catch (Exception e) {
   
   
            System.out.println("转换失败");
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
   
   
        tranform();
    }
}

四、运行效果

目录
相关文章
|
6月前
|
前端开发 Cloud Native Java
Java||Springboot读取本地目录的文件和文件结构,读取服务器文档目录数据供前端渲染的API实现
博客不应该只有代码和解决方案,重点应该在于给出解决方案的同时分享思维模式,只有思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
Java||Springboot读取本地目录的文件和文件结构,读取服务器文档目录数据供前端渲染的API实现
|
8月前
|
JavaScript Java 测试技术
基于Java+SpringBoot+Vue实现的车辆充电桩系统设计与实现(系统源码+文档+部署讲解等)
面向大学生毕业选题、开题、任务书、程序设计开发、论文辅导提供一站式服务。主要服务:程序设计开发、代码修改、成品部署、支持定制、论文辅导,助力毕设!
|
10月前
|
Java API Apache
Java编程如何读取Word文档里的Excel表格,并在保存文本内容时保留表格的样式?
【10月更文挑战第29天】Java编程如何读取Word文档里的Excel表格,并在保存文本内容时保留表格的样式?
703 5
|
11月前
|
缓存 Java 程序员
Java|SpringBoot 项目开发时,让 FreeMarker 文件编辑后自动更新
在开发过程中,FreeMarker 文件编辑后,每次都需要重启应用才能看到效果,效率非常低下。通过一些配置后,可以让它们免重启自动更新。
216 0
|
11月前
|
安全 Java
java BigDecimal 的赋值一个常量
在 Java 中,`BigDecimal` 是一个用于精确计算的类,特别适合处理需要高精度和小数点运算的场景。如果你需要给 `BigDecimal` 赋值一个常量,可以使用其静态方法 `valueOf` 或者直接通过字符串构造函数。 以下是几种常见的方法来给 `BigDecimal` 赋值一个常量: ### 使用 `BigDecimal.valueOf` 这是推荐的方式,因为它可以避免潜在的精度问题。 ```java import java.math.BigDecimal; public class BigDecimalExample { public static void
281 4
|
11月前
|
Java Apache Maven
Java将word文档转换成pdf文件的方法?
【10月更文挑战第13天】Java将word文档转换成pdf文件的方法?
3570 1
|
11月前
|
Java
java构造方法时对象初始化,实例化,参数赋值
java构造方法时对象初始化,实例化,参数赋值
293 1
|
11月前
|
Java Linux
java读取linux服务器下某文档的内容
java读取linux服务器下某文档的内容
102 3
java读取linux服务器下某文档的内容
|
Java 测试技术 程序员
Java零基础(23) - Java赋值运算符,了解一下!
【9月更文挑战第2天】🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
179 12
|
Java Apache Maven
Java中使用poi+poi-tl实现根据模板导出word文档
这个过程不仅简化了文档生成的工作,而且保证了生成文档的一致性与准确性,特别适合于那些需要生成大量文档的自动化场景。通过以上步骤,Java开发人员可以实现高效、可靠的Word文档导出功能。
3004 0