Freemarker导出生成word文档疑难杂症

生成word及工具类百度很多源码,案例,这里不做展示,只说下遇到的两个郁闷的问题:

1、Freemarker生成的word文档只能wps打开,office打开报错。

这个问题具体原因没弄清楚,百度也说了很多解决方案,但针对我的没有效果。

自身描述:docx文档,xml转换为word xml,word 2003 xml都试过。wps打开正常,office报错。notepad++打开内容一模一样。很郁闷为什么office就打不开。

解决处理:先把docx另存为doc,再将doc另存为word 2003 xml,改后缀ftl,改内容动态字段如:${username},ok。生成的doc文档wps,office都可以正常打开了。

2、导出的doc文档打开失败

原因:导出的doc文件对比后发现,xml节点多了一部分内容。还是搞不懂原因。归结到导出代码上,从IO流导出换上了本地文件导出,同一服务器肯定是本地文件可导出的。

导出代码:

/**
* 文件下载
* */
public static void dowlaod(String fileName, File outFile, HttpServletResponse response)
throws FileNotFoundException {
//解决下载文件时文件名乱码问题
byte[] fileNameBytes = fileName.getBytes(StandardCharsets.UTF_8);
fileName = new String(fileNameBytes, 0, fileNameBytes.length, StandardCharsets.ISO_8859_1);
// 下载本地文件
// 读到流中
InputStream inStream = new FileInputStream(outFile);// 文件的存放路径
// 设置输出的格式
response.reset();
response.setContentType("bin");
response.addHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\"");
// 循环取出流中的数据
byte[] b = new byte[100];
int len;
try {
while ((len = inStream.read(b)) > 0)
response.getOutputStream().write(b, 0, len);
inStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
ˆ Back To Top