在开发过程中因为需要根据模板来生成对应的word文档和excel,在参考一圈后,决定使用freemarker和easypoi一起来做。可是在部署到Tomcat后,发现生成的文档中文乱码。并且飘忽不定,百度一圈,现在附上我的解决方法,希望能帮助到你。
1、修改编辑器编码,具体见下图
外链图片转存中...(img-hNlBhWsk-1676346181428)]
红线标注的地方,最好调整成统一的编码
2、代码编写注意
在创建writer时,使用此方法来进行创建。
Writer w = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(xmlTemp), "utf-8"));
在获取模板路径的时候,注意下编码格式
public class XmlToExcel {
private static XmlToExcel tplm = null;
private Configuration cfg = null;
private XmlToExcel() {
cfg = new Configuration();
try {
// 注册tmlplate的load路径
cfg.setClassForTemplateLoading(this.getClass(), "/template/");
String path = this.getClass().getClassLoader().getResource("").getPath() + "fileTemplate/";
System.out.println(this.getClass().getClassLoader().getResource("").getPath() + "fileTemplate/");
cfg.setDirectoryForTemplateLoading(new File(path));
} catch (Exception e) {
}
}
private static Template getTemplate(String name) throws IOException {
if (tplm == null) {
tplm = new XmlToExcel();
}
return tplm.cfg.getTemplate(name,"UTF-8");
}
/**
*
* @param templatefile 模板文件
* @param param 需要填充的内容
* @param out 填充完成输出的文件
* @throws IOException
* @throws TemplateException
*/
public static void process(String templatefile, Map param, Writer out) throws IOException, TemplateException {
// 获取模板
Template template = XmlToExcel.getTemplate(templatefile);
template.setOutputEncoding("UTF-8");
// 合并数据
template.process(param, out);
if (out != null) {
out.close();
}
}
}
3、pom文件修改
打包前,在pom文件中加入一下配置。把你模板的文件类型加入其中即可。
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
<excludes>
<exclude>**/*.docx</exclude>
<exclude>**/*.xlsx</exclude>
<exclude>**/*.xml</exclude>
</excludes>
</resource>
<resource>
<directory>src/main/resources</directory>
<filtering>false</filtering>
<includes>
<include>**/*.docx</include>
<include>**/*.xlsx</include>
<include>**/*.xml</include>
</includes>
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<configuration>
<warName>xxx</warName>
</configuration>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<excludes>
<exclude>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>
以上是我遇到问题并解决的思路。