مقارنة مستندات PDF

يرجى ملاحظة أن جميع أدوات المقارنة متاحة في مكتبة Aspose.PDF.Drawing.

طرق مقارنة مستندات PDF

عند العمل مع مستندات PDF، هناك أوقات تحتاج فيها إلى مقارنة محتوى مستندين لتحديد الاختلافات. توفر مكتبة Aspose.PDF for .NET مجموعة أدوات قوية لهذا الغرض. في هذه المقالة، سنستكشف كيفية مقارنة مستندات PDF باستخدام بعض مقتطفات التعليمات البرمجية البسيطة.

تتيح وظيفة المقارنة في Aspose.PDF لك مقارنة مستندين PDF صفحة بصفحة. يمكنك اختيار مقارنة صفحات محددة أو مستندات كاملة. تسلط وثيقة المقارنة الناتجة الضوء على الاختلافات، مما يسهل تحديد التغييرات بين الملفين.

إليك قائمة بطرق ممكنة لمقارنة مستندات PDF باستخدام مكتبة Aspose.PDF for .NET:

  1. مقارنة صفحات محددة - مقارنة الصفحات الأولى من مستندين PDF.

  2. مقارنة مستندات كاملة - مقارنة المحتوى الكامل لمستندين PDF.

  3. مقارنة مستندات PDF بشكل رسومي:

  • مقارنة PDF باستخدام طريقة GetDifference - صور فردية حيث يتم وضع علامات على التغييرات.

  • مقارنة PDF باستخدام طريقة CompareDocumentsToPdf - مستند PDF مع صور حيث يتم وضع علامات على التغييرات.

مقارنة صفحات محددة

توضح مقتطفات التعليمات البرمجية الأولى كيفية مقارنة الصفحات الأولى من مستندين PDF.

  1. تهيئة المستند. تبدأ التعليمات البرمجية بتهيئة مستندين PDF باستخدام مسارات الملفات الخاصة بهما (documentPath1 و documentPath2). يتم تحديد المسارات كسلاسل فارغة في الوقت الحالي، ولكن في الممارسة العملية، ستستبدل هذه بالمسارات الفعلية للملفات.

  2. عملية المقارنة.

  • اختيار الصفحة - تقتصر المقارنة على الصفحة الأولى من كل مستند (‘Pages[1]’).
  • خيارات المقارنة:

‘AdditionalChangeMarks = true’ - تضمن هذه الخيار عرض علامات التغيير الإضافية. تبرز هذه العلامات الاختلافات التي قد تكون موجودة في صفحات أخرى، حتى لو لم تكن على الصفحة الحالية التي تتم مقارنتها.

‘ComparisonMode = ComparisonMode.IgnoreSpaces’ - تخبر هذه الوضعية المقارن بتجاهل المسافات في النص، والتركيز فقط على التغييرات داخل الكلمات.

  1. يتم حفظ وثيقة المقارنة الناتجة، التي تبرز الاختلافات بين الصفحتين، إلى مسار الملف المحدد في ‘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
            });
        }
    }
}

مقارنة مستندات كاملة

توسع مقتطف التعليمات البرمجية الثاني النطاق لمقارنة المحتوى الكامل لمستندين 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
                });
        }
    }
}

تكون نتائج المقارنة التي تم إنشاؤها بواسطة هذه المقتطفات مستندات PDF يمكنك فتحها في عارض مثل Adobe Acrobat. إذا كنت تستخدم عرض الصفحتين في Adobe Acrobat، سترى التغييرات جنبًا إلى جنب:

  • الحذف - يتم ملاحظتها على الصفحة اليسرى.
  • الإدراج - يتم ملاحظتها على الصفحة اليمنى.

من خلال تعيين ‘AdditionalChangeMarks’ إلى ’true’، يمكنك أيضًا رؤية علامات للتغييرات التي قد تحدث في صفحات أخرى، حتى لو لم تكن تلك التغييرات على الصفحة الحالية المعروضة.

Aspose.PDF for .NET توفر أدوات قوية لمقارنة مستندات PDF، سواء كنت بحاجة إلى مقارنة صفحات محددة أو مستندات كاملة. من خلال استخدام خيارات مثل ‘AdditionalChangeMarks’ وإعدادات ‘ComparisonMode’ المختلفة، يمكنك تخصيص عملية المقارنة وفقًا لاحتياجاتك الخاصة. توفر الوثيقة الناتجة عرضًا واضحًا، جنبًا إلى جنب، للتغييرات، مما يسهل تتبع المراجعات وضمان دقة المستند.

مقارنة مستندات PDF باستخدام GraphicalPdfComparer

عند التعاون في المستندات، خاصة في البيئات المهنية، غالبًا ما ينتهي بك الأمر مع إصدارات متعددة من نفس الملف.

يمكنك استخدام فئة GraphicalPdfComparer لمقارنة مستندات PDF والصفحات. الفئة مناسبة لمقارنة التغييرات في محتوى الصفحة الرسومي.

مع Aspose.PDF for .NET، من الممكن مقارنة المستندات والصفحات وإخراج نتيجة المقارنة إلى مستند PDF أو ملف صورة.

يمكنك تعيين الخصائص التالية للفئة:

  • الدقة - الدقة بوحدات DPI للصور الناتجة، وكذلك للصور التي تم إنشاؤها أثناء المقارنة.
  • اللون - لون علامات التغيير.
  • العتبة - عتبة التغيير بالنسبة المئوية. القيمة الافتراضية هي صفر. تعيين قيمة غير صفرية يسمح لك بتجاهل التغييرات الرسومية التي تعتبر غير مهمة بالنسبة لك.

تحتوي الفئة على طريقة تتيح لك الحصول على اختلافات صورة الصفحة في شكل مناسب لمزيد من المعالجة: ImagesDifference GetDifference(Page page1, Page page2).

ترجع هذه الطريقة كائنًا من فئة ImagesDifference ، والذي يحتوي على صورة الصفحة الأولى التي تتم مقارنتها ومصفوفة من الاختلافات. تحتوي مصفوفة الاختلافات والصورة الأصلية على تنسيق بكسل RGB24bpp.

تتيح لك ImagesDifference إنشاء صورة مختلفة والحصول على صورة الصفحة الثانية التي تتم مقارنتها عن طريق إضافة مصفوفة الاختلافات إلى الصورة الأصلية. للقيام بذلك، استخدم طرق ImagesDifference.GetDestinationImage و ImagesDifference.DifferenceToImage.

مقارنة PDF باستخدام طريقة GetDifference

تعرف التعليمات البرمجية المقدمة طريقة GetDifference التي تقارن مستندين PDF وتولد تمثيلات بصرية للاختلافات بينهما.

تقارن هذه الطريقة الصفحات الأولى من ملفي PDF وتولد صورتين PNG:

  • صورة واحدة (diffPngFilePath) تبرز الاختلافات بين الصفحات باللون الأحمر.
  • الصورة الأخرى (destPngFilePath) هي تمثيل بصري للصفحة الثانية من PDF.

يمكن أن تكون هذه العملية مفيدة للمقارنة المرئية للتغييرات أو الاختلافات بين إصدارين من مستند.

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

مقارنة PDF باستخدام طريقة CompareDocumentsToPdf

يستخدم مقتطف التعليمات البرمجية المقدم طريقة CompareDocumentsToPdf ، التي تقارن مستندين وتولد تقرير PDF بنتائج المقارنة.

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

طريقة عالمية لمقارنة المستندات

يمكنك استخدام فئة TextPdfComparer لمقارنة المستندات والصفحات الفردية. تتيح الفئة مقارنة المستندات صفحة بصفحة أو كتيار محتوى مستمر واحد (بدون فصل الصفحات). ترجع طرق المقارنة مصفوفة من الاختلافات يمكن تمريرها إلى أي فئة تنفذ الواجهات IStringOutputGenerator أو IFileOutputGenerator لإنتاج إخراج مقارنة منسق. يتم دعم الإخراج في: HTML، Markdown، PDF، و JSON. يمكنك أيضًا استخدام فئة ComparisonStatistics للحصول على إحصائيات حول عمليات المقارنة المنفذة.

الطريقة الوصف المعلمات قيمة الإرجاع
CompareDocumentsPageByPage(Document document1, Document document2, ComparisonOptions options) يقارن مستندين PDF صفحة بصفحة. * document1 – المستند الأول.
* document2 – المستند الثاني.
* options – خيارات المقارنة (انظر أدناه).
List<List<DiffOperation>> – قائمة بالاختلافات لكل صفحة.
CompareDocumentsPageByPage(Document document1, Document document2, ComparisonOptions options, string resultPdfDocumentPath) نفس ما سبق، ولكن أيضًا يحفظ نتائج المقارنة في ملف PDF. نفس المعلمات كما في السابق + resultPdfDocumentPath – مسار الملف الناتج. List<List<DiffOperation>> – قائمة بالاختلافات.
CompareFlatDocuments(Document document1, Document document2, ComparisonOptions options) يقارن مستندين PDF كنص مستمر واحد (دمج جميع الصفحات). نفس المعلمات كما في CompareDocumentsPageByPage. List<DiffOperation> – قائمة بجميع الاختلافات.
CompareFlatDocuments(Document document1, Document document2, ComparisonOptions options, string resultPdfDocumentPath) مقارنة مستندات مسطحة مع حفظ النتيجة في ملف PDF. نفس المعلمات كما في CompareFlatDocuments + resultPdfDocumentPath. List<DiffOperation> – قائمة بالاختلافات.
ComparePages(Page page1, Page page2, ComparisonOptions options) يقارن صفحتين فرديتين. * page1 – الصفحة الأولى.
* page2 – الصفحة الثانية.
* options – خيارات المقارنة.
List<DiffOperation> – قائمة باختلافات الصفحة.
CreateComparisonStatistics(List<DiffOperation> diffs) يولد إحصائيات المقارنة لقائمة من العمليات (صفحة واحدة). diffs – قائمة من DiffOperation. TextItemComparisonStatistics (انظر أدناه).
CreateComparisonStatistics(List<List<DiffOperation>> diffs) يولد إحصائيات المقارنة لقائمة من العمليات عبر الصفحات (مستوى المستند). diffs – قائمة من قوائم DiffOperation. DocumentComparisonStatistics (انظر أدناه).
AssemblySourcePageText(List<DiffOperation> diffs) يعيد بناء النص الأصلي (قبل التغيير) للصفحة. diffs – قائمة من العمليات. string – النص الأصلي.
AssemblyDestinationPageText(List<DiffOperation> diffs) يعيد بناء النص المعدل (بعد التغيير) للصفحة. diffs – قائمة من العمليات. string – النص المعدل.

الفئات العامة ذات الصلة

ComparisonOptions

المعلمات التي تؤثر على عملية المقارنة:

الخاصية النوع الوصف
ExtractionArea Rectangle المنطقة التي سيتم استخراج النص منها. غير متوافقة مع ExcludeTables، ExcludeAreas1/2.
ExcludeTables bool استبعاد الجداول من المقارنة. غير متوافقة مع ExtractionArea.
ExcludeAreas1 Rectangle[] مصفوفة من المناطق التي يجب استبعادها للمستند الأول.
ExcludeAreas2 Rectangle[] مصفوفة من المناطق التي يجب استبعادها للمستند الثاني.
EditOperationsOrder EditOperationsOrder (enum) ترتيب تطبيق عمليات الإدراج/الحذف (القيمة الافتراضية هي DeleteFirst).

DiffOperation

تمثل عملية اختلاف واحدة. تحتوي على:

الخاصية النوع الوصف
Operation Operation (enum) نوع العملية (Equal، Delete، Insert).
Text string النص المرتبط بالعملية.

ComparisonStatistics

الفئة الوصف
TextItemComparisonStatistics إحصائيات لنص فردي (صفحة). تشمل إجمالي الأحرف، عدد الإدراجات، الحذوفات، والعمليات المقابلة.
DocumentComparisonStatistics (ترث من TextItemComparisonStatistics) إحصائيات موسعة للمستند بالكامل، بما في ذلك قائمة بـ PagesStatistics (إحصائيات لكل صفحة).

مثال على الاستخدام