المقدمة
PDF هو المعيار الفعلي للعقود، والمواصفات، والتقارير، والملفات التنظيمية — ومع وجود إصدارات متعددة في التداول، يصبح تتبع ما تغير بالضبط بين ملفين أمرًا مرهقًا بسرعة. التمرير عبر المستندات جنبًا إلى جنب وتعليق الاختلافات يدويًا لا يمكن توسيعه، وحتى الأدوات المصممة خصيصًا مثل ميزة Compare في Adobe Acrobat تتطلب تدخلًا يدويًا لكل زوج من الملفات.
GroupDocs.Comparison for .NET يتيح لك تشغيل مقارنة PDF بالكامل من خلال الكود واختيار الطريقة التي يُعرض بها النتيجة بالضبط. أصدرت النسخة 26.4 فئة مخصصة PdfCompareOptions مع ثلاث أوضاع عرض للنتيجة:
- Inline (الافتراضي) — ملف PDF موحد حيث يتم تمييز الحذف والإضافة بألوان مختلفة على نفس الصفحات. هذا هو السلوك الكلاسيكي وهو أسهل نتيجة للمشاركة كملف مستقل.
- Side‑by‑Side — كل صفحة نتيجة تُظهر صفحات المصدر والهدف موضوعة بجانب بعضها، دون تداخل محتوى. مثالي عندما تختلف المستندات بشكل كبير ويكون خلط المحتوى على صفحة واحدة مربكًا.
- Interleaved — النتيجة تحتوي على صفحات متناوبة: الصفحات الفردية تأتي من المصدر (مع تمييز الحذف)، والصفحات الزوجية من الهدف (مع تمييز الإضافة). يتم تمثيل التغييرات كتعليقات توضيحية PDF أصلية — نوع كائن PDF مدمج يحمل بيانات وصفية مثل نوع التغيير واسم المؤلف. معظم عارضات PDF (Adobe Acrobat Reader، Foxit، إلخ) تسمح للمستخدمين بفتح لوحة التعليقات وتقبل أو حذف التعليقات الفردية، مما يجعلها سير عمل مراجعة خفيف الوزن دون أي برنامج إضافي. فتح هذا الملف في عارض PDF بنمط “عرض صفحتين” ينتج مقارنة طبيعية يسار/يمين.
في هذه المقالة سنستعرض جميع الأوضاع الثلاثة بأمثلة C# عملية، نستكشف PdfCompareOptions وخصائصه، ونغطي باختصار كيف يمكن تنفيذ نفس المهمة يدويًا في Adobe Acrobat.
مقارنة ملفات PDF في Adobe Acrobat
قبل الغوص في النهج البرمجي، من المفيد معرفة ما يقدمه Adobe Acrobat Pro مباشرةً. أداة Compare Files المدمجة في Acrobat (متاحة تحت Tools → Compare Files) تنتج تقريرًا جنبًا إلى جنب يبرز تغييرات النص، واختلافات الصور، وتحولات التنسيق.
لتشغيل مقارنة في Acrobat Pro:
- افتح Acrobat Pro واختر Tools → Compare Files.
- حدد Older File (المصدر) و Newer File (الهدف).
- اضغط Compare. يولد Acrobat تقرير مقارنة تفاعلي يحتوي على صفحة ملخص وعلامات تغيير داخلية.
هذا يعمل جيدًا للمراجعات اليدوية العرضية. ومع ذلك، أداة المقارنة في Acrobat لها قيود كبيرة عندما تحتاج المقارنة إلى أن تكون جزءًا من خط أنابيب مؤتمت.
عندما يجب أن تتم المقارنة على خادم، داخل خط أنابيب CI/CD، أو كجزء من سير عمل مراجعة مخصص، فإن مكتبة تعتمد على الكود هي الأداة المناسبة.
المتطلبات المسبقة
قبل أن تبدأ:
- .NET 6.0 أو أحدث.
- GroupDocs.Comparison for .NET 26.4 أو أحدث — تثبيت عبر NuGet:
dotnet add package GroupDocs.Comparison
- ملف ترخيص (
GroupDocs.Comparison.lic). بدون الترخيص تعمل المكتبة في وضع التقييم مع علامات مائية وحدود عدد الصفحات. يمكنك طلب ترخيص مؤقت للاختبار. - ملفا PDF للمقارنة — سنطلق عليهما
source.pdfوtarget.pdf. مثال على المحتوى:
source.pdf |
target.pdf |
|---|
الوضع 1: مقارنة Inline (الافتراضي)
متى تستخدمه: تريد ملف PDF واحد مكتمل يمكن لأي شخص فتحه ورؤية ما تغير فورًا — دون الحاجة إلى عارض خاص أو تخطيط صفحتين. سيناريو شائع هو مشاركة مسودة عقد مُعلَّم مع الطرف المقابل.
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:
ما يحدث خلف الكواليس:
- يتم تمييز المحتوى المحذوف من المستند المصدر بلون واحد (أحمر افتراضيًا).
- يتم تمييز المحتوى المضاف من المستند الهدف بلون آخر (أخضر افتراضيًا).
- يتعايش مجموعتا التغييرات على نفس الصفحات، لذا تكون النتيجة مدمجة لكنها قد تبدو مزدحمة عندما تختلف المستندات بشكل كبير. مع تعديلات نصية كبيرة، قد يتداخل المحتوى المحذوف والمضاف فعليًا على الصفحة — على سبيل المثال، الفقرة المستبدلة تُعرض فوق الأصلية، مما ينتج فوضى غير قابلة للقراءة. في مثل هذه الحالات يكون وضع
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:
ما يحدث خلف الكواليس:
- كل صفحة نتيجة هي في الأساس لوحة عرض عريضة مقسمة إلى نصفين.
- النصف الأيسر يُظهر صفحة المصدر المقابلة مع تمييز الحذف.
- النصف الأيمن يُظهر صفحة الهدف مع تمييز الإضافة.
- لا يتداخل المحتوى بين المستندين، لذا حتى الصفحات التي تم تعديلها بشكل كبير تظل قابلة للقراءة.
الوضع 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):
ما يحدث خلف الكواليس:
- يحتوي مستند النتيجة على
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 أو جداول البيانات على مهمة PDF.
| الخاصية | النوع | الوصف |
|---|---|---|
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 }
};
الخصائص الموروثة من CompareOptions الأساسية — InsertedItemStyle، 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 المحمية بكلمة مرور مدعومة بالكامل. مرّر كلمة المرور عبر LoadOptions عند إنشاء كائن 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);
}
احصل على نسخة تجريبية مجانية
يمكنك تنزيل GroupDocs.Comparison for .NET من صفحة الإصدارات الرسمية. للاختبار غير المحدود، اطلب ترخيصًا مؤقتًا — لا حاجة لبطاقة ائتمان.
الأسئلة المتكررة
س: هل أحتاج إلى Adobe Acrobat أو أي برنامج PDF آخر مثبت على الخادم؟
ج: لا. GroupDocs.Comparison هي مكتبة .NET مستقلة تقرأ وتكتب ملفات PDF دون أي تبعيات طرف ثالث.
س: أي وضع عرض يجب أن أستخدمه افتراضيًا؟
ج: ابدأ بـ Inline — ينتج أصغر نتيجة ويمكن مشاركتها بسهولة. انتقل إلى SideBySide عندما تجعل التعديلات الكبيرة العرض الداخلي صعب القراءة، أو استخدم Interleaved عندما يفتح المراجعون النتيجة في قارئ PDF بنمط “Two Page View”.
س: هل يمكنني مقارنة مستندات بصيغ غير PDF؟
ج: نعم — تدعم المكتبة مستندات Word، وجداول Excel، وعروض PowerPoint، وملفات نصية عادية، والعديد غيرها. القائمة الكاملة موجودة في الوثائق.
س: ماذا يحدث إذا لم أضع ترخيصًا؟
ج: تعمل المكتبة في وضع التقييم. ستحتوي المستندات الناتجة على علامة مائية وتُعالج فقط عددًا محدودًا من الصفحات. ترخيص مؤقت يزيل هذه القيود للاختبار.
س: هل يمكنني مقارنة الصور داخل PDF فقط وتجاهل تغييرات النص؟
ج: استخدم CompareImagesPdf = true على PdfCompareOptions لتضمين مقارنة الصور. للتركيز حصريًا على الصور يمكنك دمج ذلك مع خاصية ImagesInheritanceMode؛ راجع مرجع API للمزيد من التفاصيل.
الخلاصة
GroupDocs.Comparison for .NET 26.4 يمنحك تحكمًا دقيقًا قائمًا على الكود في كيفية عرض نتائج مقارنة PDF. يغطي وضع Inline أكثر الحالات شيوعًا — ملف PDF واحد مُعلَّم يمكن مشاركته. يحافظ وضع SideBySide على المحتوى المعدل بشكل كبير نظيفًا وقابلًا للقراءة. ينسق وضع Interleaved بشكل طبيعي مع أي قارئ PDF يدعم عرض صفحتين لتجربة مراجعة صفحة بصفحة بحجم كامل. بالإضافة إلى ذلك، يتيح تصفية نطاق الصفحات استهداف الأقسام المهمة فقط، وتجمع PdfCompareOptions جميع الإعدادات الخاصة بـ PDF في فئة واحدة سهلة الاكتشاف.
اختر الوضع الذي يناسب سير عملك، أو أنشئ جميع الأوضاع الثلاثة ودع كل جمهور يختار العرض المفضل لديه.