• freemarker导出pdf


    freemarker模板导出doc的之前有写过,这里就不再多说了,不清楚的可以看之前的文章Freemarker 模板导出(带图片)

    转换后的文件展示

    在这里插入图片描述

    FreemarkerUtils工具类(这里用的工具类导出和之前不一样,不仅仅是页面进行下载,还有本地的保存)

    package com.sinosoft.common.utils.freemarker;
    
    import freemarker.template.Configuration;
    import freemarker.template.Template;
    
    import javax.servlet.http.HttpServletResponse;
    import java.io.*;
    import java.net.URLEncoder;
    import java.nio.charset.StandardCharsets;
    import java.util.ArrayList;
    import java.util.List;
    import java.util.Map;
    import java.util.Objects;
    
    /**
     * @author 庭前云落
     * @description
     * @date 2022年07月25日 10:45
     */
    public class FreemarkerUtils {
    
        /**
         * 使用 freemarker 生成word文档
         *
         * @param templateDir  模板所在目录路径
         * @param templateName 模板 例如:xxx.ftl
         * @param data         数据
         * @param fileSavePath 文档生成后,存放的路径
         * @param fileName     生成后的文件名称
         * @param response
         * @throws Exception
         */
        public static void freemarkerExport(String templateDir, String templateName, Map<String, Object> data, String fileSavePath, String fileName, HttpServletResponse response) throws Exception {
            // 1.设置 freeMarker的版本和编码格式
            Configuration configuration = new Configuration(Configuration.VERSION_2_3_22);
            configuration.setDefaultEncoding("UTF-8");
            // 2.设置 freeMarker生成Word文档,所需要的模板的路径
            configuration.setDirectoryForTemplateLoading(new File(templateDir));
            // 3.设置 freeMarker生成Word文档所需要的模板 ---> xxx.ftl
            Template t = null;
            try {
                // 模板文件名称
                t = configuration.getTemplate(templateName);
            } catch (IOException e) {
                throw new IOException("获取 ftl模板失败!" + e.getMessage());
            }
            File fileDir = new File(fileSavePath);
            if(!fileDir.exists()){
                fileDir.mkdirs();
            }
            // 4.生成 Word文档的全路径名称
            File outFile = new File(fileSavePath + fileName);
            System.out.println(outFile);
            // 5.创建一个 Word文档的输出流
            Writer writer = null;
            try {
                writer = new OutputStreamWriter(new FileOutputStream(outFile), StandardCharsets.UTF_8);
            } catch (Exception e) {
                throw new Exception(e.getMessage());
            }
            try {
                for (Map.Entry<String, Object> entry : data.entrySet()) {
                    if (Objects.isNull(entry.getValue())) {
                        data.put(entry.getKey(), "");
                        System.out.println("您输入的" + entry.getKey() + "为空!");
                    }else{
                        // String value=entry.getValue().toString().replaceAll("<", "<").replaceAll(">", ">").replaceAll("\n","");
                        if (!Objects.isNull(entry.getValue()) && entry.getValue().getClass().isInstance(String.class)) {
                            String value=entry.getValue().toString().replaceAll("<", "<").replaceAll(">", ">").replaceAll("\n","");
                            data.put(entry.getKey(),value );
                        }
                        if (!Objects.isNull(entry.getValue()) && entry.getValue().getClass().isInstance(List.class)) {
                            data.put(entry.getKey(), new ArrayList<>().add(entry.getValue()));
                        }
                        else {
                            String value = entry.getValue().toString().replaceAll("<", "<").replaceAll(">", ">").replaceAll("\n", "");
                            data.put(entry.getKey(), value);
                        }
                    }
                }
                // 6.装载数据
                t.process(data, writer);
                response.setCharacterEncoding("utf-8");
                response.addHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));
                response.setContentType("application/json");
    
                // 7.读取生成好的 Word文档
                File file = new File(fileSavePath + fileName);
                FileInputStream is = new FileInputStream(file);
                OutputStream os = response.getOutputStream();
                byte[] b = new byte[1024];
                int length;
                while ((length = is.read(b)) > 0) {
                    os.write(b, 0, length);
                }
                os.flush();
                os.close();
                writer.flush();
                writer.close();
            } catch (IOException e) {
                throw new IOException(e.getMessage());
            } finally {
                deleteTempFile(fileSavePath + fileName);
            }
        }
    
        /**
         * 删除临时生成的文件
         */
        public static void deleteTempFile(String filePath) {
            File f = new File(filePath);
            boolean delete = f.delete();
        }
    }
    
    • 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
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102
    • 103
    • 104
    • 105
    • 106
    • 107
    • 108
    • 109
    • 110
    • 111
    • 112
    • 113
    • 114

    数据的查询及填充,不同模板的选择判断这里就不进行展示了。

       /**
         * 文书转pdf保存
         *
         * @return
         */
        @ApiOperation(value = "文书转pdf保存")
        @RequestMapping(value = "/savePetitionTemplatePdf", method = RequestMethod.GET)
        @LogAnnotation("文书转pdf保存")
        public Result savePetitionTemplatePdf(String oid, HttpServletResponse response) {
            try {
                Map<String, String> nameMap = documentApproverInfoService.getName(oid);
                String templateName = nameMap.get("templateName");
                String exportFileName = nameMap.get("fileName");
                String pdfName = nameMap.get("pdfName");
                //给文书赋值
                Map<String, Object> map = documentInfoService.obtainTemplate(oid, templateName);
                //模板所在路径
                String templateFileName = this.getClass().getResource("/").getPath() + "templates" + File.separator;
                //生成word文档
                FreemarkerUtils.freemarkerExport(templateFileName, templateName, map, folder, exportFileName, response);
    
                // doc转换为pdf
                Document document = new Document();
                document.loadFromFile(folder+exportFileName);
                document.saveToFile(folder+pdfName, FileFormat.PDF);
    
                return Result.ok().message("保存成功").data(folder+pdfName);
            } catch (Exception e) {
                log.error("保存异常", e);
                return Result.error().message("保存失败");
            }
        }
    
    • 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
    • 32
  • 相关阅读:
    vue运行报错cache-loader
    详解 Spark 核心编程之累加器
    LeetCode - 解题笔记 -201- Bitwise AND of Numbers Range
    Jmeter全流程性能测试实战
    购物网站系统
    基于概率距离削减法、蒙特卡洛削减法的风光场景不确定性削减(Matlab代码实现)
    商都区域内蒙古盐碱地治理 国稻种芯-封兴毅:水稻种植破题
    CentOS7下载安装nacos,及启动过程中出现的问题及注意事项
    医院职工离职申请证明模板,共计10篇
    『亚马逊云科技产品测评』活动征文|构建生态农场家禽系统
  • 原文地址:https://blog.csdn.net/remsqks/article/details/126906676