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

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

در این پست وبلاگ، شما یاد خواهید گرفت که چگونه به طور برنامه‌نویسی متن را در فایل‌های PDF با استفاده از C# جستجو کنید. ما شما را مرحله به مرحله با ویژگی‌های کلیدی و مثال‌های عملی کد C# راهنمایی خواهیم کرد.

این مقاله موضوعات زیر را پوشش می‌دهد:

کتابخانه C# برای جستجو در اسناد PDF

Aspose.PDF for .NET فرآیند جستجوی متن در فایل‌های PDF را با استفاده از C# ساده می‌کند. این کتابخانه به شما امکان می‌دهد کلمات دقیق را پیدا کنید، الگوها را با استفاده از عبارات منظم مطابقت دهید و حتی متن‌های مطابقت یافته را هایلایت یا جایگزین کنید—همه این‌ها تنها با چند خط کد. این کتابخانه قدرتمند ویژگی‌های قوی برای دستکاری اسناد PDF ارائه می‌دهد. این امکان را برای توسعه‌دهندگان فراهم می‌کند تا به‌راحتی قابلیت‌های جستجو را پیاده‌سازی کنند. با Aspose.PDF، می‌توانید به‌سرعت کلمات را در یک PDF پیدا کنید و این آن را به ابزاری ارزشمند برای توسعه‌دهندگان نرم‌افزار تبدیل می‌کند.

قبل از اینکه به جستجوی متن در PDF پردازید، باید محیط توسعه خود را راه‌اندازی کنید. مراحل زیر را برای شروع با Aspose.PDF برای .NET دنبال کنید:

1. Aspose.PDF را برای .NET نصب کنید.

از releases دانلود کنید یا آن را از طریق NuGet نصب کنید. پروژه .NET خود را در Visual Studio باز کنید و فرمان زیر را در کنسول مدیر بسته NuGet اجرا کنید:

PM> Install-Package Aspose.PDF

این دستور کتابخانه Aspose.PDF را به پروژه شما اضافه می‌کند تا بتوانید به ویژگی‌های قدرتمند پردازش PDF آن دسترسی پیدا کنید.

2. وارد کردن فضای نام های مورد نیاز

در بالای فایل C# خود، این دستورات using را اضافه کنید:

using Aspose.Pdf;
using Aspose.Pdf.Text;

حالا شما آماده‌اید تا به جستجوی متن در فایل‌های PDF خود با استفاده از API Aspose.PDF بپردازید.

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

با Aspose.PDF برای .NET، شما به راحتی می‌توانید به‌دنبال کلمات یا عبارات خاصی در یک PDF بگردید، تمام موارد آن‌ها را پیدا کنید و اقداماتی مانند هایلایت کردن یا استخراج جزئیات آن‌ها را انجام دهید.

این مراحل را برای انجام یک جستجوی متنی پایه دنبال کنید:

  1. فایل PDF هدف را با استفاده از کلاس Document بارگذاری کنید.
  2. یک TextFragmentAbsorber ایجاد کنید تا کلمه کلیدی جستجو را تعریف کنید.
  3. تمام صفحات را با استفاده از روش Accept() اجرا کنید.
  4. تمام تکه های متنی که مطابقت دارند را بازیابی کنید.
  5. تعداد مسابقات پیدا شده را چاپ کنید.
  6. از حلقه برای عبور و نمایش هر مسابقه با شماره صفحه استفاده کنید.

مثال کد زیر این مراحل را پیاده‌سازی می‌کند.

// فایل PDF را بارگذاری کنید
Document pdfDocument = new Document("sample.pdf");

// یک جاذب متن با کلمه کلیدی جستجو ایجاد کنید
TextFragmentAbsorber textFragmentAbsorber = new TextFragmentAbsorber("invoice");

// جاذب را به تمام صفحات اعمال کنید
pdfDocument.Pages.Accept(textFragmentAbsorber);

// متون تطبیق یافته را بگیرید
TextFragmentCollection textFragments = textFragmentAbsorber.TextFragments;

// چاپ کنید که کلمه کلیدی چند بار پیدا شده است
Console.WriteLine($"Found {textFragments.Count} instance(s) of the keyword.");

// متن پیدا شده را یکی یکی تکرار و چاپ کنید.
foreach (TextFragment fragment in textFragments)
{
    Console.WriteLine($"Text: {fragment.Text} | Page: {fragment.Page.Number}");
}

مثال خروجی

Found 3 instance(s) of the keyword.
Text: invoice | Page: 1
Text: invoice | Page: 2
Text: invoice | Page: 3

این مثال یک جستجوی کلید واژه ساده را نشان می‌دهد که در تمام صفحات PDF کار می‌کند. شما متن تطبیق یافته را به همراه شماره صفحه آن خواهید دید.

درک کلاس‌های کلیدی استفاده شده در جستجوی PDF

برای درک بهتر آنچه در کد در حال وقوع است، در اینجا یک تجزیه و تحلیل سریع از کلاس‌ها و متدهای کلیدی که درگیر هستند آورده شده است:

  • Document: نشان‌دهندهٔ کل فایل PDF است. این امکان دسترسی به صفحات، محتوا و ساختار را فراهم می‌کند.
  • TextFragmentAbsorber: تمامی موارد وقوع یک رشته یا الگوی داده شده را درون PDF پیدا می‌کند. همچنین می‌توانید قابلیت‌هایی مانند جستجوی بی‌تفاوت به حروف یا جستجوی مبتنی بر regex را فعال کنید.
  • Accept(): این تابع جاذب را به هر صفحه اعمال می‌کند. این تابع از طریق سند می‌گذرد و بخش‌های مطابق را جمع‌آوری می‌کند.
  • TextFragments: مجموعه ای از تمام تکه های متن مطابقت یافته که توسط جذب کننده بازگردانده شده است.
  • TextFragment: هر مسابقه فردی با جزئیاتی مانند محتوا، موقعیت و شماره صفحه.

جستجوی بدون حساسیت به کلمات بزرگ و کوچک و جستجوی کلمات کامل با استفاده از C#

زمانی که محتوای PDF را جستجو می‌کنید، باید کنترل کنید که سیستم چگونه تطابق‌ها را پیدا می‌کند تا نتایج دقیقی به دست آورید. گاهی اوقات، می‌خواهید حساسیت به حروف بزرگ و کوچک را نادیده بگیرید ("Invoice" در مقابل "invoice")، یا می‌خواهید تنها کلمات کامل را مطابقت دهید — نه تطابق‌های جزئی درون کلمات دیگر.

Aspose.PDF برای .NET ابزارهایی را به شما ارائه می‌دهد تا هر دو کار را انجام دهید.

جستجوی نادیده گرفتن حروف بزرگ و کوچک

به طور پیش‌فرض، جستجوها حساس به حروف بزرگ و کوچک هستند. برای نادیده گرفتن حساسیت حروف، از TextSearchOptions با گزینه IgnoreCase فعال استفاده کنید:

// فایل PDF را بارگذاری کنید
Document pdfDocument = new Document("sample.pdf");

// متن جاذب با یک عبارت منظم بدون حساسیت به حروف بزرگ و کوچک ایجاد کنید
TextFragmentAbsorber textFragmentAbsorber = new TextFragmentAbsorber("(?i)INVOICE");

// تنظیم گزینه‌های جستجوی متن برای فعال‌سازی استفاده از عبارات منظم
TextSearchOptions textSearchOptions = new TextSearchOptions(true);
textFragmentAbsorber.TextSearchOptions = textSearchOptions;

// همه صفحات را با جاذب پوشش دهید
pdfDocument.Pages.Accept(textFragmentAbsorber);

// متن‌های مطابقت یافته را بازیابی کنید
TextFragmentCollection textFragments = textFragmentAbsorber.TextFragments;

// تعداد مسابقات پیدا شده را خروجی دهید
Console.WriteLine($"Found {textFragments.Count} instance(s) of the keyword.");

// هر تکه متن یافت شده را مرور کرده و نمایش دهید
foreach (TextFragment fragment in textFragments)
{
    Console.WriteLine($"Text: {fragment.Text} | Page: {fragment.Page.Number}");
}

این هر دو "Invoice"، "invoice"، "INVOICE" و سایر نویسه‌های متفاوت را پیدا خواهد کرد.

تنها کلمات کامل را مطابقت دهید

شما همچنین می‌توانید از تطابق‌های جزئی جلوگیری کنید. به عنوان مثال، جستجو برای car نباید با care یا scar مطابقت داشته باشد.

// فایل PDF را بارگذاری کنید
Document pdfDocument = new Document("sample.pdf");

// یک جاذب متن با الگوی عبارات منظم برای تطابق کلمه کامل ایجاد کنید
TextFragmentAbsorber textFragmentAbsorber = new TextFragmentAbsorber(@"\bcar\b");

// تنظیم گزینه‌های جستجوی متن برای فعال‌سازی استفاده از عبارات منظم
TextSearchOptions textSearchOptions = new TextSearchOptions(true);
textFragmentAbsorber.TextSearchOptions = textSearchOptions;

// تمام صفحات را با جاذب پوشش دهید
pdfDocument.Pages.Accept(textFragmentAbsorber);

// متن های مطابق را بازیابی کنید
TextFragmentCollection textFragments = textFragmentAbsorber.TextFragments;

// تعداد مسابقات پیدا شده را خروجی دهید
Console.WriteLine($"Found {textFragments.Count} instance(s) of the keyword.");

// حلقه بزنید و هر بخش متنی پیدا شده را نمایش دهید
foreach (TextFragment fragment in textFragments)
{
    Console.WriteLine($"Text: {fragment.Text} | Page: {fragment.Page.Number}");
}

این اطمینان می‌دهد که فقط نمونه‌های مستقل از کلمه “car” مطابقت دارند.

جستجو با استفاده از عبارات منظم در PDF

در موارد خاص، شما نیاز دارید که بیش از یک کلمه خاص را پیدا کنید—شما می‌خواهید الگوهایی مانند تاریخ‌ها، آدرس‌های ایمیل یا شماره‌های مرجع را مطابقت دهید. اینجاست که عبارات با قاعده (regex) وارد عمل می‌شوند.

Aspose.PDF برای .NET به شما این امکان را می‌دهد که از regex برای جستجوی متن پیشرفته در هر قسمتی از سند PDF خود استفاده کنید.

مثال: پیدا کردن همه تاریخ‌ها در یک PDF

بیایید بگوییم که شما می‌خواهید تمام تاریخ‌ها را در فرمت dd/mm/yyyy پیدا کنید:

// بارگذاری PDF و جستجوی متن
Document pdfDocument = new Document("sample.pdf");

// قابلیت regex را در گزینه‌های جستجو فعال کنید
TextSearchOptions searchOptions = new TextSearchOptions(true)
{
    IsRegularExpressionUsed = true
};

// جاذب با الگوی تاریخ ایجاد کنید
TextFragmentAbsorber absorber = new TextFragmentAbsorber(@"\d{2}/\d{2}/\d{4}", searchOptions);

// از جذب‌کننده به صفحات استفاده کنید
pdfDocument.Pages.Accept(absorber);

// الگوهای پیدا شده را مرور و چاپ کنید
foreach (TextFragment fragment in absorber.TextFragments)
{
    Console.WriteLine($"Found date: {fragment.Text} on Page {fragment.Page.Number}");
}

الگوهای مفید دیگر:

  • Emails: \b[A-Za-z0-9.%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b
  • Phone Numbers: \d{3}[-.\s]??\d{3}[-.\s]??\d{4}
  • شماره‌های فاکتور: INV-\d+

ریجکس قابلیت‌های جستجوی شما را فراتر از متن‌های ایستا گسترش می‌دهد و به شما کمک می‌کند داده‌های ساختاریافته را از اسناد غیر ساختاریافته استخراج کنید.

متن را جستجو و جزئیات موقعیت را استخراج کنید.

گاهی اوقات، پیدا کردن متن کافی نیست—شما ممکن است نیاز داشته باشید بدانید که متن دقیقاً در کجا در PDF ظاهر می‌شود. Aspose.PDF به شما این امکان را می‌دهد که شماره صفحه، مختصات و جزئیات قالب‌بندی هر مطابقت را استخراج کنید.

این ویژگی به ویژه برای ساخت نمایه‌ها، برچسب‌گذاری مدارک یا ایجاد لینک‌های قابل کلیک مفید است.

مثال: موقعیت هر تطبیق را بدست آورید

// PDF را بارگذاری کنید و به دنبال متن بگردید.
Document pdfDocument = new Document("sample.pdf");
TextFragmentAbsorber absorber = new TextFragmentAbsorber("invoice");
pdfDocument.Pages.Accept(absorber);

// تکه‌های مطابقت یافته را دریافت کنید
TextFragmentCollection fragments = absorber.TextFragments;

// موقعیت و متن را برای هر مسابقه چاپ کنید
foreach (TextFragment fragment in fragments)
{
    Console.WriteLine($"Text: {fragment.Text}");
    Console.WriteLine($"Page: {fragment.Page.Number}");
    Console.WriteLine($"Position - X: {fragment.Position.XIndent}, Y: {fragment.Position.YIndent}");
    Console.WriteLine($"Font: {fragment.TextState.Font.FontName}, Size: {fragment.TextState.FontSize}");
    Console.WriteLine("------------");
}

Sample Output

Text: invoice
Page: 1
Position - X: 33.482, Y: 708.246
Font: Helvetica, Size: 12
------------
Text: invoice
Page: 2
Position - X: 33.482, Y: 708.246
Font: Helvetica, Size: 12
------------
Text: invoice
Page: 3
Position - X: 33.482, Y: 708.246
Font: Helvetica, Size: 12
------------

شما اکنون دقیقاً می‌دانید که کلمه “invoice” چگونه و کجا ظاهر می‌شود و همچنین نحوه استایل آن. این سطح از جزئیات درهای پردازش پیشرفته‌ای را باز می‌کند، مانند الحاقیه‌ها، نکات ابزار، یا هایلایت‌های پویا.

متن پیدا شده را هایلایت یا جایگزین کردن

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

متن را در PDF جستجو و هایلایت کنید

شما می‌توانید متن را با تغییر رنگ پس‌زمینه و رنگ فونت بصری بارز کنید.

TextFragmentAbsorber absorber = new TextFragmentAbsorber("invoice");
pdfDocument.Pages.Accept(absorber);

foreach (TextFragment fragment in absorber.TextFragments)
{
    // Highlight by changing text appearance
    fragment.TextState.BackgroundColor = Color.Yellow;
    fragment.TextState.ForegroundColor = Color.Red;
    fragment.TextState.FontStyle = FontStyles.Bold;
}

این برای مرور، اصلاح یا تولید گزارش‌های حاشیه‌نویسی شده مفید است.

متن را پیدا کرده و جایگزین کنید

نیاز به حذف یا به‌روزرسانی متن در سند دارید؟ فقط آن را مستقیماً جایگزین کنید:

foreach (TextFragment fragment in absorber.TextFragments)
{
    fragment.Text = "REDACTED";
}

شما حتی می‌توانید در حین جایگزینی، فرمت جدیدی اعمال کنید:

fragment.TextState.FontSize = 12;
fragment.TextState.Font = FontRepository.FindFont("Arial");
fragment.TextState.ForegroundColor = Color.Black;

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

جستجو در تمام صفحات یا صفحات خاص

به طور پیش‌فرض، Aspose.PDF در تمامی صفحات یک PDF جستجو می‌کند. اما گاهی اوقات، ممکن است بخواهید جستجو را به یک صفحه خاص یا یک محدوده از صفحات محدود کنید—به ویژه زمانی که با فایل‌های بزرگ کار می‌کنید یا زمانی که محتوا قابل پیش‌بینی است.

Aspose.PDF انجام دادن هر دو کار را آسان می‌کند.

در همه صفحات جستجو کنید (پیش‌فرض)

اگر شما صفحه‌ای را مشخص نکنید، جاذب به طور خودکار هر صفحه‌ای را جستجو می‌کند.

TextFragmentAbsorber absorber = new TextFragmentAbsorber("invoice");
pdfDocument.Pages.Accept(absorber); // Searches all pages

جستجو در یک صفحه خاص

شما همچنین می‌توانید با هدف قرار دادن مستقیم آن، یک صفحه را جستجو کنید:

TextFragmentAbsorber absorber = new TextFragmentAbsorber("invoice");

// Search only on page 2
pdfDocument.Pages[2].Accept(absorber);

بررسی در یک محدوده از صفحات

برای جستجوی یک بازه سفارشی (به عنوان مثال، صفحات ۲ تا ۴)، فقط از طریق بازه تکرار کنید:

TextFragmentAbsorber absorber = new TextFragmentAbsorber("invoice");

// Loop through selected pages
for (int i = 2; i <= 4; i++)
{
    pdfDocument.Pages[i].Accept(absorber);
}

این رویکرد به شما کنترل کامل بر عملکرد و دقت می‌دهد، که به‌خصوص برای مستندات اسکن‌شده یا بخش‌بندی‌شده مفید است.

موارد استفاده پیشرفته: جستجو و حذف اطلاعات حساس

در اسناد قانونی، منابع انسانی یا مالی، مرسوم است که محتوای حساس—مانند نام‌ها، شناسه‌ها یا شماره‌های حساب—قبل از به اشتراک‌گذاری پنهان شود. Aspose.PDF برای .NET این کار را با ترکیب قابلیت‌های جستجو و حذف محتوا آسان می‌سازد.

شما می‌توانید به جستجوی اصطلاحات بپردازید و سپس از RedactionAnnotation برای اعمال یک لایه مشکی استفاده کنید.

// فایل PDF را بارگذاری کرده و به دنبال متن بگردید.
Document pdfDocument = new Document("sample.pdf");

// به دنبال نام "جان دو" بگردید
TextFragmentAbsorber absorber = new TextFragmentAbsorber("John Doe");
pdfDocument.Pages.Accept(absorber);

// از طریق قطعات یافت‌شده عبور کنید و آن‌ها را ویرایش کنید
foreach (TextFragment fragment in absorber.TextFragments)
{
    // موضع و ابعاد را دریافت کنید
    Aspose.Pdf.Rectangle rect = new Aspose.Pdf.Rectangle(
        fragment.Position.XIndent,
        fragment.Position.YIndent,
        fragment.Position.XIndent + fragment.Rectangle.Width,
        fragment.Position.YIndent + fragment.Rectangle.Height
    );

    // ایجاد یک حاشیه نویسی ویرایشی
    RedactionAnnotation redaction = new RedactionAnnotation(fragment.Page, rect)
    {
        FillColor = Color.Black,
        Color = Color.Black
    };

    // افزودن و اعمال سانسور
    fragment.Page.Annotations.Add(redaction);
    redaction.Redact();
}
// ذخیره سند اصلاح شده
pdfDocument.Save("SearchAndRedact.pdf");

چه اتفاقی می‌افتد

  • متن هدف ("جان دو") پیدا شده و با یک جعبه سیاه پوشانده شده است.
  • این فقط بصری نیست—بلکه محتوا را از لایه PDF حذف می‌کند و آن را از فایل غیرقابل بازیابی می‌سازد.

دریافت مجوز رایگان

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

خودتان امتحان کنید: یک لایسنس موقت رایگان دانلود کنید و ساخت ابزارهای هوشمند PDF خود را آغاز کنید.

در PDF جستجو کنید: منابع رایگان

می‌خواهید فراتر از جستجوی متن در PDF ها بروید؟ تمامی قابلیت‌های Aspose.PDF برای .NET را با این منابع رایگان و دوستانه برای توسعه‌دهندگان کاوش کنید:

  • راهنمای توسعه‌دهنده یاد بگیرید که چگونه به صورت برنامه‌نویسی فایل‌های PDF را ایجاد، ویرایش، تبدیل و ایمن کنید. Aspose.PDF for .NET Documentation

  • ابزارهای آنلاین رایگان فایل‌های PDF را مستقیماً در مرورگر خود تبدیل کنید، ادغام کنید، تقسیم کنید و ویرایش کنید. Aspose Free PDF Tools

  • مرجع API در مورد کلاس‌ها، خصوصیات و متدهای موجود در Aspose.PDF برای .NET بیشتر بیاموزید تا توسعه خود را تسریع کنید. Aspose.PDF API Reference

  • انجمن پشتیبانی سوال بپرسید، مشکلات را گزارش دهید و مستقیماً از کارشناسان Aspose پاسخ بگیرید. Aspose Support Forum

این منابع رایگان هستند و در دسترس قرار دارند تا به شما کمک کنند بیشترین بهره را از سفر توسعه PDF خود ببرید.

نتیجه گیری

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

如果您有任何问题或需要进一步的帮助,请随时通过我们的 free support forum 与我们联系。

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