Извлечение текста
Извлечение текста
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. - Для больших документов обрабатывайте страницы по одной, чтобы управлять использованием памяти.
Общие проблемы
| Issue | Cause | Fix |
|---|---|---|
| Extracted text is garbled | PDF uses a non-standard encoding or CID font mapping | Check font embedding; some scanned PDFs require OCR |
| No text fragments found | Page content is an image, not text | Use an OCR tool to convert image pages to text first |
| Regex returns no matches | Pattern does not account for whitespace inserted by PDF text layout | Normalize whitespace or use a looser pattern |
TextState.Font is null | Font resource is missing from the PDF | Handle 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 | Найти шрифт по имени |