素材
1、Microsoft Office Word
2、Xml文档编辑器(Like:Firstobject free XML editor,传送门)
3、freemarker的jar包(可以通过maven引入,或去下载)
4、你熟悉的java编程工具()
步骤
1、编写模板
在word中编辑你要的模板,将需要替换的信息做好标记(自己要记住,写啥都可以,如图红色区域)
2、另存为word 2003 XML文档(为了保证兼容性)
3、用Firstobject free XML editor制作模板
找到替换文本,如果被打散,就删掉多余内容,如下图(“这里”往后到“填写姓名”之前都删掉)
然后替换这句话为${name},都为英文字符,“name”为你Map中的key值,自然最后此处会填写对应的value值
注意红色的区域 ">${name}<",两个尖括号之间不要有空格之类的符号。同样替换其他内容,然后保存,修改此文件后缀为:.ftl。这样模板文件就制作好了。
4、测试
public class WordUtils { private static final String templateFolder = "./in/"; public static void main(String[] args) { try { // 配置文件 Configuration cfg = new Configuration(); // 字符编码 cfg.setDefaultEncoding("utf-8"); // 模板目录 cfg.setDirectoryForTemplateLoading(new File(templateFolder)); // 加载模板文件 Template tpl = cfg.getTemplate("test.ftl"); // 准备数据 Map<String, String> data = new HashMap<>(); data.put("name", "张三丰"); data.put("age", "27"); // 生成文件 String outFIle = "./out/doc/test.doc"; File docFile = new File(outFIle); FileOutputStream fos = new FileOutputStream(docFile); Writer out = new BufferedWriter(new OutputStreamWriter(fos, "utf-8"), 10240); tpl.process(data, out); System.out.println("生成word文档:" + docFile.getAbsolutePath()); }catch (Exception e){ e.printStackTrace(); } } }
5、结果
In the end:如果要引入图片需要进过BASE64编码
参考资料:
1、https://www.cnblogs.com/zwqh/p/7182953.html
2、https://www.jianshu.com/p/f58802a29d8a