freemarker与word的xml来生成word

1.将word打开 -- 另存为 word(xml)格式
2.打开xml文件 进行格式化下(可以百度在线xml格式化)
3.将xml文件的后缀改为ftl 格式的
4.将ftl文件 放置项目reource下的(filetemplate)自定义路径也行
5.需要在pom中加jar包,进行导包
	<dependency>
			<groupId>org.freemarker</groupId>
			<artifactId>freemarker</artifactId>
			<version>2.3.23</version>
		</dependency>
6写代码 

			wordParamsMap.put("year", year); // 年份    ${year}-->对应ftl中的位置占位符
			wordParamsMap.put("month", monthStr); // 月份、季度
			wordParamsMap.put("system", taskName); // 定级系统
			wordParamsMap.put("number1", number1); // 主机资产数量
			wordParamsMap.put("number2", number2); // 网络资产数量
			wordParamsMap.put("reportList", list);
			wordParamsMap.put("fileName", "中国电****作日志审计报告");  // word 文件名
			/*数据填充 结束*/
			exportWord(wordParamsMap);


	/**
	 * word生成 (使用freemarker与word的xml来生成word)
	 * @throws Exception 
	 */
	@Override
	public void exportWord(Map<String, Object> ParamsMap) throws Exception {
		
//		String fileName = "exportWord_";
		String fileName = ParamsMap.get("fileName")+".docx";
		//复制模版文件到指定目录
		String path = basePath+"/exportReport/" + DateUtil.date2Str(new Date(),DateUtil.DATE_FORMAT);
		File f = new File(path);
		if (!f.exists()) {
			f.mkdirs();
		}
//		fileName +=DateUtil.date2Str(new Date(),DateUtil.DATE_TIME_FORMAT) + ".docx";
		String fullPath = path+java.io.File.separatorChar+ fileName;
		
		//模版复制到对应路径(base工具类需要操作有相对路径的文件夹)
		String newTemplateTempPath = basePath+java.io.File.separatorChar+"filetemplate";
		String templateName = "auditStrategyReport.ftl";//模版名称
		FileUtil.copyFile2("filetemplate"+java.io.File.separatorChar+"auditStrategyReport.ftl", 
				newTemplateTempPath+java.io.File.separatorChar+templateName, true);
		//生成word
		exportByFreemarker.generateWord(newTemplateTempPath,templateName,fullPath,ParamsMap);
		FileUtil.deleteDirectory(newTemplateTempPath);     ---->util类
		
		
	}


package com.som.cloud.util.export.word;

import freemarker.template.*;
import org.springframework.stereotype.Component;

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

/**
 * 使用freemarker与word的xml来生成word
 * @Author: linww
 * @Date: Created in 10:38 2018/4/18.
 */
@Component("ExportByFreemarker")
public class ExportByFreemarker {

    private Configuration configuration = null;
    public static Version version = new Version("2.3.23"); //FreeMarker版本号// 模板对象
    public static Template template;

    public static DefaultObjectWrapperBuilder defaultObjectWrapperBuilder;

    public ExportByFreemarker(){
        configuration = new Configuration(version);//设置FreeMarker版本号
        configuration.setDefaultEncoding("UTF-8");//设置默认编码
        configuration.setNumberFormat("#");
        defaultObjectWrapperBuilder = new DefaultObjectWrapperBuilder(version); //用于创建defaultObjectWrapper
    }

    //生成word
    public boolean generateWord(String xmlTemplatePath, String xmlTemplateName, String outWordPath, Map<String,Object> wordParamsMap) throws Exception{
        configuration.setDirectoryForTemplateLoading(new File(xmlTemplatePath));
        configuration.setObjectWrapper(defaultObjectWrapperBuilder.build());
        template = configuration.getTemplate(xmlTemplateName);//获取模版文件
        File outFile = new File(outWordPath);
        Writer out = null;
        FileOutputStream fos = new FileOutputStream(outFile);
        out = new OutputStreamWriter(fos, "UTF-8");
        template.process(wordParamsMap,out);
        out.flush();
        out.close();

        return false;
    }
}

  

posted @ 2022-02-15 15:59  梦幻&浮云%  阅读(168)  评论(0编辑  收藏  举报