我用freemarker生成word文档,文档打开报错,用UE打开文档后发现文档没有写完,如下:
文件测试/w:t
/w:r
/w:p
<w:bottom w:val="single" w:sz="4" wx:bdrwidth="10" w:space="0" w:color="
写到color那就没了,为什么?
这个是java代码:
[code="java"]package com.feifei.test;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;
import java.io.Writer;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import freemarker.template.Configuration;
import freemarker.template.ObjectWrapper;
import freemarker.template.Template;
import freemarker.template.TemplateException;
public class CreateWordDemo {
private Configuration configuration = null;
public CreateWordDemo() {
configuration = new Configuration();
configuration.setDefaultEncoding("utf-8");
}
public void createDoc() {
//要填入模本的数据文件
Map dataMap=new HashMap();
getData(dataMap);
//设置模本装置方法和路径,FreeMarker支持多种模板装载方法。可以重servlet,classpath,数据库装载,
//这里我们的模板是放在com.havenliu.document.template包下面
configuration.setClassForTemplateLoading(this.getClass(), "/com/feifei/test/template");
Template t=null;
try {
//test.ftl为要装载的模板
t = configuration.getTemplate("test.ftl");
} catch (IOException e) {
e.printStackTrace();
}
//输出文档路径及名称
File outFile = new File("D:/tmp/outFile.doc");
Writer out = null;
try {
out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile), "utf-8"));
} catch (FileNotFoundException e1) {
e1.printStackTrace();
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
t.process(dataMap,out,ObjectWrapper.BEANS_WRAPPER);
} catch (TemplateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 注意dataMap里存放的数据Key值要与模板中的参数相对应
* @param dataMap
*/
private void getData(Map dataMap)
{
dataMap.put("remark", "这是测试备注信息");
List table=new ArrayList();
PersonEntity p1 = new PersonEntity();
p1.setName("yaofeihu");
p1.setXingzuo("tianxie");
table.add(p1);
dataMap.put("table", table);
}
public static void main(String[] args) {
CreateWordDemo c = new CreateWordDemo();
c.createDoc();
}
}
[/code]
下面这个是模板文件
[code="java"]<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<?mso-application progid="Word.Document"?>
feihu yao/o:Author
feihu yao/o:LastAuthor
2/o:Revision
1/o:TotalTime
2014-10-22T14:55:00Z/o:Created
2014-10-22T14:55:00Z/o:LastSaved
1/o:Pages
8/o:Words
46/o:Characters
Hewlett-Packard Company/o:Company
1/o:Lines
1/o:Paragraphs
53/o:CharactersWithSpaces
12/o:Version
/o:DocumentProperties
/w:font
/w:font
/w:font
/w:font
/w:font
/w:fonts
/w:latentStyles
/w:pPr
/w:rPr
/w:style
/w:style
/w:rPr
/w:tblCellMar
/w:tblPr
/w:style
/w:style
/w:pBdr
/w:tabs
/w:pPr
/w:rPr
/w:style
/w:rPr
/w:style
/w:tabs
/w:pPr
/w:rPr
/w:style
/w:rPr
/w:style
/w:rPr
/w:tblBorders
/w:tblCellMar
/w:tblPr
/w:style
/w:styles
/o:shapelayout
/w:shapeDefaults
/w:hdrShapeDefaults
/w:r
/w:p
/w:footnote
/w:footnotePr
/w:r
/w:p
/w:endnote
/w:endnotePr
/w:compat
wsp:rsids
/wsp:rsids
/w:docPr
/w:rPr
中国银行新一代印鉴管理系统/w:t
/w:r
/w:p
/w:rPr
java/w:t
/w:r
/w:rPr
生成/w:t
/w:r
/w:rPr
word/w:t
/w:r
/w:rPr
文件测试/w:t
/w:r
/w:p
/w:tblBorders
/w:tblPr
/w:tblGrid
/w:tcPr
/w:rPr
/w:pPr
/w:rPr
姓名/w:t
/w:r
/w:p
/w:tc
/w:tcPr
/w:rPr
/w:pPr
/w:rPr
星座/w:t
/w:r
/w:p
/w:tc
/w:tr
<#list table as person>
/w:tcPr
/w:rPr
/w:pPr
/w:rPr
${person.name}/w:t
/w:r
/w:p
/w:tc
/w:tcPr
/w:rPr
/w:pPr
/w:rPr
${person.xingzuo}/w:t
/w:r
/w:p
/w:tc
/w:tr
</#list>
/w:tbl
/w:rPr
备注:/w:t
/w:r
/w:rPr
${remark}/w:t
/w:r
/w:rPr
1/w:t
/w:r
/w:p
/w:sectPr
/w:body
/w:wordDocument[/code]