java-pdf合并

依赖

org.apache.pdfbox
pdfbox
2.0.8

package com.wzcdjt.pms.module.safety.util;

import com.wzcdjt.pms.module.infra.api.file.FileApi;
import com.wzcdjt.pms.module.infra.api.file.vo.FileDTO;
import lombok.extern.slf4j.Slf4j;
import org.apache.pdfbox.multipdf.PDFMergerUtility;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.io.*;
import java.util.ArrayList;

@Component
@Slf4j
public class PdfFileUtil {

    @Resource
    private FileApi fileApi;


    public FileDTO mergePdf(ArrayList<String> file, Long tenantId) {
        // 接收合并后的pdf文件流对象
        ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
        // 创建PDF合并对象
        PDFMergerUtility merger = new PDFMergerUtility();
        try {
            for (String path : file) {
                byte[] byteArr = fileApi.getFileContent(path);
                // 添加待合并的PDF字节流
                merger.addSource(new ByteArrayInputStream(byteArr));
            }
            // 设定合并后的输出流对象
            merger.setDestinationStream(outputStream);
            // 合并PDF
            merger.mergeDocuments(null);
            byte[] bytes = outputStream.toByteArray();
            return fileApi.createFile(bytes, tenantId);
        } catch (Exception e) {
            log.error(e.getMessage());
        }
        return null;
    }

    /**
     * 合并pdf并返回byte数组
     * @param file
     * @return
     */
    public byte[] mergePdfGetByte(ArrayList<byte[]> file) {
        // 接收合并后的pdf文件流对象
        ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
        // 创建PDF合并对象
        PDFMergerUtility merger = new PDFMergerUtility();
        for (byte[] byteArr : file) {
            // 添加待合并的PDF字节流
            merger.addSource(new ByteArrayInputStream(byteArr));
        }
        // 设定合并后的输出流对象
        merger.setDestinationStream(outputStream);
        try {
            // 合并PDF
            merger.mergeDocuments(null);
            return outputStream.toByteArray();
        } catch (IOException e) {
            log.error(e.getMessage());
        }
        return null;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值