Извлечение текста

Извлечение текста

Извлечение текста

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) для нечувствительного к регистру сопоставления.
  • Проверьте TextState.Font.IsEmbedded, чтобы определить, встроен ли шрифт в PDF.
  • Для больших документов обрабатывайте страницы по одной, чтобы управлять использованием памяти.

Общие проблемы

IssueCauseFix
Extracted text is garbledPDF uses a non-standard encoding or CID font mappingCheck font embedding; some scanned PDFs require OCR
No text fragments foundPage content is an image, not textUse an OCR tool to convert image pages to text first
Regex returns no matchesPattern does not account for whitespace inserted by PDF text layoutNormalize whitespace or use a looser pattern
TextState.Font is nullFont resource is missing from the PDFHandle null checks when inspecting font properties

Часто задаваемые вопросы

Могу ли я извлечь текст из конкретного региона страницы?

Да. Установите TextFragmentAbsorber.TextSearchOptions.Rectangle, чтобы ограничить поиск конкретной областью страницы.

Сохраняет ли извлечение текста порядок чтения?

Библиотека возвращает текст в порядке потока содержимого. Для многоколоночных макетов может потребоваться сортировать фрагменты по позиции.

Могу ли я извлечь текст со всех страниц сразу?

Да. Вызовите doc.Pages.Accept(absorber) для поиска на каждой странице документа.


API Сводка справки

Класс / МетодОписание
TextAbsorberИзвлекает весь текст в виде одной строки
TextFragmentAbsorberИзвлекает структурированные фрагменты текста с данными о позиции и шрифте
TextFragmentТекстовый фрагмент с позицией, состоянием текста и сегментами
TextFragment.TextИзвлечённая строка текста
TextFragment.PositionКоординаты на странице
TextFragment.TextStateИнформация о шрифте, размере и цвете
TextFragment.SegmentsПодфрагменты внутри фрагмента
TextParagraphКонструктор многострочных текстовых блоков
TextStateИмя шрифта, размер, цвет и свойства стиля
FontRepositoryСтатический поиск и загрузка шрифтов
FontRepository.FindFontНайти шрифт по имени

См. также

 Русский