工具类

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[] mergePDF(List<String> fileUrls) throws IOException {
        PdfReader reader = null;
        PdfCopy copy = null;
        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        try {
            // 初始化文档
            Document document = new Document();
            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();
            }
        } catch(DocumentException | IOException e) {
            e.printStackTrace();
        } finally {
            Optional.ofNullable(reader).ifPresent(PdfReader::close);
            Optional.ofNullable(copy).ifPresent(PdfCopy::close);
            bos.close();
        }
        return bos.toByteArray();
    }
}

异常

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