Шукати в PDF за допомогою C#

Шукати специфічний текст у PDF документах є поширеним завданням у системах управління документами, інструментах юридичного огляду, обробниках рахунків та інших корпоративних додатках. Незалежно від того, чи намагаєтеся ви знайти ключове слово, витягнути певні значення або закрити чутливу інформацію, автоматизація пошуку в PDF може заощадити багато часу та зусиль.

У цьому блозі ви дізнаєтеся, як програмно шукати текст у PDF файлах за допомогою C#. Ми крок за кроком розглянемо основні функції з практичними прикладами коду C#.

Ця стаття охоплює такі теми:

C# Бібліотека для пошуку в PDF-документах

Aspose.PDF for .NET спрощує процес пошуку тексту в PDF-файлах за допомогою C#. Він дозволяє знаходити точні слова, відповідати шаблонам, використовуючи регулярні вирази, і навіть виділяти або замінювати знайдений текст—все це всього лише з кількома рядками коду. Ця потужна бібліотека надає надійні функції для маніпуляції документами PDF. Вона дозволяє розробникам легко реалізовувати функціональність пошуку. За допомогою Aspose.PDF ви можете швидко знаходити слова в PDF, що робить його незамінним інструментом для розробників програмного забезпечення.

Перед тим, як зануритися в пошук тексту в PDF, необхідно налаштувати своє середовище розробки. Дотримуйтесь цих кроків, щоб почати працювати з Aspose.PDF for .NET:

1. Встановіть Aspose.PDF for .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 for .NET ви можете легко шукати конкретні слова або фрази в PDF, знаходити всі їхні випадки та виконувати дії, такі як підсвічення або вилучення їхніх деталей.

Слідуйте цим крокам, щоб виконати базовий пошук тексту:

  1. Завантажте цільовий PDF-файл за допомогою класу Document.
  2. Створіть TextFragmentAbsorber, щоб визначити ключове слово для пошуку.
  3. Запустіть абсорбер на всіх сторінках, використовуючи метод Accept().
  4. Витягніть усі відповідні фрагменти тексту.
  5. Виведіть кількість знайдених матчів.
  6. Пройдіть через кожен матч і відобразіть його з номером сторінки.

Наступний приклад коду реалізує ці кроки.

// Load the PDF file
Document pdfDocument = new Document("sample.pdf");

// Створіть текстовий абсорбер з ключовим словом.
TextFragmentAbsorber textFragmentAbsorber = new TextFragmentAbsorber("invoice");

// Застосуйте абсорбер до всіх сторінок
pdfDocument.Pages.Accept(textFragmentAbsorber);

// Отримати відповідні текстові фрагменти
TextFragmentCollection textFragments = textFragmentAbsorber.TextFragments;

// Print how many times the keyword was found
Console.WriteLine($"Found {textFragments.Count} instance(s) of the keyword.");

// Loop through and print each found text
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

Щоб краще зрозуміти, що відбувається в коді, ось короткий огляд основних класів і методів, що беруть участь:

  • Документ: Відображає весь PDF файл. Він надає доступ до сторінок, контенту та структури.
  • TextFragmentAbsorber: Знаходить всі випадки вказаного рядка або шаблону в PDF. Ви також можете включити такі функції, як нечутливий до регістру або пошук на основі регулярних виразів.
  • Accept(): Застосовує абсорбер до кожної сторінки. Він сканує документ і збирає відповідні фрагменти.
  • TextFragments: Колекція всіх знайдених фрагментів тексту, повернених абсорбером.
  • TextFragment: Кожен окремий матч з деталями, такими як вміст, позиція та номер сторінки.

Пошук нечутливий до регістру та за цілим словом за допомогою C#

Коли ви шукаєте вміст PDF, вам потрібно контролювати, як система знаходить збіги, щоб забезпечити точні результати. Інколи ви хочете ігнорувати регістр літер (“Invoice” проти “invoice”), або ви хочете збігатися лише з повними словами — а не з частковими збігами в інших словах.

Aspose.PDF for .NET надає вам інструменти для того, щоб робити обидва.

Пошук без урахування регістру

За замовчуванням, пошук чутливий до регістру. Щоб ігнорувати регістр букв, використовуйте TextSearchOptions з увімкненим IgnoreCase:

// Load the PDF file
Document pdfDocument = new Document("sample.pdf");

// Створіть текстовий абсорбер з нечутливою до регістру регулярною виразом.
TextFragmentAbsorber textFragmentAbsorber = new TextFragmentAbsorber("(?i)INVOICE");

// Встановіть параметри пошуку тексту, щоб увімкнути використання регулярних виразів.
TextSearchOptions textSearchOptions = new TextSearchOptions(true);
textFragmentAbsorber.TextSearchOptions = textSearchOptions;

// Нанесіть поглинач на всі сторінки.
pdfDocument.Pages.Accept(textFragmentAbsorber);

// Retrieve the matched text fragments
TextFragmentCollection textFragments = textFragmentAbsorber.TextFragments;

// Output the number of matches found
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.

// Load the PDF file
Document pdfDocument = new Document("sample.pdf");

// Створіть текстовий абсорбер із регулярним виразом для збігу цілих слів
TextFragmentAbsorber textFragmentAbsorber = new TextFragmentAbsorber(@"\bcar\b");

// Встановіть параметри пошуку тексту для використання регулярних виразів
TextSearchOptions textSearchOptions = new TextSearchOptions(true);
textFragmentAbsorber.TextSearchOptions = textSearchOptions;

// Застосуйте поглинач до всіх сторінок
pdfDocument.Pages.Accept(textFragmentAbsorber);

// Retrieve the matched text fragments
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}");
}

Це забезпечує, що лише окремі випадки слова “автомобіль” будуть зіставлені.

Шукати за допомогою регулярних виразів у PDF

У деяких випадках вам потрібно знайти більше, ніж конкретне слово — ви хочете співвіднести шаблони, такі як дати, адреси електронної пошти або референсні номери. Ось тут і приходять на допомогу регулярні вирази (regex).

Aspose.PDF for .NET дозволяє використовувати регулярні вирази для розширеного пошуку тексту в будь-якій частині вашого PDF документа.

Приклад: Знайдіть усі дати у PDF-файлі

Давайте скажемо, що ви хочете знайти всі дати у форматі dd/mm/yyyy:

// Завантажте PDF і шукайте текст
Document pdfDocument = new Document("sample.pdf");

// Увімкніть регулярні вирази в параметрах пошуку
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+

Regex розширює ваші можливості пошуку далеко за межі статичного тексту, допомагаючи вам витягувати структуровані дані з неструктурованих документів.

Шукати та витягувати текст з деталями позиції

Іноді просто знайти текст недостатньо—можливо, вам потрібно знати, де саме він з’являється в 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 for .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);

Пошук на діапазоні сторінок

Щоб шукати на власному діапазоні (наприклад, сторінки з 2 по 4), просто проходьте через діапазон:

TextFragmentAbsorber absorber = new TextFragmentAbsorber("invoice");

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

Цей підхід дає вам повний контроль над продуктивністю та точністю, особливо корисно для відсканованих або секційованих документів.

Розширений сценарій використання: Пошук і редагування конфіденційної інформації

У правових, кадрових або фінансових документах поширено приховувати чутливий вміст — такі як імена, ідентифікаційні номери або номери рахунків — перед передачею. Aspose.PDF for .NET спрощує це, поєднуючи функції пошуку та редагування.

Ви можете шукати терміни, а потім застосувати чорну накладку, використовуючи RedactionAnnotation.

// Завантажте PDF і шукайте текст
Document pdfDocument = new Document("sample.pdf");

// Шукати ім'я "John Doe"
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
    );

    // Create a redaction annotation
    RedactionAnnotation redaction = new RedactionAnnotation(fragment.Page, rect)
    {
        FillColor = Color.Black,
        Color = Color.Black
    };

    // Add and apply redaction
    fragment.Page.Annotations.Add(redaction);
    redaction.Redact();
}
// Save the modified document
pdfDocument.Save("SearchAndRedact.pdf");

Що трапляється

  • Цільовий текст ("John Doe") знайдено і закрито чорним квадратом.
  • Це не лише візуально — це видаляє вміст з PDF-шару, роблячи його невідновлюваним з файлу.

Отримайте безкоштовну ліцензію

Тепер, коли ви навчилися шукати, вилучати, виділяти та зафарбовувати текст у PDF-файлах за допомогою Aspose.PDF for .NET, настав час реалізувати ці знання на практиці.

Спробуйте самостійно: завантажте безкоштовну тимчасову ліцензію та почніть розробку власних розумних PDF-інструментів.

Search in PDF: Безкоштовні ресурси

Хочете вийти за межі простого пошуку тексту в PDF-документах? Досліджуйте всі можливості Aspose.PDF for .NET з цими безкоштовними, дружніми для розробників ресурсами:

  • Посібник для розробника Досліджуйте, як створювати, змінювати, конвертувати та захищати PDF-файли програмно. Aspose.PDF for .NET Documentation

  • Безкоштовні онлайн-інструменти Конвертуйте, об`єднуйте, розділяйте та редагуйте файли PDF безпосередньо у вашому браузері. Aspose Free PDF Tools

  • API Reference Дізнайтеся більше про класи, властивості та методи, доступні в Aspose.PDF for .NET, щоб прискорити вашу розробку. Aspose.PDF API Reference

  • Форум підтримки Запитуйте питання, повідомляйте про проблеми та отримуйте відповіді безпосередньо від експертів Aspose. Aspose Support Forum

Ці ресурси безкоштовні і доступні, щоб допомогти вам максимально використовувати вашу подорож у розробці PDF.

Висновок

Пошук тексту у PDF файлах є життєво важливою функцією для багатьох документних додатків — будь то витягування даних, аудит вмісту або підготовка файлів до редагування. З Aspose.PDF for .NET ви можете легко виконувати пошук за ключовими словами, використовувати регулярні вирази, підсвічувати результати та навіть редагувати чутливу інформацію з точністю та контролем. Aspose.PDF пропонує зручний для розробників API, який спрощує складні операції з PDF — економлячи ваш час, водночас дозволяючи потужну автоматизацію.

Якщо у вас є будь-які запитання або вам потрібна подальша допомога, будь ласка, не соромтеся звертатися до нашого free support forum.

See Also