استخراج متن

استخراج متن

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) استفاده کنید.
  • برای تعیین اینکه آیا یک قلم در PDF جاسازی شده است، TextState.Font.IsEmbedded را بررسی کنید.
  • برای اسناد بزرگ، صفحات را یکی‌یکی پردازش کنید تا مصرف حافظه مدیریت شود.

مسائل رایج

IssueCauseFix
متن استخراج‌شده خراب استPDF از رمزگذاری غیر استاندارد یا نگاشت فونت CID استفاده می‌کندام embedding فونت را بررسی کنید؛ برخی PDFهای اسکن‌شده به OCR نیاز دارند
هیچ قطعه متنی یافت نشدمحتوای صفحه یک تصویر است، نه متناز ابزار OCR برای تبدیل صفحات تصویری به متن ابتدا استفاده کنید
Regex هیچ مطابقتی برنمی‌گرداندالگو فضای خالی وارد شده توسط چیدمان متن PDF را در نظر نمی‌گیردفضای خالی را نرمال‌سازی کنید یا از الگوی سست‌تری استفاده کنید
TextState.Font مقدار null داردمنبع فونت در PDF موجود نیستدر هنگام بررسی ویژگی‌های فونت، بررسی‌های null را انجام دهید

سوالات متداول

آیا می‌توانم متن را از یک ناحیه خاص از صفحه استخراج کنم؟

بله. TextFragmentAbsorber.TextSearchOptions.Rectangle را تنظیم کنید تا جستجو را به ناحیه خاصی از صفحه محدود کنید.

آیا استخراج متن ترتیب خواندن را حفظ می‌کند؟

کتابخانه متن را به ترتیب جریان محتوا برمی‌گرداند. برای طرح‌بندی‌های چند ستونی، ممکن است نیاز داشته باشید قطعات را بر اساس موقعیت مرتب کنید.

آیا می‌توانم متن را از تمام صفحات به‌صورت همزمان استخراج کنم؟

بله. برای جستجوی هر صفحه در سند، doc.Pages.Accept(absorber) را فراخوانی کنید.


خلاصه مرجع API

Class / Methodتوضیح
TextAbsorberتمام متن را به‌عنوان یک رشتهٔ واحد استخراج می‌کند
TextFragmentAbsorberقطعات متن ساختار یافته را همراه با موقعیت و داده‌های قلم استخراج می‌کند
TextFragmentیک بخش متن با موقعیت، وضعیت متن و بخش‌ها
TextFragment.Textرشتهٔ متن استخراج‌شده
TextFragment.Positionمختصات روی صفحه
TextFragment.TextStateاطلاعات قلم، اندازه و رنگ
TextFragment.Segmentsزیر‑بخش‌ها درون قطعه
TextParagraphسازنده برای بلوک‌های متن چندخطی
TextStateنام قلم، اندازه، رنگ و ویژگی‌های سبک
FontRepositoryجستجو و بارگذاری ایستای قلم
FontRepository.FindFontیافتن قلم بر اساس نام

همچنین ببینید

 فارسی