freemarker 生成基于Word 模板的Word文档

freemarker 简介:

FreeMarker是一个用Java语言编写的模板引擎,它基于模板来生成文本输出。FreeMarker与Web容器无关,即在Web运行时,它并不知道Servlet或HTTP。它不仅可以用作表现层的实现技术,而且还可以用于生成XML,JSP或Java 等。

Word 转换为ftl 文件

找到Word模板文件,将文件另存为*xml 格式

修改xml 文件,添加freemarker 的占位符

项目编码流程:

1、添加相关依赖

2、编写相关工具类

pom.xml 文件

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>com.zzg</groupId>
	<artifactId>common-func</artifactId>
	<version>0.0.1-SNAPSHOT</version>

	<dependencies>
		<!--集成freemarker -->
		<dependency>
			<groupId>org.freemarker</groupId>
			<artifactId>freemarker</artifactId>
			<version>2.3.23</version>
		</dependency>
		<!--集成 commons-codec 加密 -->
		<dependency>
			<groupId>commons-codec</groupId>
			<artifactId>commons-codec</artifactId>
			<version>1.10</version>
		</dependency>
	</dependencies>
</project>
package com.zzg.freemarker.entity;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;
import java.io.Writer;
import java.util.Map;

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

public class TemplateEntity {
	// ftl 包路径
	private String ftlPackagePath;
	// ftl 文件名称
	private String ftlFileName;

	private Configuration configuration = null;
	private Template template = null;
	
	// get 和 set 方法
	public String getFtlPackagePath() {
		return ftlPackagePath;
	}

	public void setFtlPackagePath(String ftlPackagePath) {
		this.ftlPackagePath = ftlPackagePath;
	}

	public String getFtlFileName() {
		return ftlFileName;
	}

	public void setFtlFileName(String ftlFileName) {
		this.ftlFileName = ftlFileName;
	}

	public TemplateEntity(String ftlPackagePath,String ftlFileName) {
		this.ftlPackagePath = ftlPackagePath;
		this.ftlFileName = ftlFileName;
		// freemarker 模板配置对象
		configuration = new Configuration();
		// 设置编码格式: utf-8
		configuration.setDefaultEncoding("utf-8");
		// 设置ftl 文件目录
		configuration.setClassForTemplateLoading(TemplateEntity.class, this.ftlPackagePath);
		// 设置ftl 文件
		try {
			template = configuration.getTemplate(this.ftlFileName);
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
	public void createTemplate(Map data, String docFileName){
		File file = new File(docFileName);
		if(file.exists()){
			try {
				file.createNewFile();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		try {
			Writer writer = new OutputStreamWriter(new FileOutputStream(file),"utf-8");
			template.process(data, writer);
			writer.close();
		} catch (UnsupportedEncodingException | FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (TemplateException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}
	
	

	

}
package com.zzg.util;

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;

import org.apache.commons.codec.binary.Base64;


public class Base64Util {
	
	/**
	 * 
	 * @Title: getEncodeValue   
	 * @Description: 根据指定图片路径,获取Base64.encode的值  
	 * @param: @param imagePath
	 * @param: @return      
	 * @return: String      
	 * @throws
	 */
	public static String getEncodeValue(String imagePath){
		String content = null;
		InputStream in = null;
        byte[] data = null;
        try {
            in = new FileInputStream(imagePath);
            data = new byte[in.available()];
            in.read(data);
            in.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        content = Base64.encodeBase64String(data);
		return content;
	}

}

测试:

package com.zzg.freemarker.test;

import java.util.HashMap;
import java.util.Map;

import com.zzg.freemarker.entity.TemplateEntity;
import com.zzg.util.Base64Util;

public class FreemarkerTest {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		// 图片数据
		String imageContent = Base64Util.getEncodeValue("C:\\image\\1.png");
		// 数据组装
		Map<String,Object> map = new HashMap<String,Object>();
		map.put("imageurl", imageContent);
		map.put("name", "zhouzhiwengang");
		map.put("time", "2019-04-03");
		map.put("factory", "深圳富士康");
		map.put("product", "苹果电脑");
		map.put("price", "8999");
		map.put("num", "十万台");
		
		// 构建模板引擎实体对象
		TemplateEntity entity = new TemplateEntity("/com/zzg/ftl","template.ftl");
		String docFileName = "C:\\image\\测试模板.doc";
		entity.createTemplate(map, docFileName);
		
		
	}

}

项目结构图:

源码地址:待补充

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值