前一篇文章写在项目中实现pdf下载的需求(文章详见),开发、测试和验收没有问题。前段时间业务方说下载。pdf功能总是报告加班错误,调查原因,原来是pdf中间的图片都是8M左右,肯定扛不住。发现问题就解决。有两个想法:
- 压缩图片
- 异步下载
1.压缩图片
这里使用Google开源的图片压缩库thumbnailator,该工具简单易用,支持各种压缩方法,提供链式API,有兴趣的可以去研究一下。
项目引入依赖:
<dependency> <groupId>net.coobird</groupId> <artifactId>thumbnailator</artifactId> <version>0.4.8</version> </dependency>
pfd渲染前,先压缩获得的图片,伪代码如下(源代码详见):
Lists.partition(imageUrls, BULK_SIZE).forEach(items -> { FraudReportOrderEvidenceImage image = new FraudReportOrderEvidenceImage(); for (int i = 0; i < items.size(); i ) { byte[] imageBytes = restTemplate.getForObject(items.get(i), byte[].class); ByteArrayInputStream bais = new ByteArrayInputStream(imageBytes); ByteArrayOutputStream baos = new ByteArrayOutputStream(BAOS_SIZE); try { ///压缩图片 Thumbnails.of(bais).scale(IMAGE_SCALE_SIZE).toOutputStream(baos); byte[] thumbnailBytes = baos.toByteArray(); if (i == 0) { image.setReportDescImage(this.byte2String(thumbnailBytes)); continue; } if (i == 1) { image.setReportDescImage2(this.byte2String(thumbnailBytes)); continue; } if (i == 2) { image.setReportDescImage3(this.byte2String(thumbnailBytes)); continue; } if (i == 3) { image.setReportDescImage4(this.byte2String(thumbnailBytes)); } } catch (Exception e) { log.error(";压缩图失败;", e); throw new ServiceResponseException(";压缩图失败;"); } } images.add(image); }); log.info("read {} images byte costs: {}ms", imageUrls.size(), System.currentTimeMillis() - start);
经过thumbnailator压缩之后,图片字节大大缩小,图片没有失真模糊,点击页面下载按钮,实时下载正常,不再加班
2.异步下载
事实上,下载文件通常是系统中的非核心流程,所以大多数系统都使用它异步下载所谓异步下载是相对系统实时渲染对于用户下载的前端数据,实现方法是在业务低峰期(如凌晨2点)通过系统job定时获取指定数据,生成相应的文件,上传到file server或者OSS上传成功后,系统库表中保留文件资源的地址。下载页面将相应记录的文件地址返回到前端。用户下载时,前端直接通过地址url去download指定文件可以从业务系统中剥离下载处理,不会因为大文件的耗时处理而影响业务系统的性能。批处理系统,数仓,BI以这种方式生成文件供客户下载。需要注意的是,这种方式下载的数据通常是T 1.但由于是非核心功能,T 完全没问题。
ps:
每张图片8M压缩后正常下载

合理压缩图片pdf效果
今天的文章就分享到这里,如果你也网赚副业项目感兴趣,可以添加 维信:beng6655 备注:副业!
本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 526323532@qq.com 举报,一经查实,本站将立刻删除。
如若转载,请注明出处:https://www.haoxue2.com/765.html
如若转载,请注明出处:https://www.haoxue2.com/765.html