前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >K、各种格式文件拼接为PDF

K、各种格式文件拼接为PDF

作者头像
用户10136162
发布2023-10-30 14:44:05
1250
发布2023-10-30 14:44:05
举报
文章被收录于专栏:Eliauk的小窝Eliauk的小窝

所需数据

  1. 首先需要将所有需要合并的文件转换成字节流也就是byte[] 然后把,每个数据都放到一个list

文件路径转换成byte[]

代码语言:javascript
复制
final List<String> collect = //你的文件路径集合
logger.info("开始转换pdf");

int totalUrls = collect.size();

int batchSize = 20; // 每批文件数量
int totalBatches = (int) Math.ceil((double) totalUrls / batchSize); // 共多少批任务
if (totalBatches <=0 ) return new byte[0];
ExecutorService executorService = //你的自定义线程池

List<CompletableFuture<byte[]>> futures = new ArrayList<>();

for (int i = 0; i < totalBatches; i++) {
    int fromIndex = i * batchSize;
    int toIndex = Math.min((i + 1) * batchSize, totalUrls);
    List<String> batchUrls = collect.subList(fromIndex, toIndex);

    for (String url : batchUrls) {
        CompletableFuture<byte[]> future = CompletableFuture.supplyAsync(() -> {
            logger.info("开始合并数据路径为:{}", url);

            File imageFile = new File(url);
            if (imageFile.exists() && imageFile.isFile()) {
                try (InputStream fileInputStream = new FileInputStream(imageFile)) {
                    byte[] fileData = IOUtils.toByteArray(fileInputStream);
                    logger.info("文件大小为:{}", fileData.length);
                    return fileData;
                } catch (IOException e) {
                    throw new RuntimeException(e);
                }
            }
            /*if ((extName != null && (extName.toLowerCase().contains("png")
                            || extName.toLowerCase().contains("jpg") || extName.toLowerCase().contains("jpeg")))) {
                        try {

                            final byte[] bytes = PicUtil.compressPictureForScale(url, 1024, 0.9);
                            logger.info("文件大小为:{}", bytes.length);
                            return bytes;
                        } catch (IOException e) {
                            throw new RuntimeException(e);
                        }
                    }*/
            return null;
        }, executorService);

        futures.add(future);
    }
}

List<byte[]> imageFiles = futures.stream()
	.map(CompletableFuture::join)
	.collect(Collectors.toList());

executorService.shutdown();

上图中进行注释的地方是进行大图片压缩的,本文中所有涉及到的工具类都会在另一篇文章中附上源码

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2023-10-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 所需数据
    • 文件路径转换成byte[]
    相关产品与服务
    图片处理
    图片处理(Image Processing,IP)是由腾讯云数据万象提供的丰富的图片处理服务,广泛应用于腾讯内部各产品。支持对腾讯云对象存储 COS 或第三方源的图片进行处理,提供基础处理能力(图片裁剪、转格式、缩放、打水印等)、图片瘦身能力(Guetzli 压缩、AVIF 转码压缩)、盲水印版权保护能力,同时支持先进的图像 AI 功能(图像增强、图像标签、图像评分、图像修复、商品抠图等),满足多种业务场景下的图片处理需求。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档