Витягти текст PDF csharp

Формат PDF тепер використовується всюди для створення різних типів документів, таких як рахунки-фактури, бізнес-звіти тощо. Під час програмної обробки файлів PDF вам може знадобитися витягти текст із PDF-файлу. Для таких випадків ця стаття демонструє просте, потужне та високошвидкісне рішення для вилучення тексту PDF. Отже, давайте дізнаємося, як витягувати текст із PDF-файлів у C#.

Нижче наведено список функцій, які ми будемо обговорювати в цьому блозі:

C# PDF Text Extraction Library

Щоб отримати текст із файлів PDF, ми будемо використовувати Aspose.PDF for .NET. Це потужна та багатофункціональна бібліотека для створення та обробки PDF-файлів. Ви можете легко використовувати цю бібліотеку для завдань обробки PDF-файлів. Крім того, він дозволяє видобувати текст із PDF-файлів абсолютно безкоштовно. Ви можете завантажити його DLL або встановити за допомогою NuGet.

PM> Install-Package Aspose.PDF 

Як витягнути текст із PDF-файлу на C#

Читання текстового вмісту PDF-документа є часто використовуваною функцією. Ви можете витягнути весь текст з усіх сторінок документа за один раз. Нижче наведено кроки для отримання тексту з PDF-файлу на C#.

  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();

C#: пошук і вилучення тексту з певної сторінки в PDF

Після вивчення вилучення тексту на рівні документа давайте витягнемо текст із певної сторінки документа 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();

C# Вилучення тексту з PDF за допомогою регулярних виразів

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

Нижче наведено кроки для пошуку та вилучення певного тексту з файлів PDF за допомогою регулярного виразу.

  • Завантажити вхідний документ PDF
  • Створіть об’єкт TextAbsorber.
  • Створіть і встановіть регулярний вираз, щоб відповідати певному тексту
  • Перегляньте кожен фрагмент тексту

У наведеному нижче фрагменті коду C# використовується регулярний вираз, який шукає текст, що містить 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-таблиці на C#

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

  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-файлів у C#.

Document doc = new Document(dataDir + "ExtractHighlightedText.pdf");
// Перегляньте всі анотації
foreach (Annotation annotation in doc.Pages[1].Annotations)
{
    // Фільтр TextMarkupAnnotation
    if (annotation is TextMarkupAnnotation)
    {
        TextMarkupAnnotation highlightedAnnotation = annotation as TextMarkupAnnotation;
        // Отримати виділені фрагменти тексту
        TextFragmentCollection collection = highlightedAnnotation.GetMarkedTextFragments();
        foreach (TextFragment tf in collection)
        {
            // Відображення виділеного тексту
            Console.WriteLine(tf.Text);
        }
    }
}

Вилучення тексту PDF на C# із низьким споживанням пам’яті

Нижче наведено два різні підходи до оптимізації споживання пам’яті під час вилучення тексту з документів PDF за допомогою мови C#.

i) Використання методу Reset() і FreeMemory().

Іноді вилучення тексту може споживати величезну пам’ять і процесор. Можливо, якщо вхідний файл величезний і містить багато тексту. Це тому, що об’єкт TextFragmentAbsorber зберігає всі знайдені фрагменти тексту в пам’яті.

Тому рішення, яке ми рекомендуємо тут, полягає в тому, щоб викликати метод absorber.Reset() після обробки кожної сторінки. Крім того, якщо ви виконуєте лише операції читання, ви можете звільнити пам’ять, яку зберігають об’єкти сторінки, за допомогою методу page.FreeMemory().

Нижче наведено кроки для мінімізації споживання пам’яті під час вилучення тексту PDF у C#.

  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();        
}

ii) Використання перерахування MemorySaving

API Aspose.PDF for .NET підтримує налаштування режиму збереження пам’яті під час читання тексту з 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();

        // Налаштувати параметри вилучення тексту - встановити режим вилучення тексту (Raw або Pure)
        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 C#

Ви можете отримати безкоштовну тимчасову ліцензію і видобувати текст із PDF-файлів без будь-яких обмежень.

Ознайомтеся з бібліотекою C# PDF

Ви можете дізнатися більше про бібліотеку C# PDF за допомогою документації. У разі будь-яких питань зв’яжіться з нами на безкоштовних форумах підтримки.

Висновок

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

Дивись також