使用freemarker导出word模板下载

目录

一.导入jar包

二.制作模板

三.代码应用

四.测试

一.导入jar包

        <dependency>
            <groupId>org.freemarker</groupId>
            <artifactId>freemarker</artifactId>
            <version>2.3.30</version>
        </dependency>

二.制作模板

  1. 往模板填入动态参数 personName、phone、address

  1. 将文件另存为xml格式

3.使用记事本或者其他文本工具打开xml格式文件,搜索刚刚输入的参数,将参数放在${}里面

4.保存之后直接修改文件的后缀名为ftl

模板就算是制作完成,后面编写代码即可

三.代码应用

控制层

package com.xinke.sunshine_ebid.webapp;

import com.xinke.sunshine_ebid.service.TestService;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;

@CrossOrigin
@RestController
@RequestMapping(value = "/Test")
public class TestController {
    @Resource
    private TestService testService;

    /**
     * 使用freemarker导出word模板
     * @param response
     * @throws Exception
     */
    @GetMapping("/test2")
    public void recordSheetWord2(HttpServletResponse response) throws Exception{
        testService.test2(response);
    }
}

业务逻辑层

package com.xinke.sunshine_ebid.service;

import com.xinke.sunshine_ebid.common.utils.CustomXWPFDocument;
import com.xinke.sunshine_ebid.common.utils.WordUtil;
import freemarker.template.Configuration;
import freemarker.template.Template;
import org.apache.poi.xwpf.usermodel.*;
import org.springframework.stereotype.Service;

import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.Writer;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.util.HashMap;
import java.util.Map;

@Service
public class TestService {

    public void test2(HttpServletResponse response) throws Exception{
        Map<String, Object> params = new HashMap<>();

        params.put("personName","测试姓名");
        params.put("phone","18888888888");
        params.put("address","凡尔赛");

        // 需要设置的文件名
        String fileName = "文件名称";
        // 模板的文件名
        String filePath = "test2.ftl";
        response.setContentType("application/msword");
        response.setCharacterEncoding(StandardCharsets.UTF_8.name());
        response.setContentType("application/x-zip-compressed");
        response.setHeader("Content-disposition", "attachment;filename=" + URLEncoder.encode(fileName,"UTF-8") + ".docx");

        //创建配置实例
        Configuration configuration = new Configuration();
        //设置编码
        configuration.setDefaultEncoding("UTF-8");
        // 模板所在文件位置
        configuration.setDirectoryForTemplateLoading(new File("fileRecord/template/word"));
        //获取模板
        Template template = configuration.getTemplate(filePath,"UTF-8");
        // 也可以修改成生成文件存放在本地
        Writer out = response.getWriter();
        //生成文件
        template.process(params, out);
        //关闭流
        out.flush();
        out.close();

    }
}

模板存放位置案例

四.测试

调用本地接口进行测试:localhost:端口号/Test/test2

导出成功

猜你喜欢

转载自blog.csdn.net/GuaGea/article/details/131420632
今日推荐