使用freemarker或者easypoi生成文档乱码问题

在开发过程中因为需要根据模板来生成对应的word文档和excel,在参考一圈后,决定使用freemarker和easypoi一起来做。可是在部署到Tomcat后,发现生成的文档中文乱码。并且飘忽不定,百度一圈,现在附上我的解决方法,希望能帮助到你。

1、修改编辑器编码,具体见下图

外链图片转存中...(img-hNlBhWsk-1676346181428)]

使用freemarker或者easypoi生成文档乱码问题_spring

红线标注的地方,最好调整成统一的编码

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>

以上是我遇到问题并解决的思路。

上一篇:ssh 登入报错问题解决过程记录