package com.ruoyi.common.utils.document;

import com.itextpdf.text.Document;
import com.itextpdf.text.pdf.BadPdfFormatException;
import com.itextpdf.text.pdf.PdfCopy;
import com.itextpdf.text.pdf.PdfReader;

import java.io.FileOutputStream;
import java.io.IOException;

public class PDFUtil {

    /**
     * 合并两个 PDF 文件
     *
     * @param pdf1Path   第一个 PDF 文件路径
     * @param pdf2Path   第二个 PDF 文件路径
     * @param outputPath 输出文件路径（包括文件名）
     * @throws IOException 如果文件读取或写入出错
     */
    public static void mergeTwoPdfs(String pdf1Path, String pdf2Path, String outputPath) throws IOException {
        Document document = null;
        PdfCopy copy = null;

        try {
            // 创建输出 PDF 的 Document 对象
            document = new Document();
            // 创建 PdfCopy 对象
            copy = new PdfCopy(document, new FileOutputStream(outputPath));
            document.open();

            // 合并第一个 PDF 文件
            addPdfToDocument(pdf1Path, copy);
            // 合并第二个 PDF 文件
            addPdfToDocument(pdf2Path, copy);

            System.out.println("PDF 合并成功，输出文件：" + outputPath);

        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (document != null) {
                document.close();
            }
            if (copy != null) {
                copy.close();
            }
        }
    }

    /**
     * 将单个 PDF 文件的所有页面添加到目标文档中
     *
     * @param pdfPath PDF 文件路径
     * @param copy    PdfCopy 对象
     * @throws IOException 如果读取 PDF 出错
     */
    private static void addPdfToDocument(String pdfPath, PdfCopy copy) throws IOException {
        PdfReader reader = null;
        try {
            reader = new PdfReader(pdfPath);
            int n = reader.getNumberOfPages();
            // 将每页添加到目标 PDF 中
            for (int i = 1; i <= n; i++) {
                copy.addPage(copy.getImportedPage(reader, i));
            }
        } catch (BadPdfFormatException e) {
            e.printStackTrace();
        } finally {
            if (reader != null) {
                reader.close();
            }
        }
    }


}
