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

虾米姐 阅读:714 2021-03-31 20:58:50 评论:0

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); 
		 
		 
	} 
 
} 

项目结构图:

源码地址:待补充

声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

关注我们

一个IT知识分享的公众号