استخراج النص

استخراج النص

يوفر Aspose.PDF FOSS for .NET عدة آليات لاستخراج النص من صفحات PDF. TextFragmentAbsorber هو الأداة الأساسية — يقوم بمسح محتوى الصفحة ويعيد كائنات TextFragment المهيكلة مع معلومات الموقع والخط والنمط.


استخراج النص الأساسي

TextAbsorber يستخرج كل النص من صفحة أو مستند كسلسلة واحدة.

using var doc = Document.Open(pdfBytes);

var absorber = new TextAbsorber();
doc.Pages[1].Accept(absorber);

string pageText = absorber.Text;

استخراج مقاطع النص

TextFragmentAbsorber يوفر نتائج مُنظمة. كل TextFragment يتضمن النص المستخرج، موقعه على الصفحة، وتفاصيل الخط.

using var doc = Document.Open(pdfBytes);

var absorber = new TextFragmentAbsorber();
doc.Pages[1].Accept(absorber);

foreach (var fragment in absorber.TextFragments)
{
    Console.WriteLine($"Text: {fragment.Text}");
    Console.WriteLine($"Position: ({fragment.Position.XIndent}, {fragment.Position.YIndent})");
    Console.WriteLine($"Font: {fragment.TextState.Font.FontName}");
}

البحث باستخدام التعبيرات النمطية

مرّر نمط regex إلى TextFragmentAbsorber للعثور على نص محدد.

var absorber = new TextFragmentAbsorber(@"\d{3}-\d{2}-\d{4}");
doc.Pages.Accept(absorber);  // Search all pages

foreach (var fragment in absorber.TextFragments)
{
    Console.WriteLine($"Found: {fragment.Text}");
}

مقاطع النص

قد يحتوي كل TextFragment على كائنات TextSegment متعددة عندما يمتد النص عبر تشغيلات خطوط مختلفة.

foreach (var fragment in absorber.TextFragments)
{
    foreach (var segment in fragment.Segments)
    {
        Console.WriteLine($"Segment: {segment.Text}, Font: {segment.TextState.Font.FontName}");
    }
}

إدارة الخط

FontRepository يوفر طرقًا للعثور على الخطوط وتحميلها.

var font = FontRepository.FindFont("Helvetica");

إنشاء فقرات نصية

TextParagraph يتيح إنشاء كتل نصية متعددة الأسطر لإدراجها في صفحة.

var paragraph = new TextParagraph();
paragraph.AppendLine(new TextFragment("First line"));
paragraph.AppendLine(new TextFragment("Second line"));

نصائح وأفضل الممارسات

  • استخدم TextFragmentAbsorber عندما تحتاج إلى بيانات الموقع والخط؛ استخدم TextAbsorber لاستخراج النص العادي.
  • قَبِل الماصِ على صفحة واحدة للحصول على نتائج أسرع، أو على doc.Pages للبحث في المستند بأكمله.
  • البحث بالتعبير النمطي حساس لحالة الأحرف بشكل افتراضي — استخدم بادئة (?i) للمطابقة غير الحساسة لحالة الأحرف.
  • تحقق من TextState.Font.IsEmbedded لتحديد ما إذا كان الخط مضمّنًا في PDF.
  • بالنسبة للمستندات الكبيرة، عالج الصفحات واحدةً تلو الأخرى لإدارة استهلاك الذاكرة.

مشكلات شائعة

المشكلةالسببالحل
النص المستخرج مشوشPDF يستخدم ترميز غير قياسي أو تعيين خط CIDتحقق من تضمين الخط؛ بعض ملفات PDF الممسوحة ضوئياً تتطلب OCR
لم يتم العثور على مقاطع نصيةمحتوى الصفحة صورة، وليس نصًااستخدم أداة OCR لتحويل صفحات الصورة إلى نص أولاً
التعبير النمطي لا يُرجع أي تطابقالنمط لا يأخذ في الاعتبار الفراغات التي يضيفها تخطيط نص PDFقم بتطبيع الفراغات أو استخدم نمطًا أرخى
TextState.Font فارغمورد الخط مفقود من PDFقم بمعالجة فحوصات القيم الفارغة عند فحص خصائص الخط

الأسئلة الشائعة

هل يمكنني استخراج النص من منطقة محددة في الصفحة؟

نعم. اضبط TextFragmentAbsorber.TextSearchOptions.Rectangle لتقييد البحث إلى منطقة محددة من الصفحة.

هل يحافظ استخراج النص على ترتيب القراءة؟

تُعيد المكتبة النص بترتيب تدفق المحتوى. بالنسبة لتصاميم متعددة الأعمدة، قد تحتاج إلى فرز القطع حسب الموقع.

هل يمكنني استخراج النص من جميع الصفحات مرة واحدة؟

نعم. استدعِ doc.Pages.Accept(absorber) للبحث في كل صفحة في المستند.


API ملخص المرجع

الفئة / الطريقةالوصف
TextAbsorberيستخرج كل النص كسلسلة واحدة
TextFragmentAbsorberيستخرج شظايا نصية مُهيكلة مع بيانات الموقع والخط
TextFragmentتشغيل نصي مع الموقع، حالة النص، والقطاعات
TextFragment.Textسلسلة النص المستخرجة
TextFragment.Positionالإحداثيات على الصفحة
TextFragment.TextStateمعلومات الخط والحجم واللون
TextFragment.Segmentsتشغيلات فرعية داخل الشظية
TextParagraphمنشئ لكتل النص متعددة الأسطر
TextStateاسم الخط، الحجم، اللون، وخصائص النمط
FontRepositoryبحث وتحميل الخطوط بشكل ثابت
FontRepository.FindFontالعثور على خط بالاسم

انظر أيضًا

 العربية