استخراج متن
استخراج متن
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را بررسی کنید. - برای اسناد بزرگ، صفحات را یکییکی پردازش کنید تا مصرف حافظه مدیریت شود.
مسائل رایج
| Issue | Cause | Fix |
|---|---|---|
| متن استخراجشده خراب است | 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 | یافتن قلم بر اساس نام |