花花_新世界
从【程序猿】到【程序员】的进化历程
posts - 60,comments - 10,views - 11万

背景:政府项目很多用到审核完记录后填充到word文档中导出打印的功能

话不多说上代码


public void exportDetectContractFiling(){
QingDaMap qingDaMap = QingDaMap.NEW()
                .setv("xxx", "测试内容"));
        FreeMarkerTemplateUtil.fillTemplateMap("xxxx登记表.docx", QualityExportTemplateEnum.ENTRUSTMENT_REGISTRATION_FORM,
                qingDaMap);
}
package com.ruoyi.common.utils;


import freemarker.cache.ClassTemplateLoader;
import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateExceptionHandler;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;

import javax.servlet.http.HttpServletResponse;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.URLEncoder;

/**
 * 自由标记模板跑龙套
 *
 * @author doubleflower
 * @date 2023/08/08
 */
public class FreeMarkerTemplateUtil {
    private static final Configuration CONFIGURATION;

    private FreeMarkerTemplateUtil() {
    }

    public static Template getTemplate(String templateName) throws IOException {
        try {
            return CONFIGURATION.getTemplate(templateName);
        } catch (IOException var2) {
            throw var2;
        }
    }

    public static void fillTemplateEntity(String fileName, BaseTemplateExport templateName, Object data) {
        fillTemplateMap(fileName, templateName, QingDaMap.wrap(QingDaBeanUtil.javaBeanToMap(data)));
    }

    public static void fillTemplateMap(String fileName, BaseTemplateExport templateName, QingDaMap data) {
        try {
            Template template = getTemplate(templateName.getTemplateName());
            HttpServletResponse response =
                    ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getResponse();
            response.reset();
            response.setContentType("application/octet-stream");
            response.setCharacterEncoding("UTF-8");
            response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));
            PrintWriter out = response.getWriter();
            template.process(data, out);
            out.close();
        } catch (Throwable var6) {
            throw new RuntimeException(var6);
        }
    }


    public static InputStream fillStreamTemplateMap(BaseTemplateExport templateName, QingDaMap data) {
        try {
            ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
            OutputStreamWriter writer = new OutputStreamWriter(byteArrayOutputStream);
            Template template = getTemplate(templateName.getTemplateName());
            template.process(data, writer);
            writer.flush();
            return new ByteArrayInputStream(byteArrayOutputStream.toByteArray());
        } catch (Throwable var6) {
            throw new RuntimeException(var6);
        }
    }

    public static void clearCache() {
        CONFIGURATION.clearTemplateCache();
    }

    static {
        CONFIGURATION = new Configuration(Configuration.VERSION_2_3_31);
        CONFIGURATION.setTemplateLoader(new ClassTemplateLoader(FreeMarkerTemplateUtil.class, "/templates"));
        CONFIGURATION.setDefaultEncoding("UTF-8");
        CONFIGURATION.setTemplateExceptionHandler(TemplateExceptionHandler.RETHROW_HANDLER);
    }
}
package com.ruoyi.common.enums;

import com.ruoyi.common.utils.BaseTemplateExport;
import lombok.AllArgsConstructor;

/**
 * 质量检测模板枚举
 *
 * @author doubleflower
 * @date 2023/08/01
 */
@AllArgsConstructor
public enum QualityExportTemplateEnum implements BaseTemplateExport {

   

    /**
     * 建设工程现场检测方案登记表
     */
    ENTRUSTMENT_REGISTRATION_FORM {
        /**
         * 模板路径
         *
         * @return {@link String}
         */
        @Override
        public String getTemplateName() {
            return "detectContractFiling.ftl";
        }
    }
    

}

posted on   花花_新世界  阅读(77)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示

喜欢请打赏

扫描二维码打赏

了解更多