引入jar包,freemarker.jar、apache-ant-zip-1.8.0.jar(制作压缩包使用)
或者maven
org.freemarker
freemarker
2.3.23
org.apache.ant
ant
1.8.0
1、准备ftl模板,先在一个word中模板排版好,然后另存为-保存成“Word 2003 XML文档” 后缀名是.xml的文件
注:模板中的值要使用占位符进行填充 ,如下图所示,“name”名称是根据后台代码来的,这里可以换成自己的
然后生成.xml文件后,可以利用网上格式化工具格式化看下 生成的模板文件是否正确,占位符“${name}”必须是完整的,中间不能含有其他字符
如果word模板中含有图片,图片在xml文件中展现的形式是Base64格式的 ,包含在和中,把Base64删掉,替换成占位符,我这里使用的是“${photo}”(和中除了占位符不能有其他代码,也不能换行,主要是下面两个标签内都不能有其他标签)
如果没有和标签的话,就是在模板中没有把图片放进去,需要把图片也放进去模板中,然后生成xml文件
${photo}
如果是多张图片的时候,就在模板文档里面放多张图片,然后看生成的模板样子,内容都是可以循环的,把共同部分拿出来,然后使用标签进行循环遍历,有些字段循环也是不一样,如下图所示,每个人可能模板不一样。
2、然后把保存的wordExport.xml文件 后缀名改成.ftl文件
3、后台代码
导出word工具类
WordUtils.javapackagetestword;
import java.io.*;importjava.util.Map;importjavax.servlet.ServletOutputStream;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;importfreemarker.template.Configuration;importfreemarker.template.Template;importsun.misc.BASE64Encoder;public classWordUtils {//配置信息,代码本身写的还是很可读的,就不过多注解了
private static Configuration configuration = null;//这里注意的是利用WordUtils的类加载器动态获得模板文件的位置//private static final String templateFolder = WordUtils.class.getClassLoader().getResource("../../").getPath() + "WEB-INF/templetes/";
public File exportMillCertificateWord(HttpServletRequest request, HttpServletResponse response, Map map,String title,String templateFolder,String toDirFloder) throwsIOException {
configuration= newConfiguration();
configuration.setDefaultEncoding("utf-8");//模板所在文件夹
configuration.setDirecto