java freemarker 通过ftl模板文件导出word文件发现在有中文地方出现在乱码,打开word文件提示xml错误解决办法
来源:互联网 发布:javascript和node.js 编辑:程序博客网 时间:2024/05/21 09:58
最近开发一个导出word模板文件在本机调整一直正常,但是在服务器下载下来的文件老提示xml错误,仔细查看发现出错的word文件以xml形式打开发现在在报错位置有乱码,
刚开始以为是word转xml是出现乱码,单独调试word转xml正常,那应该是向ftl文件中写入变量后以写到文件流中出现乱码。
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Map;
import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateException;
/**
* 导出word
* @author wfy
*
*/
public class FreemarkerUtil
{
private static FreemarkerUtil util;
private static Configuration cfg;
private FreemarkerUtil(){
}
/**
* 获取单例对象
* @param pname ftl模板文件所在路径
* @return
* @throws IOException
*/
public static FreemarkerUtil getInstance(String pname) throws IOException{
if(util==null){
cfg=new Configuration();
cfg.setDefaultEncoding("UTF-8");
//cfg.setClassForTemplateLoading(FreemarkerUtil.class, pname);
cfg.setDirectoryForTemplateLoading(new File(pname));
util=new FreemarkerUtil();
}
return util;
}
/**
* 获取模板对象
* @param fname 模板文件名称
* @return
*/
private Template getTemplate(String fname){
try
{
//return cfg.getTemplate(fname);
return cfg.getTemplate(fname, "UTF-8");
}
catch (IOException e)
{
e.printStackTrace();
}
return null;
}
/**
* 通过标准输出流输出模板的结果
* @param map 数据对象
* @param fname 模板文件名
*/
public void sprint(Map<String,Object>map,String fname){
try
{
getTemplate(fname).process(map, new PrintWriter(System.out));
}
catch (TemplateException e)
{
e.printStackTrace();
}
catch (IOException e)
{
e.printStackTrace();
}
}
/**
* 基于文件输出
* @param map 数据对象
* @param fname 模板文件名
* @param outpath 输出文件路径
*/
public void fprint(Map<String,Object> map, String fname, String outpath){
try
{
getTemplate(fname).process(map, new PrintWriter(new File(outpath),"UTF-8"));
}
catch (FileNotFoundException e)
{
e.printStackTrace();
}
catch (TemplateException e)
{
e.printStackTrace();
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
解决办法:是在三处标红的位置都加上"UTF-8" 之后所有问题解决
cfg.setDefaultEncoding("UTF-8");
cfg.getTemplate(fname, "UTF-8");
getTemplate(fname).process(map, new PrintWriter(new File(outpath),"UTF-8"));
- java freemarker 通过ftl模板文件导出word文件发现在有中文地方出现在乱码,打开word文件提示xml错误解决办法
- 【Word】Word运行时提示“Word在试图打开文件时遇到错误”的解决办法
- java freemarker模板 实现word文件导出
- java 将ftl文件作为模板导出word文档
- kei文件在用word打开时中文是乱码的解决办法
- Freemarker导出Word文件
- 在java 用xml模板通过freemarker生成word文档
- C# 导出Word报”无法打开Office open xml文件。因为文件内容有错误“ 解决方法
- java创建word打开后弹出无法打开office open xml文件....因为内容有错误提示
- 打开桌面word文件,出现乱码解决办法(未完待续)
- java使用 freemarker 模板生成word文件
- freemarker,*.ftl文件在eclipse中正确的打开方式
- freemarker,*.ftl文件在eclipse中正确的打开方式
- freemarker模板生成word文件
- 网上下载的word文档提示在试图打开文件时遇到错误的解决方法
- *.ftl文件中文乱码的解决办法:
- Word在试图打开文件时遇到错误。
- word在试图打开文件时遇到错误
- 使用GreenDao遇到的问题
- android studio 自动打包so
- 第1章 对象入门
- Lex & Yacc
- 数据库架构在美团点评的演变实践
- java freemarker 通过ftl模板文件导出word文件发现在有中文地方出现在乱码,打开word文件提示xml错误解决办法
- ae基于面要素生成柱状图
- 微服务架构设计的简单理解
- 在Ubuntu14上为Xen设置桥接网络
- 数据库及SQL----常用知识点总结
- Java JSON Date类型数据处理问题
- 给图片识别添加音效系统
- NSArray、NSMutableArray的copy、mutableCopy
- 优雅的使用python