متن PDF csharp را استخراج کنید

فرمت فایل PDF محبوب است زیرا محتویات فایل را نمی توان به راحتی تغییر داد، در مقایسه با سایر فرمت های فایل پردازش کلمه. با این حال، در سی شارپ می توانید متنی را از اسناد PDF با Aspose.PDF برای NET API استخراج کنید. در این مقاله، اجازه دهید چند مورد از بسیاری از امکانات جستجو و استخراج متن از فایل‌های PDF با استفاده از سی شارپ را بررسی کنیم. در زیر لیستی از ویژگی هایی است که در این وبلاگ در مورد آنها صحبت خواهیم کرد:

استخراج متن از یک سند PDF کامل با استفاده از C#

خواندن محتویات متنی از یک سند PDF یکی از ویژگی های پر استفاده است. با استفاده از سی شارپ، می توانید تمام متن را از تمام صفحات سند با دنبال کردن مراحل زیر استخراج کنید:

  1. سند PDF را بارگیری کنید
  2. شیء TextAbsorber ایجاد کنید
  3. جذب کننده را برای تمام صفحات بپذیرید
  4. متن استخراج شده را در یک فایل بنویسید و آن را ذخیره کنید

قطعه کد زیر این مراحل را دنبال می کند و نحوه استخراج متن از یک سند PDF کامل با استفاده از C# را نشان می دهد:

// سند PDF را باز کنید
Document pdfDocument = new Document(dataDir + "ExtractTextAll.pdf");
// برای استخراج متن، شی TextAbsorber ایجاد کنید
TextAbsorber textAbsorber = new TextAbsorber();
// جذب کننده را برای تمام صفحات بپذیرید
pdfDocument.Pages.Accept(textAbsorber);
// متن استخراج شده را دریافت کنید
string extractedText = textAbsorber.Text;
// یک رایتر بسازید و فایل را باز کنید
TextWriter tw = new StreamWriter(dataDir + "extracted-text.txt");
// یک خط متن در فایل بنویسید
tw.WriteLine(extractedText);
// جریان را ببندید
tw.Close();

جستجو و استخراج متن از یک صفحه خاص در PDF در سی شارپ

پس از بررسی استخراج متن در سطح سند، اجازه دهید متن را از صفحه خاصی از یک سند PDF استخراج کنیم. برای دستیابی به نیازهای خود کافی است مراحل زیر را دنبال کنید:

  1. سند PDF را بارگیری کنید
  2. شیء TextAbsorber ایجاد کنید
  3. جذب کننده را برای یک صفحه خاص بپذیرید
  4. متن استخراج شده را در یک فایل بنویسید و آن را ذخیره کنید

قطعه کد زیر این مراحل را برای خواندن متن از هر صفحه از یک فایل PDF با استفاده از C# دنبال می کند:

// سند PDF را باز کنید
Document pdfDocument = new Document(dataDir + "ExtractTextAll.pdf");
// دسترسی به صفحه مورد نیاز در سند PDF
Page page = pdfDocument.Pages[1];
// برای استخراج متن، شی TextAbsorber ایجاد کنید
TextAbsorber textAbsorber = new TextAbsorber();
// جذب کننده را برای صفحه مشخص شده بپذیرید
page.Accept(textAbsorber);
// متن استخراج شده را دریافت کنید
string extractedText = textAbsorber.Text;
// یک رایتر بسازید و فایل را باز کنید
TextWriter tw = new StreamWriter(dataDir + "extracted-text.txt");
// یک خط متن در فایل بنویسید
tw.WriteLine(extractedText);
// جریان را ببندید
tw.Close();

جستجو و استخراج متن از منطقه خاص صفحه PDF در سی شارپ

اجازه دهید این استخراج متن را یک قدم دیگر جلوتر ببریم. به دنبال یافتن متنی از ناحیه خاصی از صفحه باشید. درک این نکته مهم است که واحد اندازه گیری اساسی در Aspose.PDF برای دات نت نقطه است، جایی که 72 نقطه برابر با 1 اینچ است. علاوه بر این، گوشه پایین سمت چپ به عنوان مبدا (0,0) صفحه در نظر گرفته می شود. مراحل زیر برای خواندن متن از ناحیه یا بخش خاصی از صفحه در سند PDF آمده است:

  1. سند PDF منبع را بارگیری کنید
  2. شیء TextAbsorber ایجاد کنید
  3. TextSearchOptions را تنظیم کنید و مختصات مستطیلی را مشخص کنید
  4. جذب کننده را برای صفحه خاص بپذیرید
  5. متن استخراج شده را در یک فایل بنویسید

قطعه کد زیر این مراحل را برای استخراج متن از منطقه خاص با استفاده از C# نشان می دهد:

// سند را باز کنید
Document pdfDocument = new Document(dataDir + "ExtractTextAll.pdf");
// برای استخراج متن، شی TextAbsorber ایجاد کنید
TextAbsorber absorber = new TextAbsorber();
absorber.TextSearchOptions.LimitToPageBounds = true;
absorber.TextSearchOptions.Rectangle = new Aspose.Pdf.Rectangle(100, 200, 250, 350);
// جذب کننده را برای صفحه اول بپذیرید
pdfDocument.Pages[1].Accept(absorber);
// متن استخراج شده را دریافت کنید
string extractedText = absorber.Text;
// یک رایتر بسازید و فایل را باز کنید
TextWriter tw = new StreamWriter(dataDir + "extracted-text.txt");
// یک خط متن در فایل بنویسید
tw.WriteLine(extractedText);
// جریان را ببندید
tw.Close();

جستجو یا استخراج متن خاص از فایل PDF با عبارات منظم با استفاده از C#

می توانید متن خاصی را از یک سند PDF استخراج کنید که با برخی الگوها مطابقت دارد. به عنوان مثال، ممکن است بخواهید کلمات یا اعداد خاصی را استخراج کنید. برای این منظور باید یک عبارت منظم طراحی کنید. API از آن regex برای یافتن متن منطبق در سند PDF استفاده می کند. مراحل زیر دستورالعمل هایی برای جستجو و استخراج متن خاص از فایل های PDF است:

  • سند PDF ورودی را بارگیری کنید
  • شیء TextAbsorber ایجاد کنید
  • یک عبارت منظم را طراحی و تنظیم کنید تا با متنی مطابقت داشته باشد
  • از طریق هر قطعه متن استخراج شده حلقه بزنید

زیر قطعه کد C# از یک regex استفاده می کند که متن حاوی 4 رقم را جستجو می کند، به عنوان مثال، 1999,2000 و غیره در تمام صفحات سند.

// سند باز
Document pdfDocument = new Document(dataDir + @"Test.pdf");
// شی TextAbsorber را ایجاد کنید تا تمام نمونه های عبارت جستجوی ورودی را پیدا کنید
TextFragmentAbsorber textFragmentAbsorber = new TextFragmentAbsorber(@"\d{4}"); //like 1999-2020                                                                                                                // set text search option to specify regular expression usage
TextSearchOptions textSearchOptions = new TextSearchOptions(true);
textFragmentAbsorber.TextSearchOptions = textSearchOptions;
// جذب کننده را برای تمام صفحات بپذیرید
pdfDocument.Pages.Accept(textFragmentAbsorber);
// قطعات متن استخراج شده را دریافت کنید
TextFragmentCollection textFragmentCollection = textFragmentAbsorber.TextFragments;     
// حلقه را از طریق قطعات
foreach (TextFragment textFragment in textFragmentCollection)
{
    Console.WriteLine(textFragment.Text);
}

استخراج متن از سلول های جدول در سند PDF با استفاده از سی شارپ

استخراج متن از جداول در صفحه PDF کمی متفاوت است. ما در مثال‌های قبلی با کلاس TextAbsorber کار کرده‌ایم، اما استخراج متن از یک Table کمی متفاوت است. بنابراین، برای استخراج متن از اشیاء جدول باید مراحل زیر را دنبال کنید:

  1. فایل PDF منبع را بارگیری کنید
  2. یک شی از کلاس TableAbsorber ایجاد کنید
  3. تکرار از طریق AbsorbedTable
  4. از طریق هر سلول در هر ردیف از جدول حلقه بزنید

قطعه کد زیر این مراحل را دنبال می کند و متن را به طور موثر از سلول های جدول در سند PDF با استفاده از C# استخراج می کند:

Document pdfDocument = new Document(dataDir + "Test.pdf");
TableAbsorber absorber = new TableAbsorber();
absorber.Visit(pdfDocument.Pages[1]);
foreach (AbsorbedTable table in absorber.TableList)
{
    foreach (AbsorbedRow row in table.RowList)
    {
        foreach (AbsorbedCell cell in row.CellList)
        {
            TextFragment textfragment = new TextFragment();
            TextFragmentCollection textFragmentCollection = cell.TextFragments;
            foreach (TextFragment fragment in textFragmentCollection)
            {
                Console.WriteLine(fragment.Text);
            }
        }
    }
}

جستجو و استخراج متن هایلایت شده از سند PDF با استفاده از C#

متن هایلایت شده به عنوان حاشیه نویسی در فایل های PDF وجود دارد. آنها حاوی متن علامت گذاری شده هستند که آنها را از متن معمولی در یک سند متفاوت می کند. مراحل زیر نحوه خواندن متن هایلایت شده با استفاده از C# را شرح می دهد:

  1. بارگذاری سند منبع
  2. تمام حاشیه نویسی ها را مرور کنید
  3. فیلتر TextMarkupAnnotation
  4. قطعات متن برجسته شده را بازیابی کنید

در زیر یک قطعه کد بر اساس مراحل بالا ارائه شده است که می توان از آن برای دریافت متن برجسته از فایل های PDF استفاده کرد:

Document doc = new Document(dataDir + "ExtractHighlightedText.pdf");
// تمام حاشیه نویسی ها را مرور کنید
foreach (Annotation annotation in doc.Pages[1].Annotations)
{
    // فیلتر TextMarkup Annotation
    if (annotation is TextMarkupAnnotation)
    {
        TextMarkupAnnotation highlightedAnnotation = annotation as TextMarkupAnnotation;
        // قطعات متن برجسته شده را بازیابی کنید
        TextFragmentCollection collection = highlightedAnnotation.GetMarkedTextFragments();
        foreach (TextFragment tf in collection)
        {
            // نمایش متن هایلایت شده
            Console.WriteLine(tf.Text);
        }
    }
}

استخراج متن PDF با مصرف حافظه کم با استفاده از سی شارپ

در زیر دو رویکرد متفاوت برای بهینه سازی مصرف حافظه در حین استخراج متن از اسناد PDF با استفاده از زبان C# ارائه شده است.

i) استفاده از Reset() و FreeMemory() Method

گاهی اوقات استخراج متن ممکن است حافظه و پردازنده زیادی را مصرف کند. احتمالاً زمانی که فایل ورودی بزرگ است و حاوی متن زیادی است. زیرا شیء TextFragmentAbsorber تمام قطعات متن یافت شده را در حافظه ذخیره می کند.

بنابراین، راه حلی که در اینجا توصیه می کنیم فراخوانی متد ()absorber.Reset پس از پردازش هر صفحه است. علاوه بر این، اگر فقط عملیات خواندن را انجام می‌دهید، می‌توانید با متد ()page.FreeMemory، حافظه‌ای را که توسط اشیاء صفحه نگهداری می‌شود، آزاد کنید. بنابراین برای استفاده از حداقل منابع باید مراحل زیر را دنبال کنید:

  1. سند PDF منبع را بارگیری کنید
  2. TextEditOptions را مشخص کنید
  3. TextFragment را بخوانید
  4. روش Reset() را فراخوانی کنید
  5. روش FreeMemory() را فراخوانی کنید

قطعه کد زیر استخراج متن از اسناد PDF را با استفاده از C# نشان می دهد:

Document pdfDocument = new Document(dataDir + @"ITF-TTF Manual.pdf");
TextFragmentAbsorber absorber = new TextFragmentAbsorber(new TextEditOptions(TextEditOptions.FontReplace.RemoveUnusedFonts));
foreach (Page page in pdfDocument.Pages)
{
    page.Accept(absorber);
    //چیزی را از قطعات بخوانید
    count += absorber.TextFragments.Count;
    absorber.Reset();
    page.FreeMemory();
    //GC.Collect();        
}

ما این قطعه کد را با یک فایل نمونه عظیم شامل 450 صفحه، 24500 قطعه متن و تعداد زیادی تصاویر شطرنجی و برداری آزمایش کرده ایم. این فرآیند تنها 500 مگابایت حافظه مصرف می کرد. نکته دیگر در اینجا این است که می توانید زباله جمع کن دات نت را شارژ کنید تا حداکثر مصرف حافظه را به حدود 250 مگابایت با هزینه اضافی 10 ثانیه زمان پردازش کاهش دهید.

ii) استفاده از MemorySaving enumeration

Aspose.PDF for .NET API از پیکربندی حالت ذخیره حافظه هنگام خواندن متن از یک فایل PDF پشتیبانی می کند. شمارش TextExtractionOptions.TextFormattingMode در خدمت مصرف بهینه منابع است. مراحل زیر مراحلی را که باید برای این رویکرد دنبال کنید خلاصه می کند:

  1. فایل PDF منبع را بارگیری کنید
  2. شیء TextDevice ایجاد کنید
  3. تنظیم TextExtractionOptions
  4. متن را استخراج کنید و متن را در یک فایل بنویسید

قطعه کد زیر روش صرفه جویی در حافظه را با استفاده از C# نشان می دهد:

// سند را باز کنید
Document pdfDocument = new Document(dataDir + "Test.pdf");
System.Text.StringBuilder builder = new System.Text.StringBuilder();
// رشته ای برای نگه داشتن متن استخراج شده
string extractedText = "";
foreach (Page pdfPage in pdfDocument.Pages)
{
    using (MemoryStream textStream = new MemoryStream())
    {
        // دستگاه متنی ایجاد کنید
        TextDevice textDevice = new TextDevice();

        // تنظیم گزینه های استخراج متن - تنظیم حالت استخراج متن (خام یا خالص)
        TextExtractionOptions textExtOptions = new
        TextExtractionOptions(TextExtractionOptions.TextFormattingMode.MemorySaving);
        textDevice.ExtractionOptions = textExtOptions;
        // یک صفحه خاص را تبدیل کنید و متن را در جریان ذخیره کنید
        textDevice.Process(pdfPage, textStream);
        // یک صفحه خاص را تبدیل کنید و متن را در جریان ذخیره کنید
        textDevice.Process(pdfDocument.Pages[1], textStream);
        // بستن جریان حافظه
        textStream.Close();
        // دریافت متن از جریان حافظه
        extractedText = Encoding.Unicode.GetString(textStream.ToArray());
    }
    builder.Append(extractedText);
}
dataDir = dataDir + "Memory_Text_Extracted.txt";
// متن استخراج شده را در فایل متنی ذخیره کنید
File.WriteAllText(dataDir, builder.ToString());

نتیجه

ما در این مقاله تعدادی از موارد استفاده مفید را بررسی کرده‌ایم، امکانات بی‌پایانی برای استخراج متن از اسناد PDF با استفاده از سی شارپ با Aspose.PDF برای NET API وجود دارد. می‌توانید از طریق مستندات API اطلاعات بیشتری کسب کنید. در صورت هرگونه سوال، لطفاً با ما در [تالارهای پشتیبانی رایگان12 تماس بگیرید.

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