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


    前言

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

    一、导入依赖

    1. <dependency>
    2. <groupId>org.freemarkergroupId>
    3. <artifactId>freemarkerartifactId>
    4. <version>2.3.30version>
    5. 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

    1. import freemarker.template.Configuration;
    2. import freemarker.template.Template;
    3. import java.io.*;
    4. import java.util.HashMap;
    5. import java.util.Map;
    6. public class ConvertXmlToDoc {
    7. /**
    8. * Xml 转 Doc
    9. */
    10. private static void tranform() {
    11. Map map = new HashMap<>();
    12. map.put("question_1","一加一等于几");
    13. map.put("answer_1","二");
    14. map.put("question_2","什么叫余弦定理");
    15. map.put("answer_2","余弦定理,欧氏平面几何学基本定理。余弦定理是描述三角形中三边长度与一个角的余弦值关系的数学定理,是勾股定理在一般三角形情形下的推广,勾股定理是余弦定理的特例。");
    16. try {
    17. Configuration configuration = new Configuration(Configuration.VERSION_2_3_20);
    18. configuration.setClassForTemplateLoading(ConvertXmlToDoc.class, "/templates/freemaker"); // 指定 xml 模板存放的位置,即:项目目录/src/main/resources/templates/freemaker
    19. // 获取 xml 模板
    20. Template template = configuration.getTemplate("测试文档 - 原版【格式化】.xml");
    21. // 输出 doc/docx 文件
    22. File outFile = new File("D:/" + "测试文档 - 修订版【重制版】" + ".docx");
    23. Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile)));
    24. template.process(map, out);
    25. System.out.println("转换成功");
    26. } catch (Exception e) {
    27. System.out.println("转换失败");
    28. e.printStackTrace();
    29. }
    30. }
    31. public static void main(String[] args) {
    32. tranform();
    33. }
    34. }

    四、运行效果

  • 相关阅读:
    关闭mysql,关闭redis服务
    @PostConstruct虽好,请勿乱用
    牛客网剑指offer刷题练习之重构二叉树
    纯前端实现图片验证码
    攻防世界pwn题:Recho
    云洲智能IPO被终止:年营收2.5亿亏1.3亿 曾拟募资15.5亿
    vue3+te项目正式开发
    机器学习day4
    SpringBoot-过滤器Filter+JWT令牌实现登录验证
    前端综合面试题(持续更新)
  • 原文地址:https://blog.csdn.net/Cai181191/article/details/132815863