1、整体思路
利用xml模板,在模板中预留占位标识(${yourContent}),然后将xml转为ftl文件,通过Map传值填充对应的内容即可,word其实和html一样,也有自己的xml标签,表头、段落、图片、以及字体、标题等的标签。文字必须包含在段落中,如:
${yourContent}
,图片必须是在${image}
其中、和有几个必填参数,后面的代码会涉及到。集合的循环遍历通过${alias.property}...#list>方式实现。
2、生成模板
新建word模板,设置自己要替换的内容。比如下面例子:
我的文档
作者:author 时间:time 内容:content
把新建好的word导出成word2003xml文件,然后将author改成${author},time改成${time},content改成${content}然后修改后缀名为ftl文件,存到项目里面。
3、替换内容
实际操作中,不光会遇到纯文字的,经常会遇到文字加图片。图片的实现:先转换成base64的字符串,然后填充到图片的标签中(网络图片,必须先下载到本地才能转换)。下面是转换的代码:
----------
/**
* 替换内容中的图片,样式
*
* @param content
* @return
* @throws Exception
*/
public String replaceImage(String content) throws Exception {
try {
Pattern p = Pattern.compile("]+src\\s*=\\s*['\"]([^'\"]+)['\"][^>]*>");
Matcher m = p.matcher(content);
int i = 0;
content = StyleFilter.shieldStyle(content);
while (m.find()) {
String width = getWidth(m.grou