Bandingkan dokumen PDF

Harap dicatat bahwa semua alat perbandingan tersedia di Aspose.PDF.Drawing library.

Cara membandingkan Dokumen PDF

Saat bekerja dengan dokumen PDF, ada kalanya Anda perlu membandingkan konten dari dua dokumen untuk mengidentifikasi perbedaan. Library Aspose.PDF for .NET menyediakan seperangkat alat yang kuat untuk tujuan ini. Dalam artikel ini, kita akan menjelajahi cara membandingkan dokumen PDF menggunakan beberapa cuplikan kode sederhana.

Fungsi perbandingan di Aspose.PDF memungkinkan Anda untuk membandingkan dua dokumen PDF halaman demi halaman. Anda dapat memilih untuk membandingkan halaman tertentu atau seluruh dokumen. Dokumen perbandingan yang dihasilkan menyoroti perbedaan, sehingga lebih mudah untuk mengidentifikasi perubahan antara kedua file.

Berikut adalah daftar cara yang mungkin untuk membandingkan dokumen PDF menggunakan library Aspose.PDF for .NET:

  1. Membandingkan Halaman Tertentu - Bandingkan halaman pertama dari dua dokumen PDF.

  2. Membandingkan Seluruh Dokumen - Bandingkan seluruh konten dari dua dokumen PDF.

  3. Bandingkan dokumen PDF secara grafis:

  • Bandingkan PDF dengan metode GetDifference - gambar individu di mana perubahan ditandai.

  • Bandingkan PDF dengan metode CompareDocumentsToPdf - dokumen PDF dengan gambar di mana perubahan ditandai.

Membandingkan Halaman Tertentu

Cuplikan kode pertama menunjukkan cara membandingkan halaman pertama dari dua dokumen PDF.

  1. Inisialisasi Dokumen. Kode dimulai dengan menginisialisasi dua dokumen PDF menggunakan jalur file masing-masing (documentPath1 dan documentPath2). Jalur tersebut ditentukan sebagai string kosong untuk saat ini, tetapi dalam praktiknya, Anda akan menggantinya dengan jalur file yang sebenarnya.

  2. Proses Perbandingan.

  • Pemilihan Halaman - perbandingan dibatasi pada halaman pertama dari setiap dokumen (‘Pages[1]’).
  • Opsi Perbandingan:

‘AdditionalChangeMarks = true’ - opsi ini memastikan bahwa penanda perubahan tambahan ditampilkan. Penanda ini menyoroti perbedaan yang mungkin ada di halaman lain, bahkan jika tidak ada di halaman saat ini yang dibandingkan.

‘ComparisonMode = ComparisonMode.IgnoreSpaces’ - mode ini memberi tahu pembanding untuk mengabaikan spasi dalam teks, hanya fokus pada perubahan dalam kata.

  1. Dokumen perbandingan yang dihasilkan, yang menyoroti perbedaan antara kedua halaman, disimpan ke jalur file yang ditentukan dalam ‘resultPdfPath’.
// For complete examples and data files, visit https://github.com/aspose-pdf/Aspose.PDF-for-.NET
private static void ComparingSpecificPages()
{
    // The path to the documents directory
    var dataDir = RunExamples.GetDataDir_AsposePdf_DocumentCompare();

    // Open PDF documents
    using (var document1 = new Aspose.Pdf.Document(dataDir + "ComparingSpecificPages1.pdf"))
    {
        using (var document2 = new Aspose.Pdf.Document(dataDir + "ComparingSpecificPages2.pdf"))
        {
            // Compare
            Aspose.Pdf.Comparison.SideBySidePdfComparer.Compare(document1.Pages[1], document2.Pages[1], dataDir + "ComparingSpecificPages_out.pdf", new Aspose.Pdf.Comparison.SideBySideComparisonOptions
            {
                AdditionalChangeMarks = true,
                ComparisonMode = Aspose.Pdf.Comparison.ComparisonMode.IgnoreSpaces,
                DeleteColor = Color.DarkGray,
                InsertColor = Color.LightYellow
            });
        }
    }
}

Membandingkan Seluruh Dokumen

Cuplikan kode kedua memperluas cakupan untuk membandingkan seluruh konten dari dua dokumen PDF.

// For complete examples and data files, visit https://github.com/aspose-pdf/Aspose.PDF-for-.NET
private static void ComparingEntireDocuments()
{
    // The path to the documents directory
    var dataDir = RunExamples.GetDataDir_AsposePdf_DocumentCompare();

    // Open PDF documents
    using (var document1 = new Aspose.Pdf.Document(dataDir + "ComparingEntireDocuments1.pdf"))
    {
        using (var document2 = new Aspose.Pdf.Document(dataDir + "ComparingEntireDocuments2.pdf"))
        {
            // Compare
            Aspose.Pdf.Comparison.SideBySidePdfComparer.Compare(
                document1,
                document2,
                dataDir + "ComparingEntireDocuments_out.pdf",
                new Aspose.Pdf.Comparison.SideBySideComparisonOptions
                {
                    AdditionalChangeMarks = true,
                    ComparisonMode = Aspose.Pdf.Comparison.ComparisonMode.IgnoreSpaces,
                    DeleteColor = Color.DarkGray,
                    InsertColor = Color.LightYellow
                });
        }
    }
}

Hasil perbandingan yang dihasilkan oleh cuplikan ini adalah dokumen PDF yang dapat Anda buka di penampil seperti Adobe Acrobat. Jika Anda menggunakan tampilan Dua halaman di Adobe Acrobat, Anda akan melihat perubahan berdampingan:

  • Penghapusan - ini dicatat di halaman kiri.
  • Penyisipan - ini dicatat di halaman kanan.

Dengan mengatur ‘AdditionalChangeMarks’ ke ’true’, Anda juga dapat melihat penanda untuk perubahan yang mungkin terjadi di halaman lain, bahkan jika perubahan tersebut tidak ada di halaman saat ini yang sedang dilihat.

Aspose.PDF for .NET menyediakan alat yang kuat untuk membandingkan dokumen PDF, baik Anda perlu membandingkan halaman tertentu atau seluruh dokumen. Dengan menggunakan opsi seperti ‘AdditionalChangeMarks’ dan pengaturan ‘ComparisonMode’ yang berbeda, Anda dapat menyesuaikan proses perbandingan sesuai dengan kebutuhan spesifik Anda. Dokumen yang dihasilkan memberikan tampilan yang jelas, berdampingan dari perubahan, sehingga lebih mudah untuk melacak revisi dan memastikan akurasi dokumen.

Pembanding dokumen PDF berdampingan mengembalikan hasil perbandingan sebagai objek dari kelas berikut

Kelas Tujuan Properti Kunci Cara Menggunakan
SideBySideDocsComparisonResult Mewakili hasil perbandingan berdampingan dari dua dokumen PDF. * HasChanges – menunjukkan apakah ada perubahan yang terdeteksi.
* FirstDocChanges – daftar perubahan yang dikelompokkan berdasarkan halaman versi dokumen pertama.
* SecondDocChanges – daftar perubahan yang dikelompokkan berdasarkan halaman versi dokumen kedua.
* FullChanges – urutan lengkap perubahan, di mana setiap elemen sesuai dengan sepasang halaman yang dibandingkan dan berisi semua operasi perbandingan untuk pasangan halaman tersebut.
Dikembalikan oleh metode SideBySidePdfComparer.Compare(Document, Document, string, SideBySideComparisonOptions). Setelah mendapatkan instansinya, Anda dapat menentukan apakah ada perubahan yang ada (HasChanges) dan mengiterasi melalui koleksi untuk mengambil informasi rinci tentang halaman dan fragmen mana yang telah berubah.
SideBySidePagesComparisonResult Mewakili hasil perbandingan berdampingan dari dua halaman PDF individu. * HasChanges – menunjukkan apakah ada perbedaan antara halaman.
* FirstPageChanges – daftar perubahan yang terdeteksi di halaman pertama.
* SecondPageChanges – daftar perubahan yang terdeteksi di halaman kedua.
* FullChanges – urutan lengkap operasi perbandingan antara kedua halaman.
Dikembalikan oleh metode SideBySidePdfComparer.Compare(Page, Page, string, SideBySideComparisonOptions). Setelah mendapatkan instansinya, Anda dapat menentukan apakah ada perubahan yang ada (HasChanges) dan mengiterasi melalui koleksi untuk mengambil daftar lengkap perbedaan.

Properti Detail

Properti Tipe Deskripsi
HasChanges bool Menunjukkan apakah setidaknya satu perbedaan ada.
FirstDocChanges / FirstPageChanges List<List<EditContainer>> / List<EditContainer> Mengandung perubahan yang terdeteksi di dokumen (halaman) pertama. Untuk dokumen, ini adalah daftar daftar, di mana setiap daftar bersarang sesuai dengan satu halaman.
SecondDocChanges / SecondPageChanges List<List<EditContainer>> / List<EditContainer> Mengandung perubahan yang terdeteksi di dokumen (halaman) kedua. Untuk dokumen, ini adalah daftar daftar, di mana setiap daftar bersarang sesuai dengan satu halaman.
FullChanges List<List<DiffOperation>> (dokumen)
List<DiffOperation> (halaman)
Sekumpulan operasi perbandingan yang lengkap. Untuk dokumen, ini adalah daftar dua dimensi di mana setiap elemen luar sesuai dengan sepasang halaman yang dibandingkan. Untuk halaman, ini adalah daftar datar dari operasi.
DiffOperation (tipe eksternal) Menggambarkan perubahan spesifik (penyisipan, penghapusan, kesetaraan).

Contoh Penggunaan

  // For complete examples and data files, visit https://github.com/aspose-pdf/Aspose.PDF-for-.NET
  private static void ComparingEntireDocuments()
  {
      // The path to the documents directory
      var dataDir = RunExamples.GetDataDir_AsposePdf_DocumentCompare();

      // --- Comparing pages ----------------------------

      // Open PDF documents
      using (Document doc1 = new Document(dataDir + "ComparingEntireDocuments1.pdf"),
             doc2 = new Document(dataDir + "ComparingEntireDocuments2.pdf"))
      {
          // Compare
          SideBySidePagesComparisonResult pageResult = SideBySidePdfComparer.Compare(
              doc1.Pages[1],
              doc2.Pages[1],
              dataDir + "ComparingEntireDocuments_out.pdf",
              new SideBySideComparisonOptions
              {
                  AdditionalChangeMarks = false,
                  ComparisonMode = ComparisonMode.Normal
              });

          Console.WriteLine("=== Page Comparison ===");

          Console.WriteLine(pageResult.HasChanges ? "Changes were detected" : "No changes detected");

          Console.WriteLine($"First page changes count : {pageResult.FirstPageChanges.Count}");
          Console.WriteLine($"Second page changes count: {pageResult.SecondPageChanges.Count}");
          Console.WriteLine($"Total changes count      : {pageResult.FullChanges.Count}");
      }

      // --- Comparing documents ----------------------------

      // Open PDF documents
      using (Document doc1 = new Document(dataDir + "ComparingEntireDocuments1.pdf"),
             doc2 = new Document(dataDir + "ComparingEntireDocuments2.pdf"))
      {
          // Compare
          SideBySideDocsComparisonResult docResult = SideBySidePdfComparer.Compare(
              doc1,
              doc2,
              dataDir + "ComparingEntireDocuments_out.pdf",
              new SideBySideComparisonOptions
              {
                  AdditionalChangeMarks = false,
                  ComparisonMode = ComparisonMode.Normal
              });

          Console.WriteLine("\n=== Document Comparison ===");

          Console.WriteLine(docResult.HasChanges ? "Changes were detected" : "No changes detected");

          Console.WriteLine($"First document changes count : {Count(docResult.FirstDocChanges)} ");
          Console.WriteLine($"Second document changes count: {Count(docResult.SecondDocChanges)}");
          Console.WriteLine($"Total changes count          : {Count(docResult.FullChanges)}");
      }
  }

 private static int Count<T>(List<List<T>> list)
  {
      int count = 0;
      foreach (var innerList in list)
      {
          count += innerList.Count;
      }
      return count;
  }

EditContainer adalah objek pembantu yang menggambarkan perubahan individu yang terdeteksi selama perbandingan halaman PDF (atau dokumen). Ini berfungsi sebagai “wadah” yang menyimpan pengidentifikasi perubahan, jenis perbedaan, tanda tambahan, dan koordinat geometris (persegi panjang) yang menunjukkan lokasi tepat dari perubahan di halaman.

Properti Tipe Deskripsi
Id int Pengidentifikasi unik dari perubahan. Ini memungkinkan satu perubahan dibedakan dari yang lain dalam hasil perbandingan. Ini digunakan dalam anotasi perubahan di halaman.
Operation DiffOperation Jenis operasi perbedaan yang menggambarkan sifat perubahan (penyisipan, penghapusan, penggantian, dll.).
Rects List<Rectangle> Kumpulan wilayah persegi panjang yang mencakup fragmen yang dimodifikasi di halaman.

Bandingkan dokumen PDF menggunakan GraphicalPdfComparer

Saat berkolaborasi pada dokumen, terutama di lingkungan profesional, Anda sering kali berakhir dengan beberapa versi dari file yang sama.

Anda dapat menggunakan kelas GraphicalPdfComparer untuk membandingkan dokumen dan halaman PDF. Kelas ini cocok untuk membandingkan perubahan dalam konten grafis halaman.

Dengan Aspose.PDF for .NET, dimungkinkan untuk membandingkan dokumen dan halaman dan mengeluarkan hasil perbandingan ke dokumen PDF atau file gambar.

Anda dapat mengatur properti kelas berikut:

  • Resolusi - resolusi dalam unit DPI untuk gambar keluaran, serta untuk gambar yang dihasilkan selama perbandingan.
  • Warna - warna tanda perubahan.
  • Ambang - ambang perubahan dalam persen. Nilai default adalah nol. Mengatur nilai selain nol memungkinkan Anda untuk mengabaikan perubahan grafis yang tidak signifikan bagi Anda.

Kelas ini memiliki metode yang memungkinkan Anda untuk mendapatkan perbedaan gambar halaman dalam bentuk yang cocok untuk pemrosesan lebih lanjut: ImagesDifference GetDifference(Page page1, Page page2).

Metode ini mengembalikan objek dari kelas ImagesDifference, yang berisi gambar dari halaman pertama yang dibandingkan dan array perbedaan. Array perbedaan dan gambar asli memiliki format piksel RGB24bpp.

ImagesDifference memungkinkan Anda untuk menghasilkan gambar yang berbeda dan mendapatkan gambar dari halaman kedua yang dibandingkan dengan menambahkan array perbedaan ke gambar asli. Untuk melakukan ini, gunakan metode ImagesDifference.GetDestinationImage dan ImagesDifference.DifferenceToImage.

Bandingkan PDF dengan metode GetDifference

Kode yang disediakan mendefinisikan metode GetDifference yang membandingkan dua dokumen PDF dan menghasilkan representasi visual dari perbedaan antara keduanya.

Metode ini membandingkan halaman pertama dari dua file PDF dan menghasilkan dua gambar PNG:

  • Satu gambar (diffPngFilePath) menyoroti perbedaan antara halaman dalam warna merah.
  • Gambar lainnya (destPngFilePath) adalah representasi visual dari halaman PDF tujuan (kedua).

Proses ini dapat berguna untuk membandingkan perubahan atau perbedaan secara visual antara dua versi dokumen.

// For complete examples and data files, visit https://github.com/aspose-pdf/Aspose.PDF-for-.NET
private static void ComparePDFWithGetDifferenceMethod()
{
    // The path to the documents directory
    var dataDir = RunExamples.GetDataDir_AsposePdf_DocumentCompare();

    // Open PDF documents
    using (var document1 = new Aspose.Pdf.Document(dataDir + "ComparePDFWithGetDifferenceMethod1.pdf"))
    {
        using (var document2 = new Aspose.Pdf.Document(dataDir + "ComparePDFWithGetDifferenceMethod2.pdf"))
        {
            // Create comparer 
            var comparer = new Aspose.Pdf.Comparison.GraphicalPdfComparer();
            // Compare
            using (var imagesDifference = comparer.GetDifference(document1.Pages[1], document2.Pages[1]))
            {
                using (var diffImg = imagesDifference.DifferenceToImage(Aspose.Pdf.Color.Red, Aspose.Pdf.Color.White))
                {
                    diffImg.Save(dataDir + "ComparePDFWithGetDifferenceMethodDiffPngFilePath_out.png");
                }
                using (var destImg = imagesDifference.GetDestinationImage())
                {
                    destImg.Save(dataDir + "ComparePDFWithGetDifferenceMethodDestPngFilePath_out.png");
                }
            }
        }
    }
}

Bandingkan PDF dengan metode CompareDocumentsToPdf

Cuplikan kode yang disediakan menggunakan metode CompareDocumentsToPdf yang membandingkan dua dokumen dan menghasilkan laporan PDF dari hasil perbandingan.

// For complete examples and data files, visit https://github.com/aspose-pdf/Aspose.PDF-for-.NET
private static void ComparePDFWithCompareDocumentsToPdfMethod()
{
    // The path to the documents directory
    var dataDir = RunExamples.GetDataDir_AsposePdf_DocumentCompare();

    // Open PDF documents
    using (var document1 = new Aspose.Pdf.Document(dataDir + "ComparePDFWithCompareDocumentsToPdfMethod1.pdf"))
    {
        using (var document2 = new Aspose.Pdf.Document(dataDir + "ComparePDFWithCompareDocumentsToPdfMethod2.pdf"))
        {
            // Create comparer
            var comparer = new Aspose.Pdf.Comparison.GraphicalPdfComparer()
            {
                Threshold = 3.0,
                Color = Aspose.Pdf.Color.Blue,
                Resolution = new Aspose.Pdf.Devices.Resolution(300)
            };
            // Compare
            comparer.CompareDocumentsToPdf(document1, document2, dataDir + "compareDocumentsToPdf_out.pdf");
        }
    }
}

Metode Universal untuk Perbandingan Dokumen

Anda dapat menggunakan kelas TextPdfComparer untuk membandingkan dokumen dan halaman individu. Kelas ini memungkinkan membandingkan dokumen halaman demi halaman atau sebagai aliran konten kontinu tunggal (tanpa pemisahan halaman). Metode perbandingan mengembalikan array perbedaan yang dapat diteruskan ke kelas mana pun yang mengimplementasikan antarmuka IStringOutputGenerator atau IFileOutputGenerator untuk menghasilkan keluaran perbandingan yang diformat. Keluaran didukung dalam: HTML, Markdown, PDF, dan JSON. Anda juga dapat menggunakan kelas ComparisonStatistics untuk memperoleh statistik tentang operasi perbandingan yang dilakukan.

Metode Deskripsi Parameter Nilai Kembali
CompareDocumentsPageByPage(Document document1, Document document2, ComparisonOptions options) Membandingkan dua dokumen PDF halaman demi halaman. * document1 – dokumen pertama.
* document2 – dokumen kedua.
* options – opsi perbandingan (lihat di bawah).
List<List<DiffOperation>> – daftar perbedaan untuk setiap halaman.
CompareDocumentsPageByPage(Document document1, Document document2, ComparisonOptions options, string resultPdfDocumentPath) Sama seperti di atas, tetapi juga menyimpan hasil perbandingan ke file PDF. Parameter yang sama seperti di atas + resultPdfDocumentPath – jalur ke file keluaran. List<List<DiffOperation>> – daftar perbedaan.
CompareFlatDocuments(Document document1, Document document2, ComparisonOptions options) Membandingkan dua dokumen PDF sebagai teks kontinu tunggal (menggabungkan semua halaman). Parameter yang sama seperti di CompareDocumentsPageByPage. List<DiffOperation> – daftar semua perbedaan.
CompareFlatDocuments(Document document1, Document document2, ComparisonOptions options, string resultPdfDocumentPath) Perbandingan dokumen datar dengan hasil disimpan ke file PDF. Parameter yang sama seperti di CompareFlatDocuments + resultPdfDocumentPath. List<DiffOperation> – daftar perbedaan.
ComparePages(Page page1, Page page2, ComparisonOptions options) Membandingkan dua halaman individu. * page1 – halaman pertama.
* page2 – halaman kedua.
* options – opsi perbandingan.
List<DiffOperation> – daftar perbedaan halaman.
CreateComparisonStatistics(List<DiffOperation> diffs) Menghasilkan statistik perbandingan untuk daftar operasi (halaman tunggal). diffs – daftar DiffOperation. TextItemComparisonStatistics (lihat di bawah).
CreateComparisonStatistics(List<List<DiffOperation>> diffs) Menghasilkan statistik perbandingan untuk daftar operasi di seluruh halaman (tingkat dokumen). diffs – daftar daftar DiffOperation. DocumentComparisonStatistics (lihat di bawah).
AssemblySourcePageText(List<DiffOperation> diffs) Membangun kembali teks halaman asli (sebelum perubahan). diffs – daftar operasi. string – teks asli.
AssemblyDestinationPageText(List<DiffOperation> diffs) Membangun kembali teks halaman yang dimodifikasi (setelah perubahan). diffs – daftar operasi. string – teks yang dimodifikasi.

Kelas Publik Terkait

ComparisonOptions

Parameter yang mempengaruhi proses perbandingan:

Properti Tipe Deskripsi
ExtractionArea Rectangle Area dari mana teks akan diekstraksi. Tidak kompatibel dengan ExcludeTables, ExcludeAreas1/2.
ExcludeTables bool Mengecualikan tabel dari perbandingan. Tidak kompatibel dengan ExtractionArea.
ExcludeAreas1 Rectangle[] Array area yang akan dikecualikan untuk dokumen pertama.
ExcludeAreas2 Rectangle[] Array area yang akan dikecualikan untuk dokumen kedua.
EditOperationsOrder EditOperationsOrder (enum) Urutan penerapan operasi sisip/hapus (default adalah DeleteFirst).

DiffOperation

Mewakili satu operasi perbedaan. Mengandung:

Properti Tipe Deskripsi
Operation Operation (enum) Jenis operasi (Equal, Delete, Insert).
Text string Teks yang terkait dengan operasi.

ComparisonStatistics

Kelas Deskripsi
TextItemComparisonStatistics Statistik untuk teks individu (halaman). Termasuk total karakter, jumlah penyisipan, penghapusan, dan operasi yang sesuai.
DocumentComparisonStatistics (mewarisi dari TextItemComparisonStatistics) Statistik yang diperluas untuk seluruh dokumen, termasuk daftar PagesStatistics (statistik per halaman).

Contoh Penggunaan