Java membandingkan file pdf – master GroupDocs.Comparison API

Dalam panduan ini Anda akan belajar cara java compare pdf files secara efisien dengan GroupDocs.Comparison untuk Java. Baik Anda membangun portal peninjauan kontrak, sistem kontrol versi, atau pemeriksa makalah akademik, kemampuan mendeteksi perubahan sekecil apa pun pada dokumen PDF sangat penting. Kami akan membahas pengaturan, logika perbandingan inti, pembuatan preview, penanganan kata sandi, integrasi cloud, dan praktik terbaik yang dioptimalkan untuk kinerja—sehingga Anda dapat mengirimkan solusi yang handal dalam hitungan menit.

Jawaban Cepat

  • Apa yang dilakukan GroupDocs Comparison Java? Ia membandingkan dua atau lebih dokumen, menyorot setiap perubahan, dan dapat menghasilkan preview visual untuk peninjauan cepat.
  • Format file apa yang didukung? Word, PDF, Excel, PowerPoint, gambar, HTML, dan banyak lagi.
  • Apakah saya memerlukan lisensi untuk produksi? Ya – lisensi GroupDocs yang valid menghapus watermark dan membuka semua fitur.
  • Bisakah saya menangani dokumen besar? Ya – dengan manajemen memori yang tepat dan paginasi preview Anda dapat memproses PDF beratus‑ratus halaman.
  • Di mana saya dapat menemukan dependensi Maven terbaru? Di repositori GroupDocs – periksa versi terbaru sebelum menambahkannya.

Apa itu java compare pdf files?

java compare pdf files mengacu pada proses pemrograman memuat dua versi PDF, mendeteksi perbedaan teks, format, dan grafis, serta secara opsional menghasilkan dokumen hasil yang menandai perubahan tersebut secara visual. GroupDocs.Comparison mengimplementasikan ini dengan satu panggilan API, menghilangkan kebutuhan logika diff manual.

Mengapa menggunakan GroupDocs.Comparison dalam proyek Java?

GroupDocs.Comparison menyediakan deteksi perubahan yang akurat pada lebih dari 50 format yang didukung, memproses PDF hingga 200 halaman dalam kurang dari 5 detik pada JVM standar 8 GB, dan menyertakan pembuatan preview bawaan. Artefak Maven‑ready‑nya memudahkan integrasi, dan perpustakaan ini dapat diskalakan secara horizontal ketika Anda mengikuti pola manajemen memori yang direkomendasikan.

Prasyarat: Apa yang Anda butuhkan untuk memulai

Sebelum menyelam ke kode, pastikan lingkungan Anda memenuhi persyaratan berikut:

  • Java Development Kit: JDK 8 atau lebih baru; JDK 11 atau lebih baru disarankan untuk kinerja garbage‑collection yang lebih baik.
  • Alat build: Maven atau Gradle untuk resolusi dependensi.
  • IDE: IntelliJ IDEA, Eclipse, atau VS Code – semua IDE Java modern dapat digunakan.
  • Pengetahuan dasar Java: Anda harus nyaman dengan kelas, metode, dan I/O file.
  • Akses jaringan: Untuk mengunduh artefak Maven GroupDocs dan, jika Anda menggunakan penyimpanan cloud, mengakses endpoint penyimpanan Anda.

Menambahkan GroupDocs.Comparison ke proyek Anda

Tambahkan dependensi berikut ke pom.xml Anda (ganti X.Y.Z dengan versi terbaru yang Anda temukan di situs GroupDocs):

<dependency>
    <groupId>com.groupdocs</groupId>
    <artifactId>groupdocs-comparison</artifactId>
    <version>X.Y.Z</version>
</dependency>

Pro tip: Periksa catatan rilis GroupDocs untuk perbaikan bug spesifik versi dan dukungan format baru sebelum melakukan upgrade.

Lisensi (jangan lewatkan ini!)

Lisensi percobaan memungkinkan Anda mengevaluasi API, tetapi penyebaran produksi memerlukan lisensi permanen untuk menghapus watermark dan mengaktifkan semua fungsionalitas.

  1. Uji coba gratis: Download dari GroupDocs
  2. Lisensi sementara: Dapatkan satu temporary license untuk pengujian lanjutan
  3. Lisensi penuh: Beli dari GroupDocs Store

Penyiapan awal: menyiapkan GroupDocs.Comparison

Inisialisasi dasar

Kelas Comparer adalah titik masuk untuk semua operasi perbandingan. Ia mengatur pemuatan dokumen, perhitungan diff, dan pembuatan hasil.

<repositories>
   <repository>
      <id>repository.groupdocs.com</id>
      <name>GroupDocs Repository</name>
      <url>https://releases.groupdocs.com/comparison/java/</url>
   </repository>
</repositories>
<dependencies>
   <dependency>
      <groupId>com.groupdocs</groupId>
      <artifactId>groupdocs-comparison</artifactId>
      <version>25.2</version>
   </dependency>
</dependencies>

Apa yang dilakukan potongan kode ini: Ia membuat instance Comparer, menerapkan lisensi (jika Anda memilikinya), dan menyiapkan mesin untuk panggilan perbandingan selanjutnya.

Panduan implementasi langkah‑demi‑langkah

Bagian 1: menyiapkan perbandingan dokumen

Langkah 1: inisialisasi comparer Anda

Objek Comparer adalah komponen inti yang mengeksekusi algoritma diff. Ia menyimpan konfigurasi seperti opsi perbandingan dan informasi lisensi.

import com.groupdocs.comparison.Comparer;
import com.groupdocs.comparison.examples.SampleFiles;

// Initialize the comparer with a source document
Comparer comparer = new Comparer(SampleFiles.SOURCE_WORD);

Mengapa ini penting: Dokumen sumber yang Anda berikan menjadi baseline; setiap perubahan diukur terhadapnya.

Langkah 2: tambahkan dokumen target

Anda dapat membandingkan sumber dengan satu atau lebih file target. Dalam skenario manajemen kontrak, sumber adalah perjanjian asli dan target adalah versi revisi dari tim hukum.

// Initialize comparer with the source document
Comparer comparer = new Comparer(SampleFiles.SOURCE_WORD);

Bagian 2: menghasilkan preview halaman

Langkah 1: menyiapkan pembuatan output stream

Pola delegate preview memberi Anda kontrol penuh atas tempat penyimpanan gambar preview—disk lokal, bucket cloud, atau basis data.

// Add a target document for comparison
comparer.add(SampleFiles.TARGET1_WORD);

Langkah 2: mengonfigurasi opsi preview

Hanya hasilkan preview untuk halaman yang benar‑benar Anda butuhkan; ini mengurangi penggunaan CPU hingga 60 % untuk PDF besar.

import com.groupdocs.comparison.common.delegates.Delegates;
import java.io.FileOutputStream;
import java.io.OutputStream;

Delegates.CreatePageStream createPageStream = new Delegates.CreatePageStream() {
    @Override
    public OutputStream invoke(int pageNumber) {
        String pagePath = "YOUR_OUTPUT_DIRECTORY" + "/result-GetPagePreviewsForTargetDocument_" + pageNumber + ".png";
        try {
            return new FileOutputStream(pagePath);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
            throw new RuntimeException(e);
        }
    }
};

Langkah 3: menghasilkan preview

API merender setiap halaman yang diminta sebagai PNG (lossless) atau JPEG (ukuran lebih kecil). PNG direkomendasikan untuk dokumen hukum di mana kesetiaan piksel sangat penting.

import com.groupdocs.comparison.options.PreviewOptions;
import com.groupdocs.comparison.options.enums.PreviewFormats;

// Set preview options
PreviewOptions previewOptions = new PreviewOptions.Builder(createPageStream)
    .setPreviewFormat(PreviewFormats.PNG) // High-quality images
    .setPageNumbers(new int[]{1, 2}) // Only generate what you need
    .build();

Format file yang didukung

GroupDocs.Comparison bekerja dengan lebih dari 50 format input dan output, termasuk:

  • Microsoft Office: DOCX, DOC, XLSX, XLS, PPTX, PPT
  • PDF: Semua versi PDF‑1.x, PDF terenkripsi, dan PDF dengan font tersemat
  • Teks & markup: TXT, RTF, HTML, MHTML
  • Gambar: JPEG, PNG, BMP, GIF
  • OpenDocument: ODT, ODS, ODP

Kemampuan luas ini memungkinkan Anda membandingkan kontrak yang disimpan sebagai file Word dengan versi PDF yang dipindai, semuanya dalam satu panggilan API.

Masalah umum dan solusi

Masalah 1: FileNotFoundException selama pembuatan preview

Jika direktori output tidak ada atau aplikasi tidak memiliki izin menulis, delegate preview akan melempar pengecualian ini.

// Generate page previews
comparer.getTargets().get(0).generatePreview(previewOptions);

Solusi: Verifikasi jalur, buat folder yang hilang secara programatik, dan berikan proses Java hak sistem file yang sesuai.

Masalah 2: Masalah memori dengan dokumen besar

Memproses PDF 300 halaman dapat melebihi heap default 512 MB, menghasilkan OutOfMemoryError.

Delegates.CreatePageStream createPageStream = new Delegates.CreatePageStream() {
    @Override
    public OutputStream invoke(int pageNumber) {
        String outputDir = "previews";
        File directory = new File(outputDir);
        if (!directory.exists()) {
            directory.mkdirs(); // Create directory if it doesn't exist
        }
        
        String pagePath = outputDir + "/preview_page_" + pageNumber + ".png";
        try {
            return new FileOutputStream(pagePath);
        } catch (FileNotFoundException e) {
            System.err.println("Failed to create output file: " + pagePath);
            throw new RuntimeException("Cannot create preview file", e);
        }
    }
};

Solusi: Tingkatkan heap JVM (-Xmx2g atau lebih tinggi) dan proses dokumen dalam rentang halaman yang lebih kecil menggunakan fitur paginasi PreviewOptions.

Masalah 3: Masalah lisensi

Ketika file lisensi hilang atau rusak, API menambahkan watermark pada setiap output dan menonaktifkan beberapa opsi lanjutan.

// Process fewer pages at a time
PreviewOptions previewOptions = new PreviewOptions.Builder(createPageStream)
    .setPreviewFormat(PreviewFormats.PNG)
    .setPageNumbers(new int[]{1, 2, 3}) // Limit page range
    .build();

// Always dispose of the comparer when done
try (Comparer comparer = new Comparer(sourceDocument)) {
    comparer.add(targetDocument);
    comparer.getTargets().get(0).generatePreview(previewOptions);
} // Automatic cleanup

Solusi: Letakkan file lisensi di lokasi yang diketahui dan muat dengan License.setLicense("path/to/license.lic") sebelum panggilan perbandingan apa pun.

Tips kinerja dan praktik terbaik (java comparison best practices)

  1. Batasi pembuatan preview – minta hanya halaman yang Anda butuhkan; gunakan pageNumbers untuk melewatkan bagian yang tidak relevan.
  2. Pilih format gambar yang tepat – PNG untuk dokumen hukum lossless, JPEG untuk thumbnail di mana ukuran penting.
  3. Implementasikan caching – simpan hasil perbandingan (mis., hash dari source + target) untuk menghindari pemrosesan ulang file yang tidak berubah.
  4. Kelola memori – bungkus penggunaan Comparer dalam blok try‑with‑resources dan panggil close() saat selesai.
  5. Buang objek comparer – selalu lepaskan sumber daya native untuk menjaga jejak memori JVM tetap rendah.

Pola kode siap produksi

Berikut adalah siklus hidup yang direkomendasikan untuk tugas perbandingan dalam sebuah microservice.

// Apply license at the start of your application
License license = new License();
license.setLicense("path/to/your/license.lic");

Contoh implementasi dunia nyata

Contoh 1: sistem manajemen kontrak

Departemen hukum mengunggah kontrak asli (sumber) dan versi revisi (target). Layanan mengembalikan PDF yang disorot dan sekumpulan PNG preview halaman untuk inspeksi visual cepat.

public class DocumentComparisonService {
    private static final String OUTPUT_DIR = "document-previews/";
    
    public ComparisonResult compareDocuments(String sourcePath, String targetPath) {
        try (Comparer comparer = new Comparer(sourcePath)) {
            comparer.add(targetPath);
            
            // Perform comparison
            String resultPath = OUTPUT_DIR + "comparison-result.docx";
            comparer.compare(resultPath);
            
            // Generate previews if needed
            generatePreviews(comparer, 3); // First 3 pages only
            
            return new ComparisonResult(resultPath, true);
        } catch (Exception e) {
            log.error("Document comparison failed", e);
            return new ComparisonResult(null, false);
        }
    }
    
    private void generatePreviews(Comparer comparer, int maxPages) {
        // Implementation details...
    }
}

Contoh 2: peninjauan makalah akademik

Peneliti mengirimkan manuskrip revisi. Sistem membandingkan PDF baru dengan versi sebelumnya, menandai sitasi yang diubah, dan menghasilkan gambar preview untuk dasbor peninjau.

public class ContractVersionManager {
    public void reviewContractChanges(String originalContract, String revisedContract) {
        try (Comparer comparer = new Comparer(originalContract)) {
            comparer.add(revisedContract);
            
            // Generate comparison document
            String comparisonResult = "contracts/comparison-" + System.currentTimeMillis() + ".docx";
            comparer.compare(comparisonResult);
            
            // Create preview for stakeholder review
            generatePreviewsForReview(comparer);
        }
    }
}

Cara java compare pdf files dengan perlindungan kata sandi

LoadOptions adalah kelas yang memungkinkan Anda menentukan parameter pemuatan seperti kata sandi untuk dokumen terenkripsi. Untuk membandingkan PDF yang dilindungi, buat instance LoadOptions dengan kata sandi, berikan ke Comparer saat memuat dokumen, lalu jalankan perbandingan seperti biasa. Perpustakaan mendekripsi file di memori, memastikan tidak ada teks biasa yang ditulis ke disk, dan semua operasi selanjutnya—termasuk pembuatan preview dan perhitungan diff—bekerja secara transparan.

public class AcademicDocumentReview {
    public void compareResearchDrafts(String draft1, String draft2) {
        try (Comparer comparer = new Comparer(draft1)) {
            comparer.add(draft2);
            
            // Focus on specific sections (first 10 pages typically contain main content)
            PreviewOptions options = new PreviewOptions.Builder(createPageStream)
                .setPageNumbers(IntStream.rangeClosed(1, 10).toArray())
                .setPreviewFormat(PreviewFormats.PNG)
                .build();
                
            comparer.getTargets().get(0).generatePreview(options);
        }
    }
}

Membandingkan dokumen yang disimpan di cloud

Jika sumber dan target Anda berada di Amazon S3, Azure Blob, atau Google Cloud Storage, cukup berikan InputStream yang diperoleh dari SDK cloud alih‑alih jalur file lokal.

LoadOptions loadOptions = new LoadOptions();
loadOptions.setPassword("your-password");
Comparer comparer = new Comparer("protected-document.docx", loadOptions);

Pertanyaan yang sering diajukan

Q: Bagaimana cara menangani dokumen yang dilindungi kata sandi?
A: Gunakan LoadOptions untuk menyediakan kata sandi saat membuat instance Comparer, seperti yang ditunjukkan di atas.

Q: Bisakah saya membandingkan dokumen yang disimpan di penyimpanan cloud?
A: Ya—cukup berikan input stream dari penyedia cloud Anda ke Comparer.

Q: Berapa ukuran file maksimum yang dapat ditangani GroupDocs.Comparison?
A: Tidak ada batas keras, tetapi untuk file lebih besar dari 100 MB Anda harus meningkatkan ukuran heap JVM atau memproses dokumen dalam potongan lebih kecil untuk menghindari OutOfMemoryError.

Q: Seberapa akurat algoritma perbandingan?
A: Perpustakaan menggunakan algoritma diff canggih yang mendeteksi perubahan pada teks, format, gambar, tabel, dan objek tersemat, memberikan hasil diff visual yang hampir pixel‑perfect.

Q: Bisakah saya menyesuaikan jenis perubahan yang terdeteksi?
A: Tentu saja. Atur CompareOptions untuk mengaktifkan atau menonaktifkan deteksi teks, format, gambar, tabel, dan lainnya.

Q: Apakah API mendukung pembuatan preview hanya untuk halaman yang dipilih?
A: Ya—konfigurasikan PreviewOptions dengan array pageNumbers tertentu untuk membatasi output ke halaman yang Anda butuhkan.

Kesimpulan

Anda sekarang memiliki panduan lengkap yang siap produksi untuk java compare pdf files dengan GroupDocs.Comparison. Dengan mengikuti langkah‑langkah penyiapan, menerapkan rekomendasi kinerja, dan memanfaatkan potongan kode penanganan kata sandi serta integrasi cloud, Anda dapat menyematkan kemampuan perbandingan dokumen yang kuat ke dalam aplikasi Java apa pun—baik itu portal peninjauan kontrak, alur kerja makalah akademik, atau sistem pengarsipan dokumen berskala besar.


Terakhir Diperbarui: 2026-11-01
Diuji Dengan: GroupDocs.Comparison 25.2
Penulis: GroupDocs

InputStream sourceStream = getDocumentFromCloud("source-doc-id");
InputStream targetStream = getDocumentFromCloud("target-doc-id");
Comparer comparer = new Comparer(sourceStream);
comparer.add(targetStream);

Tutorial Terkait