java: 通过xml模板转成word文件

news2024/11/24 11:32:19

依赖: freemarker

        <dependency>
            <groupId>org.freemarker</groupId>
            <artifactId>freemarker</artifactId>
            <version>2.3.31</version> <!-- 请根据您的需求选择最新版本 -->
        </dependency>

代码展示

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

import java.io.FileWriter;
import java.io.IOException;
import java.io.StringWriter;
import java.util.HashMap;
import java.util.Map;

/**
 * @Description:
 * @Author zhou
 * @Date 2023/9/26 - 13:19
 */
public class TestXMLtoWord {
    public static void main(String[] args) {
        Map<String, Object> dataModel = getMapData();
        try {
            // 创建FreeMarker配置
            Configuration cfg = new Configuration(Configuration.VERSION_2_3_31);

            // 设置模板文件的位置
            cfg.setClassForTemplateLoading(TestXMLtoWord.class, "/templates");
            // 获取模板
            Template template = cfg.getTemplate("name.xml");

            // 使用FreeMarker渲染模板并将内容添加到Word文档
            StringWriter writer = new StringWriter();
            // 替换关键字
            template.process(dataModel, writer);
            // .doc .docx .xml 等文件都可以,只需要修改后缀
            try (FileWriter fileWriter = new FileWriter("output.doc")) {
                fileWriter.write(writer.toString());
            } catch (IOException e) {
                e.printStackTrace();
            }
            System.out.println("Word文档已生成成功!");
        } catch (IOException | TemplateException e) {
            e.printStackTrace();
        }
    }

    // 创建数据模型
    public static Map<String, Object> getMapData() {
        Map<String, Object> dataModel = new HashMap<>();
        dataModel.put("CREATE_MAN", "zhou");
        dataModel.put("CHECK_MAN", "zhou");

        dataModel.put("d1_operate_time_1", "test1");
        dataModel.put("d1_operate_time_2", "test2");
        dataModel.put("d1_operate_time_3", "test3");

        dataModel.put("d1_file_num_last_1", "tes1232t");
        dataModel.put("d1_file_num_last_2", "tes321t");
        dataModel.put("d1_file_num_last_3", "t111est");

        dataModel.put("d1_file_size_last_1", "tes222t");
        dataModel.put("d1_file_size_last_2", "te44st");
        dataModel.put("d1_file_size_last_3", "te33st");

        dataModel.put("d1_file_num_1", "te11st");
        dataModel.put("d1_file_num_2", "tes22t");
        dataModel.put("d1_file_num_3", "te33st");

        dataModel.put("d1_file_size_1", "te666st");
        dataModel.put("d1_file_size_2", "t222st");
        dataModel.put("d1_file_size_3", "te111st");

        return dataModel;
    }
}

文件展示

name.xml:word另存为xml文件

位置:\src\main\resources\templates

output.doc: .doc .docx .xml 等文件都可以,只需要修改后缀

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1044192.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

关于ElementUI之动态树+数据表格+分页实例

目录 一.ElementUI动态树 二.实例 2.1.数据表 2.2.后端 2.3.前端 三.书籍管理 3.1.数据表 3.2.后端 3.2.前端 好啦今天就分享到这了&#xff0c;希望能帮到你哦&#xff01;&#xff01;&#xff01; 一.ElementUI动态树 ElementUI提供了一个动态树组件&#xff08;Dynami…

Kotlin小节(二)

1、安全索引取值函数&#xff1a;getOrElse和getOrNull getOrElse&#xff1a;如索引值存在&#xff0c;返回索引处数值&#xff1b;索引值不存在&#xff0c;返回lamada值 getOrNull&#xff1a;如索引值存在&#xff0c;返回索引处数值&#xff1b;索引值不存在&#xff0c…

Git与Repo:开源开发的得力工具组合

Git与Repo&#xff1a;开源开发的得力工具组合 1. 引言 开源开发在当今的软件行业中扮演着至关重要的角色。它不仅推动了技术的创新和进步&#xff0c;也促进了开发者之间的合作与共享。随着越来越多的开源项目的涌现&#xff0c;有效的代码管理和版本控制成为了必不可少的工…

【已解决】‘python‘ 不是内部或外部命令,也不是可运行的程序或批处理文件

【已解决】‘python‘ 不是内部或外部命令&#xff0c;也不是可运行的程序或批处理文件 环境变量配置 已经下载了安装包的情况下&#xff0c;这个问题就是环境变量没有配置的问题&#xff08;共两个&#xff09;。 分别是pythonx.x\Scripts\和pythonx.x\ 自定义安装环境变量…

算法与数据结构-字符串匹配算法

文章目录 主串和模式串BF 算法RK 算法BM算法1. 坏字符规则2. 好后缀规则 主串和模式串 在开始讲解这个算法之前&#xff0c;我先定义两个概念&#xff0c;方便我后面讲解。它们分别是主串和模式串。这俩概念很好理解&#xff0c;我举个例子你就懂了。 比方说&#xff0c;我们…

HTTP代理SSL连接:保障网络安全的重要协议

HTTP代理SSL连接是一种网络安全协议&#xff0c;它结合了HTTP代理和SSL/TLS协议&#xff0c;用于在客户端和服务器之间建立加密通信通道。HTTP代理SSL连接可以保护数据在传输过程中不被窃听、篡改或伪造&#xff0c;从而确保数据的完整性、保密性和可靠性。在本文中&#xff0c…

selenium使用已经获取的cookies登录网站报错unable to set cookie的处理方式

用selenium半手动登录github获取其登录cookies后&#xff0c;保存到一个文件gtb_cookies.txt中。 然后用selenium使用这个cookies文件&#xff0c;免登录上github。但是报错如下&#xff1a;selenium.common.exceptions.UnableToSetCookieException: Message: unable to set co…

如何实现服务器时间同步

为什么要做时间同步 在进行系统测试的时候&#xff0c;服务器时间同步很重要。例如web应用服务器与数据库服务器的时间同步&#xff0c;有一个定时任务&#xff0c;它的执行&#xff0c;如果服务器直接时间不通过&#xff0c;可能造成执行周期出现混乱。 ntp实现服务器时间同…

服务断路器_Resilience4j介绍

什么是Hystrix 我们耳熟能详的就是Netflix Hystrix,这个断路器是SpringCloud中最早支持的一种容错方案&#xff0c;现在这个断路器已经处于维护状态&#xff0c;已经不再更新了&#xff0c;你仍然可以使用这个断路器&#xff0c;但是呢&#xff0c;我不建议你去使用&#xff0…

静态链接与动态链接

目录 静态链接 地址空间分配 静态链接的详细过程 静态链接库 动态链接 位置无关代码 延迟绑定机制 本篇会重点介绍静态链接&#xff0c;动态链接&#xff0c;延迟绑定机制 问&#xff1a;两个或者多个不同的目标文件是如何组成一个可执行文件的呢? 答&#xff1a;这就…

【计算机网络】 基于UDP的简单通讯(客户端)

文章目录 客户端流程代码实现添加头文件以及库依赖加载库创建套接字发送接收数据关闭套接字、卸载库 测试 客户端 流程 客户端跟服务端差不多&#xff0c;也要先加载库&#xff0c;在加载库之后也要创建套接字&#xff0c;但是客户端一定是没有绑定ip地址的&#xff0c;之后是…

【Java 基础篇】Java 注解详解

在 Java 编程中&#xff0c;注解&#xff08;Annotation&#xff09;是一种元数据&#xff0c;它提供了关于程序代码的额外信息。注解不直接影响程序的执行&#xff0c;但可以在运行时提供有关程序的信息&#xff0c;或者让编译器执行额外的检查。 本文将详细介绍 Java 注解的…

Mac电脑剪切键Command-X键失灵

在Mac上&#xff0c;Command-X键的剪切功能失效可能是由于键盘快捷键设置出现错误或者剪切的目标文件处于只读状态。 可以尝试以下方法进行解决&#xff1a; 1.检查键盘快捷键设置&#xff1a;转到Apple菜单 > 系统偏好设置 > 辅助功能 > 键盘 > 快捷键&#xff0c…

Pytorch梯度累积实现

前言 主要用于解决显卡内存不足的问题。 梯度累积可以使用单卡实现增大batchsize的效果 梯度累积原理 按顺序执行Mini-Batch&#xff0c;同时对梯度进行累积&#xff0c;累积的结果在最后一个Mini-Batch计算后求平均更新模型变量。 a c c u m u l a t e d ∑ i 0 N g r a…

nat综合实验

路漫漫其修远兮,吾将上下而求索。 实验目的如图 实验思路&#xff1a;配置内网&#xff0c;再配置外网&#xff0c;再做nat clien1配置 clien2配置 pc3配置 lsw1配置 sysname lsw1 # vlan batch 10 20 30 # interface MEth0/0/1 # interface Eth-Trunk1port link-type trunkp…

【Linux】IO操作

IO 典型 IO 模型阻塞 IO非阻塞 IO信号驱动 IO异步 IO常见问题 多路转接模型select 模型poll 模型epoll 模型 典型 IO 模型 IO 操作指的就是数据的输入输出操作&#xff1b;IO 过程可以分为两个步骤&#xff1a;等待 IO 就绪、数据拷贝 阻塞 IO 发起 IO 操作&#xff0c;若当…

【面试高高手】 —— Java基础(36题)

文章目录 1. 八大基本数据类型分类2. 重写和重载的区别3. int和integer区别4. Java的关键字5. 什么是自动装箱和拆箱&#xff1f;6. 什么是Java的多态性&#xff1f;7. 接口和抽象类的区别&#xff1f;8. Java中如何处理异常&#xff1f;9. Java中的final关键字有什么作用&…

iview 的table表格组件使单元格可编辑和输入

表格的列定义中&#xff0c;在需要编辑的字段下使用render函数 template表格组件 <Table border :data"data" :columns"tableColumns" :loading"loading"></Table>data中定义table对象 table: {tableColumns: [{title: 商品序号,k…

服务断路器_Resilience4j的断路器

断路器&#xff08;CircuitBreaker&#xff09;相对于前面几个熔断机制更复杂&#xff0c;CircuitBreaker通常存在三种状态&#xff08;CLOSE、OPEN、HALF_OPEN&#xff09;&#xff0c;并通过一个时间或数量窗口来记录当前的请求成功率或慢速率&#xff0c;从而根据这些指标来…

【JVM】第三篇 JVM对象创建与内存分配机制深度剖析

目录 一. JVM对象创建过程详解1. 类加载检查2. 分配内存2.1 如何划分内存?2.2 并发问题 3. 初始化4. 设置对象头5. 执行<init>方法 二. 对象头和指针压缩详解三. JVM对象内存分配详解四.逃逸分析 & 栈上分配 & 标量替换详解1. 逃逸分析 & 栈上分配2. 标量替…