做项目要生成Word文档时,一般都是先用Word把里面的内容写好,然后另存为mht文件,得到一个网页文件,这样程序就可以自动替换网页中得文件,然后让大家下载。
下载这里就不说了,很简单,如下处理一下就可以了。
String filename = new String("中文汉字.doc".getBytes(), "ISO8859-1");
response.setContentType("application/octet-stream");
response.setHeader("Content-Disposition", "attachment; filename=\"" + filename + "\"");
response.setCharacterEncoding("GB2312");
在把word另存为mht时,打开mht发现里面的汉字全部变成了XXXX;这样的格式,被html转义了,正常人无法看懂。所以,我的解决办法是先把html转义字符转成汉字,然后把charset从us-ascii全部替换成gb2312,就哦了。
下面一段代码可以把html转义字符转成汉字。然后你打开文件,全局替换一下us-ascii成gb2312。
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Main {
public static void main(String[] args) {
try {
FileReader mhtReader = new FileReader("d:\\源文件.mht");
FileWriter mhtWriter = new FileWriter("d:\\生成文件.doc");
BufferedReader bufReader = new BufferedReader(mhtReader);
BufferedWriter bufWriter = new BufferedWriter(mhtWriter);
String line = bufReader.readLine();
String lines = "";
//中
Pattern pattern = Pattern.compile("(\\d+);");
while (line != null) {
if (line.endsWith("=")) {
lines += line.substring(0, line.length()-1);
line = bufReader.readLine();
continue;
} else {
if (!"".equals(lines)) {
lines += line;
line = lines;
lines = "";
}
Matcher matcher = pattern.matcher(line);
while (matcher.find()) {
char c = (char) Integer.parseInt(matcher.group(1));
line = line.replaceFirst(matcher.group(), String.valueOf(c));
}
bufWriter.write(line + "\r\n");
line = bufReader.readLine();
}
}
bufWriter.flush();
bufWriter.close();
bufReader.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
最后,打开转化好的文件,在的下一行,插入Print,这样用word打开时,就是视图模式了。
到这里就完美啦!