基于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();
    }
}

四、运行效果

目录
相关文章
|
25天前
|
Java API Apache
Java编程如何读取Word文档里的Excel表格,并在保存文本内容时保留表格的样式?
【10月更文挑战第29天】Java编程如何读取Word文档里的Excel表格,并在保存文本内容时保留表格的样式?
105 5
|
4月前
|
XML 数据采集 存储
使用Java和XPath在XML文档中精准定位数据
在数据驱动的时代,从复杂结构中精确提取信息至关重要。XML被广泛用于数据存储与传输,而XPath则能高效地在这些文档中导航和提取数据。本文深入探讨如何使用Java和XPath精准定位XML文档中的数据,并通过小红书的实际案例进行分析。首先介绍了XML及其挑战,接着阐述了XPath的优势。然后,提出从大型XML文档中自动提取特定产品信息的需求,并通过代理IP技术、设置Cookie和User-Agent以及多线程技术来解决实际网络环境下的数据抓取问题。最后,提供了一个Java示例代码,演示如何集成这些技术以高效地从XML源中抓取数据。
147 7
使用Java和XPath在XML文档中精准定位数据
|
2月前
|
安全 Java
java BigDecimal 的赋值一个常量
在 Java 中,`BigDecimal` 是一个用于精确计算的类,特别适合处理需要高精度和小数点运算的场景。如果你需要给 `BigDecimal` 赋值一个常量,可以使用其静态方法 `valueOf` 或者直接通过字符串构造函数。 以下是几种常见的方法来给 `BigDecimal` 赋值一个常量: ### 使用 `BigDecimal.valueOf` 这是推荐的方式,因为它可以避免潜在的精度问题。 ```java import java.math.BigDecimal; public class BigDecimalExample { public static void
|
2月前
|
Java Linux
java读取linux服务器下某文档的内容
java读取linux服务器下某文档的内容
38 3
java读取linux服务器下某文档的内容
|
2月前
|
Java Apache Maven
Java将word文档转换成pdf文件的方法?
【10月更文挑战第13天】Java将word文档转换成pdf文件的方法?
244 1
|
2月前
|
Java
java构造方法时对象初始化,实例化,参数赋值
java构造方法时对象初始化,实例化,参数赋值
55 1
|
2月前
|
缓存 Java 程序员
Java|SpringBoot 项目开发时,让 FreeMarker 文件编辑后自动更新
在开发过程中,FreeMarker 文件编辑后,每次都需要重启应用才能看到效果,效率非常低下。通过一些配置后,可以让它们免重启自动更新。
30 0
|
2月前
|
存储 Java 编译器
[Java]基本数据类型与引用类型赋值的底层分析
本文详细分析了Java中不同类型引用的存储方式,包括int、Integer、int[]、Integer[]等,并探讨了byte与其他类型间的转换及String的相关特性。文章通过多个示例解释了引用和对象的存储位置,以及字符串常量池的使用。此外,还对比了String和StringBuilder的性能差异,帮助读者深入理解Java内存管理机制。
21 0
|
3月前
|
Java 测试技术 程序员
Java零基础(23) - Java赋值运算符,了解一下!
【9月更文挑战第2天】🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
62 11
|
4月前
|
Java API 数据中心
百炼平台Java 集成API上传文档到数据中心并添加索引
本文主要演示阿里云百炼产品,如何通过API实现数据中心文档的上传和索引的添加。
112 3