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

前言

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

一、导入依赖



    org.freemarker
    freemarker
    2.3.30

二、存入模板

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

基于Java+freemarker实现动态赋值以及生成Word文档_第1张图片

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

基于Java+freemarker实现动态赋值以及生成Word文档_第2张图片

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

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

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

基于Java+freemarker实现动态赋值以及生成Word文档_第3张图片

基于Java+freemarker实现动态赋值以及生成Word文档_第4张图片

三、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 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();
    }
}

四、运行效果

基于Java+freemarker实现动态赋值以及生成Word文档_第5张图片

你可能感兴趣的:(Java,后端,java)