Giới thiệu

PDF là tiêu chuẩn thực tế cho hợp đồng, thông số kỹ thuật, báo cáo và hồ sơ pháp lý — và với nhiều phiên bản đang lưu hành, việc truy tìm chính xác những gì đã thay đổi giữa hai tệp nhanh chóng trở nên tẻ nhạt. Cuộn qua các tài liệu cạnh nhau và chú thích sự khác biệt bằng tay không thể mở rộng, và ngay cả các công cụ được thiết kế riêng như tính năng Compare của Adobe Acrobat cũng đòi hỏi can thiệp thủ công cho mỗi cặp tệp.

GroupDocs.Comparison for .NET cho phép bạn thực hiện so sánh PDF hoàn toàn bằng mã và chọn cách kết quả được trình bày. Phiên bản 26.4 đã giới thiệu lớp PdfCompareOptions chuyên dụng với ba chế độ hiển thị đầu ra:

  1. Inline (mặc định) — một PDF hợp nhất duy nhất, trong đó các phần bị xóa và chèn được tô sáng bằng các màu khác nhau trên cùng một trang. Đây là hành vi cổ điển và là kết quả dễ chia sẻ nhất dưới dạng tệp độc lập.
  2. Side‑by‑Side — mỗi trang kết quả hiển thị các trang nguồn và đích đặt cạnh nhau, không có nội dung chồng lấn. Thích hợp khi các tài liệu có sự khác biệt lớn và việc trộn nội dung trên một trang sẽ gây nhầm lẫn.
  3. Interleaved — kết quả chứa các trang xen kẽ: các trang lẻ lấy từ nguồn (đánh dấu xóa), các trang chẵn từ đích (đánh dấu chèn). Các thay đổi được biểu diễn dưới dạng chú thích PDF gốc — một loại đối tượng PDF tích hợp mang siêu dữ liệu như loại thay đổi và tên tác giả. Hầu hết các trình xem PDF (Adobe Acrobat Reader, Foxit, v.v.) cho phép người dùng mở bảng chú thích và chấp nhận hoặc xóa các chú thích riêng lẻ, tạo ra một quy trình xem xét nhẹ nhàng mà không cần phần mềm bổ sung. Mở tệp này trong trình đọc PDF ở chế độ “Two Page View” sẽ tạo ra so sánh trái/phải tự nhiên.

Trong bài viết này, chúng tôi sẽ hướng dẫn ba chế độ trên với các ví dụ C# hoạt động, khám phá PdfCompareOptions và các thuộc tính của nó, và sơ lược cách thực hiện cùng một nhiệm vụ thủ công trong Adobe Acrobat.


So sánh PDF trong Adobe Acrobat

Trước khi đi sâu vào cách lập trình, bạn nên biết Adobe Acrobat Pro cung cấp gì ngay từ đầu. Công cụ Compare Files tích hợp sẵn của Acrobat (có trong Tools → Compare Files) tạo ra báo cáo so sánh cạnh nhau, tô sáng các thay đổi văn bản, sự khác biệt hình ảnh và thay đổi định dạng.

Để thực hiện so sánh trong Acrobat Pro:

  1. Mở Acrobat Pro và chọn Tools → Compare Files.
  2. Chọn Older File (nguồn) và Newer File (đích).
  3. Nhấn Compare. Acrobat tạo ra một báo cáo so sánh tương tác với trang tóm tắt và các dấu thay đổi nội tuyến.

Điều này hoạt động tốt cho các lần xem xét thủ công thỉnh thoảng. Tuy nhiên, công cụ so sánh của Acrobat có những hạn chế đáng kể khi việc so sánh cần là một phần của quy trình tự động.

Khi so sánh phải diễn ra trên máy chủ, trong pipeline CI/CD, hoặc như một phần của quy trình xem xét tùy chỉnh, một thư viện “code‑first” là công cụ phù hợp.


Các yêu cầu trước

Trước khi bắt đầu:

  • .NET 6.0 trở lên.
  • GroupDocs.Comparison for .NET 26.4 trở lên — cài đặt qua NuGet:
dotnet add package GroupDocs.Comparison
  • Một tệp giấy phép (GroupDocs.Comparison.lic). Nếu không có, thư viện sẽ chạy ở chế độ đánh giá với watermark và giới hạn số trang. Bạn có thể yêu cầu một temporary license để thử nghiệm.
  • Hai tệp PDF để so sánh — chúng tôi sẽ gọi là source.pdftarget.pdf. Nội dung mẫu:
source.pdf target.pdf

Chế độ 1: So sánh Inline (Mặc định)

Khi nào nên dùng: bạn muốn một tệp PDF tự chứa duy nhất mà bất kỳ ai cũng có thể mở và ngay lập tức thấy những gì đã thay đổi — mà không cần trình xem đặc biệt hay bố cục hai trang. Kịch bản điển hình là chia sẻ bản hợp đồng đã được gạch chân (redlined) với đối tác.

using GroupDocs.Comparison;
using GroupDocs.Comparison.Options;

using (var comparer = new Comparer("source.pdf"))
{
    comparer.Add("target.pdf");

    var options = new PdfCompareOptions
    {
        DisplayMode = PdfCompareOptions.ComparisonDisplayMode.Inline
    };

    comparer.Compare("result_inline.pdf", options);
}

Lưu ý: Inline là giá trị mặc định của DisplayMode, vì vậy khối options ở trên là tùy chọn. Lệnh comparer.Compare("result_inline.pdf") đơn giản cũng tạo ra cùng một đầu ra.

Tài liệu kết quả ở chế độ Inline:

PDF comparison result in Inline mode

Điều gì xảy ra phía sau:

  • Nội dung bị xóa từ tài liệu nguồn được tô sáng bằng một màu (mặc định là đỏ).
  • Nội dung được chèn từ tài liệu đích được tô sáng bằng một màu khác (mặc định là xanh lá).
  • Cả hai bộ thay đổi cùng tồn tại trên cùng một trang, vì vậy kết quả gọn gàng nhưng có thể trông bận rộn khi các tài liệu khác nhau nhiều. Với các chỉnh sửa văn bản đáng kể, nội dung bị xóa và chèn có thể chồng lên nhau trên trang — ví dụ, một đoạn văn được thay thế sẽ hiển thị trên đoạn gốc, tạo ra một hỗn độn khó đọc. Trong những trường hợp này, chế độ SideBySide hoặc Interleaved là lựa chọn tốt hơn.

Chế độ 2: So sánh Side‑by‑Side

Khi nào nên dùng: hai tài liệu khác nhau nhiều và việc đặt các phần bị xóa và chèn trên cùng một trang sẽ làm cho kết quả khó đọc. Side‑by‑Side giữ nội dung nguồn và đích tách biệt hoàn toàn, giúp quét nhanh từng trang.

using GroupDocs.Comparison;
using GroupDocs.Comparison.Options;

using (var comparer = new Comparer("source.pdf"))
{
    comparer.Add("target.pdf");

    var options = new PdfCompareOptions
    {
        DisplayMode = PdfCompareOptions.ComparisonDisplayMode.SideBySide
    };

    comparer.Compare("result_side_by_side.pdf", options);
}

Tài liệu kết quả ở chế độ Side‑by‑Side:

PDF comparison result in Side-by-Side mode

Điều gì xảy ra phía sau:

  • Mỗi trang kết quả thực chất là một canvas rộng được chia làm hai nửa.
  • Nửa trái hiển thị trang nguồn tương ứng với các phần bị xóa được tô sáng.
  • Nửa phải hiển thị trang đích với các phần chèn được tô sáng.
  • Nội dung của hai tài liệu không bao giờ chồng lấn, vì vậy ngay cả các trang được chỉnh sửa mạnh cũng vẫn dễ đọc.

Chế độ 3: So sánh Interleaved

Khi nào nên dùng: bạn muốn xem xét các thay đổi trang theo trang trong một trình đọc PDF tiêu chuẩn sử dụng chế độ Two Page View (hoặc “Facing Pages”). Mỗi trang nguồn nằm bên trái, trang đích tương ứng nằm bên phải — bố cục trang vật lý phản ánh những gì Side‑by‑Side hiển thị trên một canvas duy nhất, nhưng mỗi trang được giữ ở kích thước đầy đủ.

using GroupDocs.Comparison;
using GroupDocs.Comparison.Options;

using (var comparer = new Comparer("source.pdf"))
{
    comparer.Add("target.pdf");

    var options = new PdfCompareOptions
    {
        DisplayMode = PdfCompareOptions.ComparisonDisplayMode.Interleaved,
        AnnotationAuthorName = "GroupDocs"
    };

    comparer.Compare("result_interleaved.pdf", options);
}

Tài liệu kết quả ở chế độ Interleaved (hiển thị trong Two Page View):

PDF comparison result in Interleaved mode viewed in Two Page View

Điều gì xảy ra phía sau:

  • Tài liệu kết quả chứa 2 × N trang cho một cặp nguồn/đích N trang.
  • Các trang lẻ (1, 3, 5 …) là các trang nguồn với các phần bị xóa được tô sáng.
  • Các trang chẵn (2, 4, 6 …) là các trang đích với các phần chèn được tô sáng.
  • AnnotationAuthorName ghi tên tác giả lên các chú thích PDF được tạo ra trong quá trình so sánh — hữu ích khi kết quả được đưa vào quy trình xem xét mà nhiều tác giả cần phân biệt bình luận.

Mẹo: mở kết quả trong Adobe Acrobat Reader hoặc bất kỳ trình xem nào hỗ trợ View → Page Display → Two Page View để tự động nhận được bố cục trái/phải mong muốn.


Giới hạn So sánh trong một Phạm vi Trang

Cả ba chế độ đều hỗ trợ lọc phạm vi trang qua thuộc tính PagesSetup. Điều này hữu ích khi chỉ một chương hoặc phần cụ thể của tài liệu lớn đã thay đổi và bạn muốn bỏ qua phần còn lại.

using GroupDocs.Comparison;
using GroupDocs.Comparison.Options;

using (var comparer = new Comparer("source.pdf"))
{
    comparer.Add("target.pdf");

    var options = new PdfCompareOptions
    {
        DisplayMode = PdfCompareOptions.ComparisonDisplayMode.SideBySide,
        PagesSetup = new PagesSetup
        {
            StartPage = 3,
            EndPage = 10
        }
    };

    comparer.Compare("result_pages_3_to_10.pdf", options);
}

Khi PagesSetupnull (hoặc không được đặt), tất cả các trang sẽ được so sánh — hành vi giống như các phiên bản trước.


Khám phá PdfCompareOptions

PdfCompareOptions là một lớp con đặc thù cho PDF của CompareOptions, theo cùng mẫu như WordCompareOptions được giới thiệu trong phiên bản 26.2. Nó gom tất cả các cài đặt chỉ dành cho PDF vào một nơi để bạn không vô tình áp dụng các tùy chọn dành cho Word hoặc bảng tính cho công việc PDF.

Thuộc tính Kiểu Mô tả
DisplayMode ComparisonDisplayMode Điều khiển bố cục kết quả: Inline (mặc định), SideBySide, hoặc Interleaved.
PagesSetup PagesSetup Phạm vi trang cần so sánh. Khi null, tất cả các trang sẽ được xử lý.
CompareImagesPdf bool Có bao gồm hình ảnh nhúng trong quá trình so sánh hay không.
AnnotationAuthorName string Tên tác giả được ghi lên các chú thích PDF (được dùng trong chế độ Interleaved).
ImagesInheritanceMode enum Điều khiển tài liệu nào cung cấp hình ảnh khi so sánh hình ảnh bị tắt.

Một ví dụ cấu hình đầy đủ:

var options = new PdfCompareOptions
{
    DisplayMode = PdfCompareOptions.ComparisonDisplayMode.Interleaved,
    CompareImagesPdf = true,
    AnnotationAuthorName = "Review Bot",
    PagesSetup = new PagesSetup { StartPage = 1, EndPage = 5 }
};

Các thuộc tính kế thừa từ lớp cơ sở CompareOptionsInsertedItemStyle, DeletedItemStyle, ChangedItemStyle — cũng khả dụng, cho phép bạn ghi đè màu tô sáng mặc định khi cần.


Lấy Các Thay đổi Theo Chương Trình

Bất kể chế độ hiển thị nào, bạn vẫn có thể lấy danh sách có cấu trúc của tất cả các khác biệt được phát hiện qua Comparer.GetChanges(). Điều này hữu ích để xây dựng báo cáo tùy chỉnh, đưa kết quả vào hệ thống xem xét, hoặc thu thập thống kê về phạm vi chỉnh sửa.

using (var comparer = new Comparer("source.pdf"))
{
    comparer.Add("target.pdf");

    comparer.Compare("result.pdf");

    var changes = comparer.GetChanges(); // returns ChangeInfo[]
    Console.WriteLine($"Total changes detected: {changes.Length}");
}

Xem tài liệu API chính thức để biết chi tiết: Comparer.GetChanges.


Làm việc với PDF được Bảo vệ Mật khẩu

PDF được bảo vệ bằng mật khẩu được hỗ trợ đầy đủ. Cung cấp mật khẩu qua LoadOptions khi tạo Comparer:

using GroupDocs.Comparison;
using GroupDocs.Comparison.Options;

using (var comparer = new Comparer("source_protected.pdf",
    new LoadOptions { Password = "secret" }))
{
    comparer.Add("target_protected.pdf", new LoadOptions { Password = "secret" });

    var options = new PdfCompareOptions
    {
        DisplayMode = PdfCompareOptions.ComparisonDisplayMode.SideBySide
    };

    comparer.Compare("result_protected.pdf", options);
}

Nhận Bản Dùng Thử Miễn Phí

Bạn có thể tải GroupDocs.Comparison for .NET từ trang phát hành chính thức. Để thử nghiệm không giới hạn, yêu cầu một temporary license — không cần thẻ tín dụng.


Câu hỏi Thường gặp

Q: Tôi có cần cài đặt Adobe Acrobat hoặc phần mềm PDF nào khác trên máy chủ không?
A: Không. GroupDocs.Comparison là một thư viện .NET độc lập, đọc và ghi tệp PDF mà không phụ thuộc vào bất kỳ bên thứ ba nào.

Q: Tôi nên dùng chế độ hiển thị nào làm mặc định?
A: Bắt đầu với Inline — nó tạo ra kết quả gọn nhất và dễ chia sẻ nhất. Chuyển sang SideBySide khi các chỉnh sửa nặng làm cho chế độ inline khó đọc, hoặc dùng Interleaved khi người xem sẽ mở kết quả trong trình đọc PDF ở chế độ “Two Page View”.

Q: Tôi có thể so sánh tài liệu ở định dạng khác ngoài PDF không?
A: Có — thư viện hỗ trợ tài liệu Word, bảng tính Excel, bản trình chiếu PowerPoint, tệp văn bản thuần và nhiều định dạng khác. Danh sách đầy đủ có trong documentation.

Q: Điều gì sẽ xảy ra nếu tôi không đặt giấy phép?
A: Thư viện sẽ chạy ở chế độ đánh giá. Các tài liệu đầu ra sẽ chứa watermark và chỉ một vài trang đầu tiên được xử lý. Một temporary license sẽ loại bỏ các hạn chế này cho việc thử nghiệm.

Q: Tôi có thể chỉ so sánh hình ảnh bên trong PDF và bỏ qua thay đổi văn bản không?
A: Sử dụng CompareImagesPdf = true trên PdfCompareOptions để bao gồm so sánh hình ảnh. Để tập trung duy nhất vào hình ảnh, bạn có thể kết hợp với thuộc tính ImagesInheritanceMode; xem tài liệu API để biết chi tiết.


Kết luận

GroupDocs.Comparison for .NET 26.4 cung cấp cho bạn khả năng kiểm soát chính xác, dựa trên mã, cách kết quả so sánh PDF được trình bày. Chế độ Inline đáp ứng nhu cầu phổ biến nhất — một PDF redlined duy nhất, có thể chia sẻ. SideBySide giữ nội dung đã chỉnh sửa nặng gọn gàng và dễ đọc. Interleaved khớp tự nhiên với bất kỳ trình đọc PDF nào ở chế độ Two Page View để duyệt từng trang đầy đủ. Thêm vào đó, lọc phạm vi trang cho phép bạn tập trung vào những phần quan trọng, và PdfCompareOptions tập hợp tất cả các cài đặt đặc thù cho PDF trong một lớp dễ khám phá.

Hãy chọn chế độ phù hợp với quy trình làm việc của bạn, hoặc tạo cả ba và để mỗi đối tượng người dùng tự chọn cách xem ưa thích.

Tài nguyên Bổ sung