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.
- Buka kedua PDF sumber objek
Document. - Tambahkan
Pagekoleksi dari dokumen kedua ke dokumen pertama. - 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.
- Buka atau terima PDF sumber dan tujuan objek
Document. - Normalisasi rentang halaman yang diminta sehingga tetap berada dalam yang tersedia
Pagekoleksi. - 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.
- Buat PDF output kosong
Document. - Buka setiap file input satu per satu dan salin seluruhnya
Pagerentang ke dalam dokumen keluaran. - 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.
- Buka kedua PDF sumber objek
Documentdan buat dokumen output baru. - Tambahkan hanya yang diperlukan
Pagerentang dari setiap dokumen sumber. - 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.
- Buka PDF dasar dan PDF yang disisipkan objek
Documentdan buat dokumen output baru. - Salin bagian pertama dari dokumen dasar, kemudian tambahkan seluruh dokumen yang disisipkan, dan akhirnya tambahkan sisa dokumen dasar
Pagerentang. - 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.
- Buka kedua PDF sumber objek
Documentdan buat dokumen output baru. - Lakukan loop melalui jumlah halaman maksimum yang tersedia dan tambahkan masing‑masing yang tersedia
Pagedari dokumen pertama dan kedua secara berurutan. - 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.
- Buat PDF output kosong
Documentdan buka masing-masing file sumber secara berurutan. - Tambahkan pemisah
Pagedengan judul, lalu buat sebuahOutlineItemCollectionpenanda untuk bagian itu. - 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());
}
}