首页 > 编程语言 >java使用 template模板ftl 含有图片的生成数据

java使用 template模板ftl 含有图片的生成数据

时间:2024-01-11 15:55:33浏览次数:30  
标签:java String get bufferedInputStream xsList outFile template new ftl

点击查看代码
 /**
     *  Base64编码.
     */
    public static String base64Encode(byte[] input) {
        BASE64Encoder encoder = new BASE64Encoder();
        return encoder.encode(input);
    }
    @Override
    public void printStudentRxdjb(StudentRxdjInfoDto dto) {
        List<StudentRxdjVo> xsList = studentInfoMapper.getStudentRxdjData(dto);
        String downloadName = "招生入学登记模板导出.zip";
        String filePath = request.getSession().getServletContext().getRealPath("/");
        response.setContentType("application/zip;charset=utf-8");
        response.setHeader("Content-Disposition", "attachment;filename=" + Encodes.urlEncode(downloadName));
        try (
                OutputStream outputStream = response.getOutputStream();
                ZipOutputStream zos = new ZipOutputStream(outputStream)
        ) {

            for (int i = 0; i < xsList.size(); i++) {
                if(null != xsList.get(i).getPhoto()){
                    String xwbase64 = base64Encode(xsList.get(i).getPhoto());
//                    xsList.get(i).setZp("data:image/jpg;base64,"+xwbase64);
                    xsList.get(i).setZp(xwbase64);
                }


                Configuration configuration = new Configuration(Configuration.getVersion());
                configuration.setDefaultEncoding("UTF-8");
                configuration.setClassForTemplateLoading(this.getClass(), "/word");
                String temName = "登记表2.ftl";
                if("pdf".equals(dto.getExportType())){
                    temName = "学登记表2.ftl";
                }
                Template template = configuration.getTemplate(temName);
                Map<String, Object> params = new HashMap<>();
                params.put("schoolName", "学");
                params.put("wordList", Arrays.asList(xsList.get(i)));

                {

//                    String fileName = "研究生新生入学登记表.doc";
                    String fileName = xsList.get(i).getXy()+"_硕士"+"_"+xsList.get(i).getXh()+".doc";
                    File outFile = new File(filePath + "/" + fileName);
                    byte[] buffer = new byte[1024];
                    int len = 0;
                    ZipEntry zipEntry = new ZipEntry(fileName);
                    BufferedInputStream bufferedInputStream = null;
                    try (
                            BufferedWriter out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile)))
                    ) {
                        template.process(params, out);
                        bufferedInputStream = new BufferedInputStream(new FileInputStream(outFile));

                        // 这里是导出word
                        if(!"pdf".equals(dto.getExportType())) {
                            zos.putNextEntry(zipEntry);
                            while ((len = bufferedInputStream.read(buffer)) != -1) {
                                zos.write(buffer, 0, len);
                            }
                        }
                        if("pdf".equals(dto.getExportType())){
                            // 这里是doc转pdf, 但转出来的在linux里面字体有问题
                            Consumer<Writer> consumer = writer1 -> {
                                try {
                                    writer1.write(Common.fileToCharArray(outFile));
                                } catch (IOException e) {
                                    log.error("转化为pdf失败:{}", e);
                                    throw new RuntimeException(e);
                                }
                            };
                            PdfUtil.wordToPdf(zos,"学生证明", consumer);
                        }

                    } catch (FileNotFoundException | TemplateException e) {
                        log.error("context", e);
                    } catch (Exception e) {
                        e.printStackTrace();
                    } finally {
                        if (null != bufferedInputStream) {
                            bufferedInputStream.close();
                        }
                        if (outFile.exists()) {
                            if (!outFile.delete()) {
                                log.info("删除失败!");
                            }
                        }
                    }
                }
            }

        }catch (IOException e) {
            log.error("context",e);
        }

    }

标签:java,String,get,bufferedInputStream,xsList,outFile,template,new,ftl
From: https://www.cnblogs.com/heavenTang/p/17958767

相关文章

  • java上传图片or头像
     走upload方法进行文件的保存,第一个参数为上传文件的类型,头像or照片  第一步检查是否可以上传,是否是jpg,png等类型第二步根据日期,文件名,uuid等生成文件名称。第三步将文件保存到服务器最后return的是一个文件的相对地址,根据subDir和fileName+文件名返回的相对路径,比如p......
  • java~类型的逆变和协变
    在Java中,泛型的逆变(contravariance)和协变(covariance)是涉及到泛型类型转换时的两个重要概念。协变(Covariance)协变指的是子类型对象可以赋值给父类型引用的情况。在泛型中,协变表示如果B是A的子类,那么List<B>就是List<A>的子类。这意味着你可以将List<B>赋值给List<A>......
  • java实体类中给引用类型对象直接赋值报错记录
    实体类TestModel,Attachment类也是一个实体类packagecom.sinochem.it.model;importcom.alibaba.fastjson.JSONObject;publicclassTestModel{intage;Stringname;JSONObjectobj;Attachmentattachment;publicAttachmentgetAttachment(){......
  • 记使用Arthas定位并解决Java应用死锁问题
    背景在一次生产环境部署后,我们的JavaWeb应用开始表现出严重的性能下降。用户报告说网页响应变得非常慢,有时甚至完全无响应。初步检查服务器资源和应用日志未发现明显的问题,我们怀疑可能是应用内部出现了死锁。引入Arthas为了不影响生产环境运行,我们决定使用Arthas进行问题诊断。Ar......
  • 大话 JavaScript(Speaking JavaScript):第三十一章到第三十三章
    第三十一章:模块系统和包管理器原文:31.ModuleSystemsandPackageManagers译者:飞龙协议:CCBY-NC-SA4.0JavaScript没有内置模块支持,但社区已经创建了令人印象深刻的解决方法。要管理模块,可以使用所谓的包管理器,它们处理发现、安装、依赖管理等。模块系统JavaScript模......
  • 大话 JavaScript(Speaking JavaScript):第二十一章到第二十五章
    第二十一章:数学原文:21.Math译者:飞龙协议:CCBY-NC-SA4.0Math对象用作多个数学函数的命名空间。本章提供了一个概述。数学属性Math的属性如下:Math.E欧拉常数(e)Math.LN22的自然对数Math.LN1010的自然对数Math.LOG2Ee的底数2对数Math.LOG10Ee的十进制对数Ma......
  • [转]JAVA使用LocalDate获取当前日期所在季度的开始日期和结束日期
    原文地址:JAVA使用LocalDate获取当前日期所在季度的开始日期和结束日期-yvioo-博客园需要使用jdk1.8及以上  /***获取当前日期所在季度的开始日期和结束日期*季度一年四季,第一季度:1月-3月,第二季度:4月-6月,第三季度:7月-9月,第四季度:10月-12月......
  • 大话 JavaScript(Speaking JavaScript):第二十六章到第三十章
    第四部分:提示,工具和库原文:IV.Tips,Tools,andLibraries译者:飞龙协议:CCBY-NC-SA4.0本部分提供了使用JavaScript的技巧(最佳实践,高级技术和学习资源),并描述了一些重要的工具和库。第二十六章:元代码风格指南原文:26.AMetaCodeStyleGuide译者:飞龙协议:CCBY-NC-SA......
  • 大话 JavaScript(Speaking JavaScript):第十一章到第十五章
    第十一章:数字原文:11.Numbers译者:飞龙协议:CCBY-NC-SA4.0JavaScript对所有数字都使用单一类型:它将它们全部视为浮点数。但是,如果小数点后没有数字,则不显示小数点:>5.0005在内部,大多数JavaScript引擎都会优化并区分浮点数和整数(详情请参见JavaScript中的整数)。但这......
  • 大话 JavaScript(Speaking JavaScript):第十六章到第二十章
    第十六章:变量:作用域、环境和闭包原文:16.Variables:Scopes,Environments,andClosures译者:飞龙协议:CCBY-NC-SA4.0本章首先解释了如何使用变量,然后详细介绍了它们的工作方式(环境、闭包等)。声明变量在JavaScript中,您在使用变量之前通过var语句声明变量:varfoo;foo......