第一步:制作word模板
第二步:格式转换,将word另存为xml
第三步:找到图片base64,删除base64替换成占位符${image},只修改图片的,其余的不用动
第四步:加入依赖
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.20</version>
</dependency>
第五步:代码实现:
package com.wxz;
import freemarker.template.Configuration;
import freemarker.template.Template;
import sun.misc.BASE64Encoder;
import java.io.*;
import java.util.HashMap;
import java.util.Map;
/**
* TODO
*
* @author wxz
* @date 2022/4/11 16:47
*/
public class TestWord {
public static void genWord(){
try {
Map<String,String> dataMap = new HashMap<String,String>();
dataMap.put("name", "二哈");
dataMap.put("sex", "女");
dataMap.put("birth", "1995-12-12");
dataMap.put("age", "27");
dataMap.put("address", "湖北省襄阳市保康县");
dataMap.put("image", getImgFileToBase64("D:\\image\\dog.png"));
Configuration configuration = new Configuration();
configuration.setDefaultEncoding("utf-8");
//.xml 模板文件所在目录
configuration.setDirectoryForTemplateLoading(new File("D:\\模板"));
// 输出文档路径及名称
File outFile = new File("D:\\test.doc");
//以utf-8的编码读取模板文件
Template t = configuration.getTemplate("test.xml","utf-8");
Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile), "utf-8"),10240);
t.process(dataMap, out);
out.close();
System.out.println("生成成功");
}catch (Exception e){
e.printStackTrace();
System.out.println("生成失败");
}
}
public static String getImgFileToBase64(String imgFile) {
//将图片文件转化为字节数组字符串,并对其进行Base64编码处理
InputStream inputStream = null;
byte[] buffer = null;
//读取图片字节数组
try {
inputStream = new FileInputStream(imgFile);
int count = 0;
while (count == 0) {
count = inputStream.available();
}
buffer = new byte[count];
inputStream.read(buffer);
} catch (IOException e) {
e.printStackTrace();
} finally {
if (inputStream != null) {
try {
// 关闭inputStream流
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
// 对字节数组Base64编码
return new BASE64Encoder().encode(buffer);
}
public static void main(String[] args) {
genWord();
}
}
第六步:测试