事前准备
由于ftl 文件可能在idea 中报 约束未注册的问题 URI is not registered 请参考下面的博客
链接: idea中xml或者ftl文件xmlns约束报红解决方案.
由于ftl 文件可能在eclipse中缺少freemarker 编译器导致失败的问题 要安装 freemarker ide 请参考下面的博客
链接: eclipse中离线安装 freemarker IDE 插件和jad反编译插件.
编辑ftl文件时常用的freemarker语法 请参考下面的博客
链接: freemarker ftl文件简单语法整理.
下载jar包
freemarker-2.3.30.jar
博客这两天上传附件老是失败,就不放在博客里了,有需要可以给我留言,或者自行搜索下载
编辑一个word模板
如图所示,一些要传参的地方可以提前使用freemarker的ftl语法,加入变量
模板处理
将编辑好的word转存为xml 格式,使用notepad++ 或者 ue打开
这是代码都是一行的比较乱,使用idea中 Ctrl+Alt+L 进行格式化,
或者 notepad++中的 插件 -> XML Tools-> pretty print(XML only with line breaks),或者直接快捷键 Ctrl alt shift B,进行格式化
编译之后每一行的标签是<w:tr>
同时注意对于列表中
要使用
表格循环用标签
<#list userList as user>
<w:tr>
姓名: u s e r . u s e r N a m e , 性 别 : {user.userName} , 性别: user.userName,性别:{user.sex}
</w:tr>
</#list>
再就是如果有图片会看到图片占位的地方,有一片base64编码后的代码,把base64替换成${image}
<pkg:part pkg:name="/word/media/image1.jpg" pkg:contentType="image/jpeg" pkg:compression="store">
<pkg:binaryData>${imagej}</pkg:binaryData>
</pkg:part>
<pkg:part pkg:name="/word/media/image2.PNG" pkg:contentType="image/png" pkg:compression="store">
<pkg:binaryData>${imagep}</pkg:binaryData>
</pkg:part>
在此过程中可以将创建人,文件生成时间等一些属性删去也是没有问题的
最后,更改文件后缀为 。.ftl
代码实现
工具处理类
WordUtil
package com.yucheng.cmis.util;
import java.io.BufferedWriter;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.io.StringWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Map;
import com.sun.org.apache.xerces.internal.impl.dv.util.Base64;
import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateException;
import freemarker.template.TemplateExceptionHandler;
import freemarker.template.Version;
import sun.misc.BASE64Encoder;
public class WordUtil {
// FreeMarker 配置
private static Configuration cfg;
//默认的给定公共文件路径
private static String basePath = System.getProperty("user.dir")+"/WebContent/WEB-INF/template";
/**
* @author JL-J 静态内部类,创建freeMarker 配置,实例化工具类
*/
private static class LazyHolder {
// 创建 freeMarker 配置 ,2.3.30 引入的freemarker 版本号
private static final Configuration config = new Configuration(new Version("2.3.30"));
// 实例化工具类
private static final WordUtil wu = new WordUtil();
}
/**
* 私有构造函数
*/