Menggabungkan file PDF dalam Java

Aspose.PDF for Java mendukung beberapa strategi penggabungan tergantung pada bagaimana output harus disusun.

Menggabungkan dua dokumen PDF

Gunakan pendekatan ini ketika Anda membutuhkan alur penggabungan paling sederhana dan ingin menambahkan satu dokumen lengkap ke dokumen lain.

  1. Buka kedua PDF sumber objek Document.
  2. Tambahkan Page koleksi dari dokumen kedua ke dokumen pertama.
  3. Simpan PDF yang diperbarui Document.
public static void mergeTwoDocuments(Path inputFile1, Path inputFile2, Path outputFile) {
    try (Document document1 = new Document(inputFile1.toString());
         Document document2 = new Document(inputFile2.toString())) {
        document1.getPages().add(document2.getPages());
        document1.save(outputFile.toString());
    }
}

Menyalin rentang halaman yang dipilih antara dokumen

Metode pembantu ini menjaga logika penggabungan rentang halaman di satu tempat sehingga contoh lain dapat menggunakan kembali prosedur penyalinan yang telah divalidasi yang sama.

  1. Buka atau terima PDF sumber dan tujuan objek Document.
  2. Normalisasi rentang halaman yang diminta sehingga tetap berada dalam yang tersedia Page koleksi.
  3. Tambahkan setiap halaman dari rentang yang divalidasi ke dokumen tujuan.
private static void appendPageRange(Document sourceDocument, Document destinationDocument, int startPage, int endPage) {
    int totalPages = sourceDocument.getPages().size();
    if (totalPages == 0) {
        return;
    }

    int start = Math.max(1, startPage);
    int end = Math.min(endPage, totalPages);
    if (start > end) {
        return;
    }

    for (int pageNumber = start; pageNumber <= end; pageNumber++) {
        destinationDocument.getPages().add(sourceDocument.getPages().get_Item(pageNumber));
    }
}

Menggabungkan beberapa dokumen PDF menjadi satu file

Gunakan pola ini ketika Anda perlu menggabungkan daftar file input menjadi satu dokumen output secara berurutan.

  1. Buat PDF output kosong Document.
  2. Buka setiap file input satu per satu dan salin seluruhnya Page rentang ke dalam dokumen keluaran.
  3. Simpan hasil gabungan setelah semua file sumber diproses.
public static void mergeMultipleDocuments(List<Path> inputFiles, Path outputFile) {
    try (Document outputDocument = new Document()) {
        for (Path inputFile : inputFiles) {
            try (Document sourceDocument = new Document(inputFile.toString())) {
                appendPageRange(sourceDocument, outputDocument, 1, sourceDocument.getPages().size());
            }
        }
        outputDocument.save(outputFile.toString());
    }
}

Menggabungkan rentang halaman terpilih dari dua dokumen

Contoh ini membuat file output khusus dengan mengambil hanya rentang halaman tertentu dari setiap dokumen sumber.

  1. Buka kedua PDF sumber objek Document dan buat dokumen output baru.
  2. Tambahkan hanya yang diperlukan Page rentang dari setiap dokumen sumber.
  3. Simpan dokumen output yang dirakit.
public static void mergeSelectedPageRanges(Path inputFile1, Path inputFile2, Path outputFile) {
    try (Document document1 = new Document(inputFile1.toString());
         Document document2 = new Document(inputFile2.toString());
         Document outputDocument = new Document()) {
        appendPageRange(document1, outputDocument, 1, 2);
        appendPageRange(document2, outputDocument, 2, 3);
        outputDocument.save(outputFile.toString());
    }
}

Menyisipkan satu dokumen PDF ke dalam dokumen lain pada posisi tertentu

Gunakan pendekatan ini ketika satu dokumen harus muncul di dalam dokumen lain, bukan hanya sebelum atau sesudahnya.

  1. Buka PDF dasar dan PDF yang disisipkan objek Document dan buat dokumen output baru.
  2. Salin bagian pertama dari dokumen dasar, kemudian tambahkan seluruh dokumen yang disisipkan, dan akhirnya tambahkan sisa dokumen dasar Page rentang.
  3. Simpan hasil yang diurutkan kembali ke file baru.
public static void mergeInsertDocumentAtPosition(Path inputFile1, Path inputFile2, int insertAfterPage, Path outputFile) {
    try (Document baseDocument = new Document(inputFile1.toString());
         Document insertDocument = new Document(inputFile2.toString());
         Document outputDocument = new Document()) {
        int baseTotalPages = baseDocument.getPages().size();
        int insertIndex = Math.max(0, Math.min(insertAfterPage, baseTotalPages));

        appendPageRange(baseDocument, outputDocument, 1, insertIndex);
        appendPageRange(insertDocument, outputDocument, 1, insertDocument.getPages().size());
        appendPageRange(baseDocument, outputDocument, insertIndex + 1, baseTotalPages);

        outputDocument.save(outputFile.toString());
    }
}

Menggabungkan dua dokumen PDF dengan cara menukar halaman secara bergantian

Contoh ini menumpuk halaman dari dua dokumen secara berselang-seling, yang berguna ketika kedua masukan harus berkontribusi halaman demi halaman ke output akhir.

  1. Buka kedua PDF sumber objek Document dan buat dokumen output baru.
  2. Lakukan loop melalui jumlah halaman maksimum yang tersedia dan tambahkan masing‑masing yang tersedia Page dari dokumen pertama dan kedua secara berurutan.
  3. Simpan dokumen output yang terinterleaved.
public static void mergeAlternatingPages(Path inputFile1, Path inputFile2, Path outputFile) {
    try (Document document1 = new Document(inputFile1.toString());
         Document document2 = new Document(inputFile2.toString());
         Document outputDocument = new Document()) {
        int document1Pages = document1.getPages().size();
        int document2Pages = document2.getPages().size();
        int maxPages = Math.max(document1Pages, document2Pages);

        for (int pageNumber = 1; pageNumber <= maxPages; pageNumber++) {
            if (pageNumber <= document1Pages) {
                outputDocument.getPages().add(document1.getPages().get_Item(pageNumber));
            }
            if (pageNumber <= document2Pages) {
                outputDocument.getPages().add(document2.getPages().get_Item(pageNumber));
            }
        }

        outputDocument.save(outputFile.toString());
    }
}

Menggabungkan dokumen dengan halaman pemisah dan penanda

Gunakan pola ini ketika file gabungan harus tetap mudah dinavigasi dan jelas menunjukkan di mana setiap dokumen sumber dimulai.

  1. Buat PDF output kosong Document dan buka masing-masing file sumber secara berurutan.
  2. Tambahkan pemisah Page dengan judul, lalu buat sebuah OutlineItemCollection penanda untuk bagian itu.
  3. Tambahkan halaman sumber, secara opsional tambahkan bookmark yang mengarah ke halaman konten pertama, dan simpan dokumen gabungan akhir.
public static void mergeWithSectionSeparatorsAndBookmarks(List<Path> inputFiles, Path outputFile) {
    try (Document outputDocument = new Document()) {
        int sectionIndex = 1;
        for (Path inputFile : inputFiles) {
            try (Document sourceDocument = new Document(inputFile.toString())) {
                int sourcePageCount = sourceDocument.getPages().size();

                Page separatorPage = outputDocument.getPages().add();
                separatorPage.getParagraphs().add(new TextFragment(
                        "Section " + sectionIndex + ": " + inputFile.getFileName()));

                OutlineItemCollection sectionBookmark = new OutlineItemCollection(outputDocument.getOutlines());
                sectionBookmark.setTitle("Section " + sectionIndex);
                sectionBookmark.setAction(new GoToAction(separatorPage));
                outputDocument.getOutlines().add(sectionBookmark);

                int firstContentPageNumber = outputDocument.getPages().size() + 1;
                appendPageRange(sourceDocument, outputDocument, 1, sourcePageCount);

                if (sourcePageCount > 0 && firstContentPageNumber <= outputDocument.getPages().size()) {
                    OutlineItemCollection contentBookmark = new OutlineItemCollection(outputDocument.getOutlines());
                    contentBookmark.setTitle("Section " + sectionIndex + " Content");
                    contentBookmark.setAction(new GoToAction(outputDocument.getPages().get_Item(firstContentPageNumber)));
                    sectionBookmark.add(contentBookmark);
                }
            }
            sectionIndex++;
        }

        outputDocument.save(outputFile.toString());
    }
}