استخراج النص
استخراج النص
يوفر 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 | العثور على خط بالاسم |