java自动化word报告

在生信工作中,我们经常会需要自动化出word报告,推荐使用java的freemaker模块处理。

首先需要自己在word内做出模板,并将需要填充的内容更改为${name}这样的格式,例如:

在这里插入图片描述

然后将docx文件另存为xml文件,用记事本打开查看更改的内容是否正常。

pom管理的在pom.xml中添加依赖模块,或者直接下载对应的jar包加入到环境

<dependency>
	<groupId>org.freemarker</groupId>
	<artifactId>freemarker</artifactId>
	<version>2.3.31</version>
</dependency>

添加生成docx文件的代码

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

import java.io.*;
import java.util.Map;

public class WriteDocx {

    private Configuration loadConfigue (String template) {
        Configuration cfg = new Configuration(Configuration.VERSION_2_3_31);
        cfg.setDefaultEncoding("UTF-8");
        try {
            File templatePath = new File(template);
            cfg.setClassForTemplateLoading(WriteDocx.class, templatePath.getParent());
        } catch (Exception e) {
            e.printStackTrace();
        }
        return cfg;
    }

    public void writeTemplate (String template, String outpath, Map<String, String> hashmap) {
        Configuration cfg = loadConfigue(template);
        try {
            File f_o = new File(outpath);
            BufferedWriter fileOutputStream = new BufferedWriter (new OutputStreamWriter (new FileOutputStream(f_o),"UTF-8"));
            Template temp = cfg.getTemplate((new File(template)).getName());
            temp.process(hashmap, new BufferedWriter(fileOutputStream));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

添加main函数

import java.io.IOException;
import java.util.HashMap;


public class PDF2Docx {

    public static void main(String[] args) throws IOException {

		HashMap HASHMAP = new HashMap<>();
		HASHMAP.put("name", "咩咩");
		HASHMAP.put("sex", "male");
		HASHMAP.put("age", "99");
		
		final String outPath = args[0];
		String template = "templates/template.xml";

        WriteDocx writeDocx = new WriteDocx();
        writeDocx.writeTemplate(template, outPath, HASHMAP);
    }

}

如果需要动态填充列表,就将HashMap写入到ArrayList即可,并在xml添加列表循环。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值