如题,我改了好几次代码,还是不行。贴上关键代码,麻烦大家帮我看看。
/**
 * 将文档内容输出到freeer模板中
 * 
 * @author wangpeng
 * @param tempPath
 *            xml输出路径
 * @param tempName
 *            xml文件的名称
 * @param document
 *            要输出内容的Document实体对象
 * @throws IOException
 * @throws TemplateException
 */
public void printerDocument(StringBuilder tempPath, String tempName,
Document document) throws IOException, TemplateException {

Configuration cfg = new Configuration();
// 从当前类路径中加载模板文件
cfg.setClassForTemplateLoading(this.getClass(), "");
// 设置空值处理方式
cfg.setClassicCompatible(true);
// 定义模板
Template template = cfg.getTemplate("document.ftl"); // 需要导出的文件在指定目录不存在时,给出异常信息
File file = new File(tempPath.toString());
if (!file.exists()) {
throw new ZbwtUtilException("导出失败:文件" + tempName + "在" + tempPath
+ "中未找到");
}
String xmlName = "/" + tempName + ".xml";
String xmlPath = tempPath.append(xmlName).toString(); // 定义输出
Writer out = new BufferedWriter(new OutputStreamWriter(
new FileOutputStream(xmlPath), "UTF-8")); // 定义数据
Map<String, Object> root = new HashMap<String, Object>(); // 获取全部操作日志
List<OperateLog> operateList = operateLogDao.findOperateLogByDataId(
document.getCategory().getCategoryId(), document.getDocumentId());
root.put("operateList", operateList);
// 获取关键字
List<Keyword> keywordList = keywordDao
.findAllKeywordsByCategoryAndData(document.getDocumentId(), document.getCategory().getCategoryId());
root.put("keywordList", keywordList);
// 获取机构人员
User user = userDao.findUserByUserId(document.getUsers().getId());
root.put("user", user);
// 获取加锁人员
User blockMan = userDao.findUserByUserId(document.getUsers().getId());
root.put("blockMan", blockMan);
Dept dept = user.getDept();
root.put("dept", dept == null ? "" : dept.getDeptName());
root.put("document", document); // 解释模板,并输出
template.process(root, out);
}freeer模板代码:
.<?xml version='1.0' encoding='UTF-8'?>
<电子文件封装包>
<封装包格式描述>本EEP根据中华人民共和国档案行业标准DA/T xxxx-20xx《基于XML的电子文件封装规范》生成</封装包格式描述>
<版本>2011</版本>
<被签名对象>
<#if document.documentType == 1>
<封装包类型>文件</封装包类型>
<#else>
<封装包类型>文件夹</封装包类型>
</#if>
<封装包类型描述>该封装包包含电子文件数据及其相关元数据。原始封装,未经修改</封装包类型描述>
<封装包创建时间>${document.documentCreateDate}</封装包创建时间>
<封装包创建单位><#if dept!=null && dept != "" >${dept.deptName}</#if></封装包创建单位>
<封装内容>
<文件实体块>
<文件实体>
<聚合层次>文件</聚合层次>
<电子文件号>${document.documentId}</电子文件号>
<内容描述>
<题名>${document.documentTitle}</题名>
<主题词>${document.documentTheme}</主题词>
<#list keywordList as keyword>
<关键词>${keyword.keyword}</关键词>
</#list>
<摘要></摘要>
<分类号>${document.category.categoryCode}</分类号>
<文件编号>${document.documentId}</文件编号>
<责任者>${document.users.userName}</责任者>
<日期>${document.documentCreateDate}</日期>
<文种></文种>
<紧急程度></紧急程度>
<主送></主送>
<抄送></抄送>
<密级></密级>
<保密期限></保密期限>
</内容描述>
<形式特征>
<文件组合类型>单件</文件组合类型>
<页数>0</页数>
<语种>${document.documentLanguage}</语种>
<稿本></稿本>
</形式特征>
<存储位置>
<当前位置>${document.documentSavePath}</当前位置>
<脱机载体编号></脱机载体编号>
<脱机载体存址></脱机载体存址>
<缩微号></缩微号>
</存储位置>
<权限管理>
<知识产权说明></知识产权说明>
<授权>
<授权对象>${document.accessList}</授权对象>
<授权行为></授权行为>
</授权>
<控制标识></控制标识>
</权限管理>
<信息系统描述>本文件由中标文通电子文件管理系统定制</信息系统描述>
<附注></附注>
<文件数据>
<文档>
<文档标识符></文档标识符>
<文档序号></文档序号>
<文档主从声明>主文档</文档主从声明>
<文档数据>
<编码 id="">
<电子属性>
<格式信息 >${document.documentPattern}</格式信息>
<计算机文件名></计算机文件名>
<计算机文件大小>${document.fmtDocumentSize}</计算机文件大小>
<文件创建程序></文件创建程序>
</电子属性>
<数字化属性>
<数字化对象形态></数字化对象形态>
<扫描分辨率></扫描分辨率>
<扫描色彩模式>黑白二值</扫描色彩模式>
<图像压缩算法></图像压缩算法>
</数字化属性>
<编码描述>本封装包中“编码数据”元素存储的是文档计算机文件二进制流的Base64编码,  有关Base64编码规则参见IETF RFC 2045 多用途邮件扩展(MIME)第一部分:互联网信息体格式。  当提取和显现封装在编码数据元素中的计算机文件时,应对Base64编码进行反编码,  并依据封装包中“反编码关键字”元素中记录的值还原计算机文件的扩展名</编码描述>
<反编码关键字></反编码关键字>
<编码数据></编码数据>
</编码>
</文档数据>
<题名></题名>
</文档>
<文档>
<文档标识符></文档标识符>
<文档序号></文档序号>
<文档主从声明>主文档</文档主从声明>

<文档数据>
<编码>
<电子属性>
<格式信息 >${document.documentPattern}</格式信息>
<计算机文件名>${document.documentTitle}</计算机文件名>
<计算机文件大小></计算机文件大小>
<文件创建程序></文件创建程序>
</电子属性>
<数字化属性>
<数字化对象形态></数字化对象形态>
<扫描分辨率></扫描分辨率>
<扫描色彩模式></扫描色彩模式>
<图像压缩算法></图像压缩算法>
</数字化属性>
<编码描述>本封装包中“编码数据”元素存储的是文档计算机文件二进制流的Base64编码,  有关Base64编码规则参见IETF RFC 2045 多用途邮件扩展(MIME)第一部分:互联网信息体格式。  当提取和显现封装在编码数据元素中的计算机文件时,应对Base64编码进行反编码,  并依据封装包中“反编码关键字”元素中记录的值还原计算机文件的扩展名</编码描述>
<反编码关键字></反编码关键字>
<编码数据>UjBsR09EbGhjZ0dTQUxNQUFBUUNBRU1tQ1p0dU1GUXhEUzhi</编码数据>
</编码>
</文档数据>
<题名></题名>
</文档>
</文件数据>
</文件实体>
<文件实体关系>
<文件标识符></文件标识符>
<被关联文件标识符></被关联文件标识符>
<关系类型></关系类型>
<关系></关系>
<关系描述></关系描述>
</文件实体关系>
</文件实体块>
<#list operateList as operate>
<业务实体块>
<业务实体>
<业务标识符></业务标识符>
<机构人员标识符>${operate.operateUser.userName}</机构人员标识符>
<文件标识符>${document.documentTitle}</文件标识符>
<业务状态>历史行为</业务状态>
<业务行为></业务行为>
<行为时间>${operate.fmtCreateTime}</行为时间>
<行为依据></行为依据>
<行为描述>${operate.operateInfo}</行为描述>
</业务实体>
</业务实体块>
</#list>
<机构人员实体块>
<机构人员实体>
<机构人员标识符>${user.userId}</机构人员标识符>
<机构人员类型><#if dept!=null && dept != "" >${dept.deptName}</#if></机构人员类型>
<机构人员名称>${user.userName}</机构人员名称>
<组织机构代码></组织机构代码>
<个人职位></个人职位>
</机构人员实体>
<机构人员实体关系>
<机构人员标识符></机构人员标识符>
<被关联机构人员标识符></被关联机构人员标识符>
<关系类型></关系类型>
<关系></关系>
<关系描述></关系描述>
</机构人员实体关系>
</机构人员实体块>
</封装内容>
</被签名对象>
</电子文件封装包>

解决方案 »

  1.   

    哦,已经解决了,原来有三处要注意一下编码集的设置
    (1)configuration.setDefaultEncoding("UTF-8");
    (2)Template t = configuration.getTemplate("模板文件","UTF-8");
    (3)Writer out = new BufferedWriter(new OutputStreamWriter(文件输出流 fos, "UTF-8"))
    我之前忘记设置第三处了,所以一直乱码。多谢楼上。 n_n