Implementar asignación dinámica y generar documentos de Word basados en Java+freemarker

Prefacio

Existe el requisito de que, dada una plantilla de documento de Word con el formato correcto, es necesario escribir datos y generar nuevamente un documento de Word en el formato de plantilla mediante una asignación dinámica. Obviamente, esto es bastante sencillo de implementar usando Java+freemarker.

1. Importar dependencias

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

2. Guarde la plantilla

(1) Prepare un documento de Word con el formato correcto (documento de prueba: original.docx)

(2) Guárdelo como un archivo xml (documento de prueba: original.xml)

(3) Simplemente busque una herramienta de formato XML en línea para procesarlo (documento de prueba: [formato].xml original)

(4) Guarde la plantilla xml en el directorio /src/main/resources/templates/freemaker/

(5) Utilice expresiones EL para asignar valores a plantillas

3. XML a 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();
    }
}

4. Efecto de la operación

Supongo que te gusta

Origin blog.csdn.net/Cai181191/article/details/132815863
Recomendado
Clasificación