البحث في PDF باستخدام C#

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

في هذا المنشور، ستتعلم كيفية البحث عن النص في ملفات PDF برمجياً باستخدام C#. سنقوم بإرشادك خلال الميزات الرئيسية خطوة بخطوة مع أمثلة عملية لرمز C#.

تتناول هذه المقالة المواضيع التالية:

مكتبة C# للبحث في وثائق PDF

Aspose.PDF for .NET تبسط عملية البحث عن النص في ملفات PDF باستخدام C#. تتيح لك العثور على كلمات معينة، ومطابقة الأنماط باستخدام التعبيرات النظامية، وحتى تمييز أو استبدال النص المتطابق - كل ذلك مع بضع سطور من الشيفرة. توفر هذه المكتبة القوية ميزات قوية لمعالجة مستندات PDF. تتيح للمطورين تنفيذ وظائف البحث بسهولة. مع Aspose.PDF، يمكنك بسرعة العثور على كلمات في ملف PDF، مما يجعلها أداة لا تقدر بثمن لمطوري البرمجيات.

قبل بدء البحث في نصوص PDF، تحتاج إلى إعداد بيئة التطوير الخاصة بك. اتبع هذه الخطوات للبدء مع Aspose.PDF for .NET:

1. قم بتثبيت Aspose.PDF for .NET.

قم بتحميله من releases أو قم بتثبيته عبر NuGet.افتح مشروع .NET الخاص بك في Visual Studio وقم بتشغيل الأمر التالي في وحدة تحكم مدير حزم NuGet:

PM> Install-Package Aspose.PDF

هذه الأوامر تضيف مكتبة Aspose.PDF إلى مشروعك حتى تتمكن من الوصول إلى ميزات معالجة PDF القوية الخاصة بها.

2. استيراد المساحات الاسمية المطلوبة

في أعلى ملف C# الخاص بك، أضف هذه التوجيهات:

using Aspose.Pdf;
using Aspose.Pdf.Text;

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

البحث عن نص في PDF باستخدام C#

مع Aspose.PDF for .NET، يمكنك بسهولة البحث عن كلمات أو عبارات معينة في ملف PDF، وتحديد جميع ظهورها، واتخاذ إجراءات مثل تمييزها أو استخراج تفاصيلها.

اتبع هذه الخطوات لتنفيذ بحث نصي أساسي:

  1. قم بتحميل ملف PDF الهدف باستخدام فئة Document.
  2. إنشاء TextFragmentAbsorber لتعريف كلمة البحث.
  3. قم بتشغيل الممتص عبر جميع الصفحات باستخدام طريقة Accept().
  4. استرجع جميع فقرات النص المطابقة.
  5. طباعة عدد المباريات التي تم العثور عليها.
  6. تكرار وعرض كل مباراة مع رقم صفحتها.

الشفرة المثال التالية تنفذ هذه الخطوات.

// حمّل ملف PDF
Document pdfDocument = new Document("sample.pdf");

// إنشاء ممتص نصوص بكلمة البحث
TextFragmentAbsorber textFragmentAbsorber = new TextFragmentAbsorber("invoice");

// قم بتطبيق الممتص على جميع الصفحات
pdfDocument.Pages.Accept(textFragmentAbsorber);

// احصل على أجزاء النص المطابقة
TextFragmentCollection textFragments = textFragmentAbsorber.TextFragments;

// Print how many times the keyword was found
Console.WriteLine($"Found {textFragments.Count} instance(s) of the keyword.");

// تكرار من خلال وطباعة كل نص تم العثور عليه
foreach (TextFragment fragment in textFragments)
{
    Console.WriteLine($"Text: {fragment.Text} | Page: {fragment.Page.Number}");
}

Output Example

Found 3 instance(s) of the keyword.
Text: invoice | Page: 1
Text: invoice | Page: 2
Text: invoice | Page: 3

هذا المثال يوضح بحثًا بسيطًا عن الكلمات الرئيسية يعمل عبر جميع الصفحات في ملف PDF. سترى النص المطابق مع رقم الصفحة الخاصة به.

فهم الفئات الرئيسية المستخدمة في بحث PDF

لفهم ما يحدث بشكل أفضل في الكود، إليك تحليل سريع للفئات والطرق الرئيسية المعنية:

  • Document: يمثل ملف PDF بالكامل. يوفر الوصول إلى الصفحات والمحتوى والهيكل.
  • TextFragmentAbsorber: يجد جميع occurrences of a given string or pattern within the PDF. You can also enable features like case-insensitive or regex-based search.
  • Accept(): يطبق الممتص على كل صفحة. يقوم بمسح الوثيقة وجمع الأجزاء المطابقة.
  • TextFragments: مجموعة من جميع أجزاء النص المطابقة التي أعادها الماصة.
  • TextFragment: كل مباراة فردية مع تفاصيل مثل المحتوى والموقع ورقم الصفحة.

بحث غير حساس لحالة الأحرف وكلمة كاملة باستخدام C#

عند البحث في محتوى PDF، تحتاج إلى التحكم في كيفية العثور على المطابقات لضمان الحصول على نتائج دقيقة. في بعض الأحيان، تريد تجاهل حالة الحروف ("Invoice" مقابل "invoice")، أو تريد مطابقة الكلمات الكاملة فقط - وليس المطابقات الجزئية ضمن كلمات أخرى.

Aspose.PDF for .NET يوفر لك الأدوات لفعل كلا الأمرين.

بحث غير حساس لحالة الأحرف

بشكل افتراضي، تكون عمليات البحث حساسة لحالة الأحرف. لتجاهل حالة الأحرف، استخدم TextSearchOptions مع تمكين IgnoreCase:

// قم بتحميل ملف PDF
Document pdfDocument = new Document("sample.pdf");

// أنشئ ممتص نص باستخدام تعبير منتظم غير حساس لحالة الأحرف
TextFragmentAbsorber textFragmentAbsorber = new TextFragmentAbsorber("(?i)INVOICE");

// قم بتعيين خيارات بحث النص لتمكين استخدام التعبيرات النمطية
TextSearchOptions textSearchOptions = new TextSearchOptions(true);
textFragmentAbsorber.TextSearchOptions = textSearchOptions;

// قم بتطبيق الممتص على جميع الصفحات
pdfDocument.Pages.Accept(textFragmentAbsorber);

// استرجع الأجزاء المتطابقة من النص
TextFragmentCollection textFragments = textFragmentAbsorber.TextFragments;

// Output the number of matches found
Console.WriteLine($"Found {textFragments.Count} instance(s) of the keyword.");

// قم بالتكرار من خلال وعرض كل قطعة نصية تم العثور عليها
foreach (TextFragment fragment in textFragments)
{
    Console.WriteLine($"Text: {fragment.Text} | Page: {fragment.Page.Number}");
}

سيجد هذا كلا من “Invoice” و “invoice” و “INVOICE” وغيرها من المشتقات.

مطابقة الكلمات الكاملة فقط

يمكنك أيضًا منع التطابقات الجزئية. على سبيل المثال، يجب ألا يتطابق البحث عن car مع care أو scar.

// تحميل ملف PDF
Document pdfDocument = new Document("sample.pdf");

// إنشاء امتصاص نص باستخدام نمط تعبير منتظم لمطابقة الكلمة بأكملها
TextFragmentAbsorber textFragmentAbsorber = new TextFragmentAbsorber(@"\bcar\b");

// قم بضبط خيارات البحث النصي لتمكين استخدام التعبيرات العادية
TextSearchOptions textSearchOptions = new TextSearchOptions(true);
textFragmentAbsorber.TextSearchOptions = textSearchOptions;

// قم بتطبيق الممتص على جميع الصفحات
pdfDocument.Pages.Accept(textFragmentAbsorber);

// استرجع أجزاء النص المطابقة
TextFragmentCollection textFragments = textFragmentAbsorber.TextFragments;

// Output the number of matches found
Console.WriteLine($"Found {textFragments.Count} instance(s) of the keyword.");

// تجول خلال وعرض كل جزء نصي تم العثور عليه
foreach (TextFragment fragment in textFragments)
{
    Console.WriteLine($"Text: {fragment.Text} | Page: {fragment.Page.Number}");
}

هذا يضمن مطابقة فقط الحالات المستقلة من كلمة “سيارة”.

البحث باستخدام التعبيرات العادية في PDF

في حالات معينة، تحتاج إلى العثور على أكثر من كلمة محددة—تريد مطابقة أنماط مثل التواريخ، عناوين البريد الإلكتروني، أو أرقام المرجع. هنا تأتي تعبيرات الانتظام (regex).

Aspose.PDF for .NET يتيح لك استخدام regex للبحث المتقدم عن النص عبر أي جزء من مستند PDF الخاص بك.

مثال: العثور على جميع التواريخ في ملف PDF

لنقل إنك تريد العثور على جميع التواريخ بتنسيق dd/mm/yyyy:

// قم بتحميل ملف PDF وابحث عن النص
Document pdfDocument = new Document("sample.pdf");

// قم بتمكين التعبيرات العادية في خيارات البحث
TextSearchOptions searchOptions = new TextSearchOptions(true)
{
    IsRegularExpressionUsed = true
};

// إنشاء ممتص بنمط تاريخ
TextFragmentAbsorber absorber = new TextFragmentAbsorber(@"\d{2}/\d{2}/\d{4}", searchOptions);

// تطبيق الممتص على الصفحات
pdfDocument.Pages.Accept(absorber);

// كرر واطبع الأنماط الموجودة
foreach (TextFragment fragment in absorber.TextFragments)
{
    Console.WriteLine($"Found date: {fragment.Text} on Page {fragment.Page.Number}");
}

أنماط أخرى مفيدة:

  • Emails: \b[A-Za-z0-9.%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b
  • Phone Numbers: \d{3}[-.\s]??\d{3}[-.\s]??\d{4}
  • أرقام الفواتير: INV-\d+

تساعدك التعبيرات النمطية (Regex) على توسيع قدرات البحث الخاصة بك بعيداً عن النص الثابت، مما يساعدك على استخراج البيانات المنظمة من الوثائق غير المنظمة.

البحث واستخراج النص مع تفاصيل الموقع

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

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

مثال: احصل على موضع كل تطابق

// حمّل PDF وابحث عن نص
Document pdfDocument = new Document("sample.pdf");
TextFragmentAbsorber absorber = new TextFragmentAbsorber("invoice");
pdfDocument.Pages.Accept(absorber);

// احصل على الأجزاء المتطابقة
TextFragmentCollection fragments = absorber.TextFragments;

// طباعة الموقع والنص لكل مباراة
foreach (TextFragment fragment in fragments)
{
    Console.WriteLine($"Text: {fragment.Text}");
    Console.WriteLine($"Page: {fragment.Page.Number}");
    Console.WriteLine($"Position - X: {fragment.Position.XIndent}, Y: {fragment.Position.YIndent}");
    Console.WriteLine($"Font: {fragment.TextState.Font.FontName}, Size: {fragment.TextState.FontSize}");
    Console.WriteLine("------------");
}

Sample Output

Text: invoice
Page: 1
Position - X: 33.482, Y: 708.246
Font: Helvetica, Size: 12
------------
Text: invoice
Page: 2
Position - X: 33.482, Y: 708.246
Font: Helvetica, Size: 12
------------
Text: invoice
Page: 3
Position - X: 33.482, Y: 708.246
Font: Helvetica, Size: 12
------------

أنت الآن تعرف بالضبط أين يظهر كلمة “invoice”، مع كيفية تنسيقها. هذا المستوى من التفاصيل يفتح الباب لمعالجة متقدمة، مثل التعليقات التوضيحية، والنوافذ المنبثقة، أو التمييز الديناميكي.

تمييز أو استبدال النصوص الموجودة

بمجرد أن تجد نصًا محددًا في ملف PDF، يمكنك اتخاذ خطوة أخرى من خلال تمييزه أو حتى استبداله بمحتوى جديد. يتيح لك Aspose.PDF for .NET تنسيق أو تعديل النص المطابق بسهولة باستخدام كائن TextFragment.

بحث وإبراز النص في PDF

يمكنك تسليط الضوء على النص بصريًا من خلال تغيير لون خلفيته ولون خطه.

TextFragmentAbsorber absorber = new TextFragmentAbsorber("invoice");
pdfDocument.Pages.Accept(absorber);

foreach (TextFragment fragment in absorber.TextFragments)
{
    // Highlight by changing text appearance
    fragment.TextState.BackgroundColor = Color.Yellow;
    fragment.TextState.ForegroundColor = Color.Red;
    fragment.TextState.FontStyle = FontStyles.Bold;
}

هذا مفيد للمراجعة، أو الإشارة إلى النصوص، أو إنشاء تقارير مشروحة.

ابحث واستبدل النص

تحتاج إلى حذف أو تحديث النص في الوثيقة؟ فقط استبدله مباشرة:

foreach (TextFragment fragment in absorber.TextFragments)
{
    fragment.Text = "REDACTED";
}

يمكنك حتى تطبيق تنسيق جديد أثناء الاستبدال:

fragment.TextState.FontSize = 12;
fragment.TextState.Font = FontRepository.FindFont("Arial");
fragment.TextState.ForegroundColor = Color.Black;

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

البحث عبر جميع الصفحات أو صفحات محددة

بشكل افتراضي، يقوم Aspose.PDF بالبحث عبر جميع الصفحات في ملف PDF. ولكن في بعض الأحيان، قد ترغب في تقييد البحث إلى صفحة معينة أو مجموعة من الصفحات - خاصة عند العمل مع ملفات كبيرة أو عندما يكون المحتوى متوقعًا.

Aspose.PDF يجعل من السهل القيام بكليهما.

بحث في جميع الصفحات (افتراضي)

إذا لم تحدد صفحة، فإن الممتص يبحث تلقائيًا في كل صفحة.

TextFragmentAbsorber absorber = new TextFragmentAbsorber("invoice");
pdfDocument.Pages.Accept(absorber); // Searches all pages

بحث في صفحة محددة

يمكنك أيضًا البحث عن صفحة واحدة عن طريق استهدافها مباشرة:

TextFragmentAbsorber absorber = new TextFragmentAbsorber("invoice");

// Search only on page 2
pdfDocument.Pages[2].Accept(absorber);

البحث في مجموعة من الصفحات

للبحث في نطاق مخصص (مثل، الصفحات من 2 إلى 4)، فقط قم بالتكرار عبر النطاق:

TextFragmentAbsorber absorber = new TextFragmentAbsorber("invoice");

// Loop through selected pages
for (int i = 2; i <= 4; i++)
{
    pdfDocument.Pages[i].Accept(absorber);
}

تتيح لك هذه الطريقة التحكم الكامل في الأداء والدقة، مما يكون مفيدًا بشكل خاص للوثائق الماسحة أو المقطعة.

حالة استخدام متقدمة: البحث وحذف المعلومات الحساسة

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

يمكنك البحث عن المصطلحات ثم تطبيق طبقة سوداء باستخدام RedactionAnnotation.

// تحميل PDF والبحث عن النص
Document pdfDocument = new Document("sample.pdf");

// ابحث عن الاسم "جون دو"
TextFragmentAbsorber absorber = new TextFragmentAbsorber("John Doe");
pdfDocument.Pages.Accept(absorber);

// مرر عبر الأجزاء الموجودة وقم بتعتيمها
foreach (TextFragment fragment in absorber.TextFragments)
{
    // احصل على الموقع والأبعاد
    Aspose.Pdf.Rectangle rect = new Aspose.Pdf.Rectangle(
        fragment.Position.XIndent,
        fragment.Position.YIndent,
        fragment.Position.XIndent + fragment.Rectangle.Width,
        fragment.Position.YIndent + fragment.Rectangle.Height
    );

    // قم بإنشاء توضيح للتعتيم
    RedactionAnnotation redaction = new RedactionAnnotation(fragment.Page, rect)
    {
        FillColor = Color.Black,
        Color = Color.Black
    };

    // Add and apply redaction
    fragment.Page.Annotations.Add(redaction);
    redaction.Redact();
}
// احفظ الوثيقة المعدلة
pdfDocument.Save("SearchAndRedact.pdf");

ما الذي يحدث

  • النص المستهدف (“جون دو”) تم العثور عليه وتغطيته بعيون سوداء.
  • هذا ليس مجرد مرئي - إنه يزيل المحتوى من طبقة PDF، مما يجعله غير قابل للاسترداد من الملف.

احصل على ترخيص مجاني

الآن بعد أن تعلمت كيفية البحث واستخراج وتظليل وحجب النص في ملفات PDF باستخدام Aspose.PDF for .NET، حان الوقت لوضع تلك المعرفة موضع التنفيذ.

جرّبها بنفسك: قم بتنزيل ترخيص مؤقت مجاني وابدأ في بناء أدوات PDF الذكية الخاصة بك.

ابحث في PDF: موارد مجانية

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

  • دليل المطورين تعلم كيفية إنشاء وتعديل وتحويل وتأمين ملفات PDF برمجياً. أسبوز.بي دي إف لـ .نت التوثيق

  • أدوات مجانية عبر الإنترنت قم بتحويل ودمج وتقسيم وتحرير ملفات PDF مباشرة في متصفحك. Aspose Free PDF Tools

  • مرجع API تعرّف على المزيد حول الفئات والخصائص والطرق المتاحة في Aspose.PDF for .NET لتسريع تطويرك. أسبوس.بي دي إف API Reference

  • منتدى الدعم اطرح الأسئلة، أبلغ عن المشكلات، واحصل على إجابات مباشرة من خبراء Aspose. Aspose Support Forum

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

استنتاج

البحث عن النص في ملفات PDF هو ميزة حيوية للعديد من التطبيقات المعتمدة على الوثائق—سواء كنت تستخرج البيانات، أو تقوم بتدقيق المحتوى، أو تُعد الملفات للتعتيم. مع Aspose.PDF for .NET، يمكنك بسهولة تنفيذ عمليات البحث عن الكلمات الرئيسية، واستخدام التعابير العادية، وإبراز النتائج، وحتى تمييز المعلومات الحساسة بدقة وتحكم. توفر Aspose.PDF واجهة برمجة تطبيقات صديقة للمطورين تُبسط العمليات المعقدة على PDF—مما يوفر لك الوقت ويسمح بأتمتة قوية.

إذا كانت لديك أي أسئلة أو تحتاج إلى مزيد من المساعدة، فلا تتردد في التواصل معنا في منتدى الدعم المجاني.

انظر أيضًا