مقدمه

PDF به‌عنوان استاندارد اصلی برای قراردادها، مشخصات، گزارش‌ها و اسناد قانونی شناخته می‌شود — و با وجود نسخه‌های متعدد در گردش، پیگیری دقیق تغییرات بین دو فایل به‌سرعت کار طاقت‌فرسایی می‌شود. اسکرول کردن اسناد به‌صورت کنار‑به‑کنار و حاشیه‌نویسی دستی تفاوت‌ها مقیاس‌پذیر نیست و حتی ابزارهای تخصصی مانند ویژگی Compare در Adobe Acrobat نیز برای هر جفت فایل نیاز به مداخله دستی دارند.

GroupDocs.Comparison for .NET به شما امکان می‌دهد مقایسه PDF را به‌صورت کامل از طریق کد اجرا کنید و دقیقاً نحوه نمایش نتیجه را انتخاب کنید. نسخه 26.4 کلاس اختصاصی PdfCompareOptions را با سه حالت نمایش خروجی معرفی کرد:

  1. Inline (پیش‌فرض) — یک PDF ترکیبی که حذف‌ها و افزودن‌ها در رنگ‌های متفاوت بر روی همان صفحات برجسته می‌شوند. این رفتار کلاسیک است و ساده‌ترین نتیجه برای اشتراک‌گذاری به‌صورت یک فایل مستقل می‌باشد.
  2. Side‑by‑Side — هر صفحهٔ نتیجه، صفحات منبع و هدف را در کنار هم نشان می‌دهد، بدون همپوشانی محتوا. برای اسنادی که تغییرات زیادی دارند و ترکیب محتوا در یک صفحه باعث سردرگمی می‌شود، ایده‌آل است.
  3. Interleaved — نتیجه شامل صفحات متناوب است: صفحات فرد از منبع (حذف‌ها برجسته) و صفحات زوج از هدف (افزودن‌ها برجسته). تغییرات به‌صورت حاشیه‌نویسی‌های بومی PDF نمایش داده می‌شوند — نوع شیء PDF داخلی که متادیتاهایی مانند نوع تغییر و نام نویسنده را حمل می‌کند. اکثر نمایشگرهای PDF (Adobe Acrobat Reader، Foxit و غیره) به کاربران امکان می‌دهند پنل حاشیه‌نویسی‌ها را باز کرده و حاشیه‌نویسی‌های فردی را بپذیرند یا حذف کنند، که یک جریان کار مرور سبک بدون نیاز به نرم‌افزار اضافی فراهم می‌کند. باز کردن این فایل در یک خواننده PDF با حالت «Two Page View» مقایسهٔ طبیعی چپ/راست را تولید می‌کند.

در این مقاله تمام سه حالت را با مثال‌های عملی C# مرور می‌کنیم، PdfCompareOptions و ویژگی‌های آن را بررسی می‌کنیم و به‌طور مختصر نحوهٔ انجام همان کار به‌صورت دستی در Adobe Acrobat را شرح می‌دهیم.


مقایسه PDFها در Adobe Acrobat

قبل از ورود به روش برنامه‌نویسی، ارزش دارد بدانید Adobe Acrobat Pro به‌صورت پیش‌فرض چه امکاناتی ارائه می‌دهد. ابزار داخلی Compare Files در Acrobat (دسترس‌پذیر از Tools → Compare Files) گزارشی کنار‑به‑کنار تولید می‌کند که تغییرات متن، تفاوت‌های تصویر و تغییرات قالب‌بندی را برجسته می‌کند.

برای اجرای مقایسه در Acrobat Pro:

  1. Acrobat Pro را باز کنید و Tools → Compare Files را انتخاب کنید.
  2. Older File (منبع) و Newer File (هدف) را انتخاب کنید.
  3. روی Compare کلیک کنید. Acrobat یک گزارش تعاملی مقایسه با صفحهٔ خلاصه و نشانگرهای تغییر درون‌خط تولید می‌کند.

این روش برای مرورهای دستی گاه‑به‌گاه مناسب است. اما ابزار مقایسهٔ Acrobat محدودیت‌های قابل‌توجهی دارد وقتی که مقایسه باید بخشی از یک خط لولهٔ خودکار باشد.

زمانی که مقایسه باید روی سرور، در یک خط لولهٔ CI/CD یا به‌عنوان بخشی از یک جریان کار سفارشی انجام شود، کتابخانهٔ مبتنی بر کد گزینهٔ صحیح است.


پیش‌نیازها

شروع کار نیازمند موارد زیر است:

  • .NET 6.0 یا بالاتر.
  • GroupDocs.Comparison for .NET 26.4 یا بالاتر — نصب از طریق NuGet:
dotnet add package GroupDocs.Comparison
  • یک فایل لایسنس (GroupDocs.Comparison.lic). بدون آن کتابخانه در حالت ارزیابی با واترمارک و محدودیت تعداد صفحات اجرا می‌شود. می‌توانید برای تست یک temporary license درخواست کنید.
  • دو فایل PDF برای مقایسه — ما آن‌ها را source.pdf و target.pdf می‌نامیم. مثال محتوا:
source.pdf target.pdf

حالت 1: مقایسه Inline (پیش‌فرض)

زمان استفاده: وقتی می‌خواهید یک فایل PDF تک‌فایلی داشته باشید که هر کسی بتواند آن را باز کند و بلافاصله تغییرات را ببیند — بدون نیاز به نمایشگر خاص یا چیدمان دو‑صفحه‌ای. سناریوی معمول به‌اشتراک‌گذاری پیش‌نویس قرارداد با علامت‌گذاری (redlined) برای طرف مقابل است.

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);
}

نکته: Inline مقدار پیش‌فرض DisplayMode است، بنابراین بلوک options بالا اختیاری است. یک فراخوانی ساده comparer.Compare("result_inline.pdf") همان خروجی را تولید می‌کند.

سند حاصل در حالت Inline:

PDF comparison result in Inline mode

آنچه در پشت صحنه اتفاق می‌افتد:

  • محتوای حذف‌شده از سند منبع با یک رنگ (به‌صورت پیش‌فرض قرمز) برجسته می‌شود.
  • محتوای افزوده‌شده از سند هدف با رنگ دیگری (به‌صورت پیش‌فرض سبز) برجسته می‌شود.
  • هر دو مجموعهٔ تغییرات بر روی همان صفحات هم‌زیست دارند، بنابراین نتیجه فشرده است اما وقتی اسناد به‌طور گسترده تغییر کرده‌اند می‌تواند شلوغ به‌نظر برسد. در ویرایش‌های متنی بزرگ، محتویات حذف‌شده و افزوده‌شده ممکن است فیزیکی روی هم قرار گیرند — برای مثال، یک پاراگراف جایگزین بر روی پاراگراف اصلی رندر می‌شود و باعث درهم‌ریختگی غیرقابل خواندن می‌شود. در چنین مواردی حالت SideBySide یا Interleaved گزینهٔ بهتری است.

حالت 2: مقایسه Side‑by‑Side

زمان استفاده: وقتی دو سند به‌طور گسترده متفاوت هستند و قرار دادن حذف‌ها و افزودن‌ها روی یک صفحه باعث سختی در خواندن می‌شود. Side‑by‑Side محتواهای منبع و هدف را به‌صورت کاملاً جداگانه نگه می‌دارد و مرور هر صفحه را به‌سرعت امکان‌پذیر می‌کند.

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);
}

سند حاصل در حالت Side‑by‑Side:

PDF comparison result in Side-by-Side mode

آنچه در پشت صحنه اتفاق می‌افتد:

  • هر صفحهٔ نتیجه در واقع یک بوم عریض است که به دو نیم تقسیم شده است.
  • نیمهٔ چپ صفحهٔ منبع مربوطه را با حذف‌های برجسته نشان می‌دهد.
  • نیمهٔ راست صفحهٔ هدف را با افزودن‌های برجسته نشان می‌دهد.
  • محتواهای دو سند هرگز هم‌پوشانی نمی‌شوند، بنابراین حتی صفحات با ویرایش‌های سنگین نیز قابل خواندن می‌مانند.

حالت 3: مقایسه Interleaved

زمان استفاده: وقتی می‌خواهید تغییرات را صفحه به صفحه در یک خوانندهٔ PDF استاندارد با حالت Two Page View (یا «Facing Pages») مرور کنید. هر صفحهٔ منبع در سمت چپ و صفحهٔ هدف متناظر در سمت راست قرار می‌گیرد — چیدمان فیزیکی صفحه‌ها همانند آنچه Side‑by‑Side روی یک بوم عریض رندر می‌کند، اما هر صفحه در اندازهٔ کامل خود حفظ می‌شود.

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);
}

سند حاصل در حالت Interleaved (در حالت Two Page View نمایش داده شده):

PDF comparison result in Interleaved mode viewed in Two Page View

آنچه در پشت صحنه اتفاق می‌افتد:

  • سند نتیجه شامل 2 × N صفحه برای یک جفت سند منبع/هدف با N صفحه است.
  • صفحات عدد فرد (1، 3، 5 …) صفحات منبع با حذف‌های برجسته هستند.
  • صفحات عدد زوج (2، 4، 6 …) صفحات هدف با افزودن‌های برجسته هستند.
  • AnnotationAuthorName نام نویسنده را بر روی حاشیه‌نویسی‌های PDF تولید شده در طول مقایسه می‌نویسد — این برای جریان کاری مرور مفید است که در آن نظرات چند نویسنده باید قابل تشخیص باشند.

نکته: برای دریافت چیدمان چپ/راست موردنظر، سند را در Adobe Acrobat Reader یا هر نمایشگری که از View → Page Display → Two Page View پشتیبانی می‌کند باز کنید.


محدود کردن مقایسه به بازه‌ای از صفحات

هر سه حالت از فیلتر کردن بازهٔ صفحات از طریق ویژگی PagesSetup پشتیبانی می‌کنند. این ویژگی زمانی مفید است که فقط یک فصل یا بخش خاص از یک سند بزرگ تغییر کرده باشد و بخواهید بقیه را نادیده بگیرید.

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);
}

زمانی که PagesSetup برابر null باشد (یا تنظیم نشود)، تمام صفحات مقایسه می‌شوند — همان رفتار نسخه‌های قبلی.


بررسی PdfCompareOptions

PdfCompareOptions یک زیرکلاس مخصوص PDF از CompareOptions است که الگوی مشابهی با WordCompareOptions معرفی‌شده در نسخه 26.2 دارد. این کلاس تمام تنظیمات مختص PDF را در یک مکان جمع‌آوری می‌کند تا به‌طور تصادفی تنظیمات مربوط به Word یا صفحات‌گسترده را به کار نگیرید.

Property Type Description
DisplayMode ComparisonDisplayMode نحوهٔ چیدمان نتیجه را کنترل می‌کند: Inline (پیش‌فرض)، SideBySide یا Interleaved.
PagesSetup PagesSetup بازهٔ صفحات برای مقایسه. وقتی null باشد، تمام صفحات پردازش می‌شوند.
CompareImagesPdf bool تعیین می‌کند آیا تصاویر جاسازی‌شده در مقایسه گنجانده شوند یا نه.
AnnotationAuthorName string نام نویسنده‌ای که بر روی حاشیه‌نویسی‌های PDF (در حالت Interleaved) ثبت می‌شود.
ImagesInheritanceMode enum تعیین می‌کند هنگام غیرفعال بودن مقایسهٔ تصویر، کدام سند تصاویر را فراهم می‌کند.

یک مثال کاملاً پیکربندی‌شده:

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

ویژگی‌های پایهٔ CompareOptionsInsertedItemStyle, DeletedItemStyle, ChangedItemStyle — نیز در دسترس هستند و به شما امکان می‌دهند رنگ‌های پیش‌فرض برجسته‌سازی را در صورت نیاز بازنویسی کنید.


دریافت تغییرات به‌صورت برنامه‌نویسی

صرف‌نظر از حالت نمایش، می‌توانید فهرست ساختاری تمام تفاوت‌های شناسایی‌شده را از طریق Comparer.GetChanges() دریافت کنید. این قابلیت برای ساخت گزارش‌های سفارشی، تغذیه نتایج به یک سیستم مرور یا جمع‌آوری آمار دربارهٔ دامنهٔ ویرایش‌ها مفید است.

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}");
}

برای جزئیات بیشتر به مرجع رسمی API مراجعه کنید: Comparer.GetChanges.


کار با PDFهای محافظت‌شده با رمز عبور

PDFهای محافظت‌شده با رمز عبور به‌صورت کامل پشتیبانی می‌شوند. هنگام ایجاد Comparer رمز عبور را از طریق LoadOptions پاس دهید:

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);
}

دریافت نسخه آزمایشی رایگان

می‌توانید GroupDocs.Comparison for .NET را از صفحهٔ انتشارهای رسمی دانلود کنید. برای تست بدون محدودیت، یک temporary license درخواست کنید — نیازی به کارت اعتباری نیست.


سؤالات متداول

س: آیا برای اجرای مقایسه نیاز به نصب Adobe Acrobat یا هر نرم‌افزار PDF دیگری روی سرور دارم؟
ج: خیر. GroupDocs.Comparison یک کتابخانهٔ مستقل .NET است که بدون هیچ‌گونه وابستگی شخص ثالث، فایل‌های PDF را می‌خواند و می‌نویسد.

س: به‌طور پیش‌فرض کدام حالت نمایش را باید استفاده کنم؟
ج: با Inline شروع کنید — فشرده‌ترین نتیجه را تولید می‌کند و به‌سادگی قابل اشتراک‌گذاری است. وقتی ویرایش‌های سنگین باعث دشواری در خواندن نمای Inline می‌شوند، به SideBySide سوئیچ کنید یا اگر مرورکنندگان فایل را در حالت «Two Page View» باز می‌کنند، از Interleaved استفاده کنید.

س: آیا می‌توانم اسناد را در فرمت‌های دیگری غیر از PDF مقایسه کنم؟
ج: بله — کتابخانه از اسناد Word، صفحات گسترده Excel، ارائه‌های PowerPoint، فایل‌های متنی ساده و بسیاری دیگر پشتیبانی می‌کند. فهرست کامل در مستندات موجود است.

س: اگر لایسنس تنظیم نکنم چه می‌شود؟
ج: کتابخانه در حالت ارزیابی اجرا می‌شود. اسناد خروجی شامل واترمارک می‌شوند و فقط چند صفحهٔ اول پردازش می‌شوند. یک temporary license این محدودیت‌ها را برای تست حذف می‌کند.

س: آیا می‌توانم فقط تصاویر داخل یک PDF را مقایسه کنم و تغییرات متنی را نادیده بگیرم؟
ج: برای گنجاندن مقایسهٔ تصویر CompareImagesPdf = true را در PdfCompareOptions تنظیم کنید. برای تمرکز صرفاً بر تصاویر می‌توانید این گزینه را همراه با ویژگی ImagesInheritanceMode ترکیب کنید؛ برای جزئیات بیشتر به مرجع API مراجعه کنید.


نتیجه‌گیری

GroupDocs.Comparison for .NET 26.4 کنترل دقیق و مبتنی بر کد بر نحوهٔ ارائه نتایج مقایسهٔ PDF را در اختیار شما می‌گذارد. حالت Inline رایج‌ترین استفاده را پوشش می‌دهد — یک PDF تک‌فایلی با علامت‌گذاری. SideBySide محتواهای به‌طور گسترده ویرایش‌شده را تمیز و قابل خواندن نگه می‌دارد. Interleaved به‌طور طبیعی با هر خوانندهٔ PDF در حالت Two Page View برای مرور صفحه به صفحه هم‌راستا می‌شود. علاوه بر این، فیلتر کردن بازهٔ صفحات به شما امکان می‌دهد دقیقاً بخش‌های مهم را هدف بگیرید و PdfCompareOptions تمام تنظیمات مختص PDF را در یک کلاس قابل‌کشف جمع‌آوری می‌کند.

حالت مناسب برای جریان کار خود را انتخاب کنید یا هر سه حالت را تولید کنید تا هر مخاطبی بتواند نمای دلخواه خود را انتخاب کند.

منابع اضافی