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.作者投稿可能会经我们编辑修改或补充。