工具类

package cn.codesensi.util;

import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.pdf.PdfCopy;
import com.itextpdf.text.pdf.PdfImportedPage;
import com.itextpdf.text.pdf.PdfReader;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.List;
import java.util.Optional;

public class PDFUtil {

    /**
     * 多个PDF文件合并成一个
     * @param fileUrls 需合并的PDF地址集合
     * @return 合并后的PDF字节数据
     */
    public static byte[] mergePdfFiles(List < String > fileUrls) {
        byte[] pdfBytes = new byte[0];
        // 创建一个新的PDF
        Document document = new Document();
        PdfReader reader = null;
        PdfCopy copy = null;
        try (ByteArrayOutputStream bos = new ByteArrayOutputStream()) {
            copy = new PdfCopy(document, bos);
            document.open();
            // 取出单个PDF的数据
            for (String url: fileUrls) {
                reader = new PdfReader(url);
                int pageTotal = reader.getNumberOfPages();
                for (int pageNo = 1; pageNo <= pageTotal; pageNo++) {
                    document.newPage();
                    PdfImportedPage page = copy.getImportedPage(reader, pageNo);
                    copy.addPage(page);
                }
                reader.close();
            }
            pdfBytes = bos.toByteArray();
        } catch (DocumentException | IOException e) {
            e.printStackTrace();
        } finally {
            document.close();
            Optional.ofNullable(reader).ifPresent(PdfReader::close);
            Optional.ofNullable(copy).ifPresent(PdfCopy::close);
        }
        return pdfBytes;
    }
}

异常

若待合并的PDF文件不存在则会抛出异常com.itextpdf.text.exceptions.InvalidPdfException: PDF header signature not found