Видобуток тексту

Видобуток тексту

Видобування тексту

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.
  • Для великих документів обробляйте сторінки по одній, щоб керувати використанням пам’яті.

Поширені проблеми

ПроблемаПричинаВиправлення
Витягнутий текст спотворенийPDF використовує нестандартне кодування або відображення шрифту CIDПеревірте вбудовування шрифтів; деякі скановані PDF потребують OCR
Не знайдено текстових фрагментівВміст сторінки є зображенням, а не текстомВикористайте інструмент OCR, щоб спочатку конвертувати зображення сторінок у текст
Регулярний вираз не повертає збігівШаблон не враховує пробіли, вставлені розміткою тексту PDFНормалізуйте пробіли або використайте менш жорсткий шаблон
TextState.Font є nullРесурс шрифту відсутній у PDFДодайте перевірки на null під час інспекції властивостей шрифту

FAQ

Чи можу я витягнути текст з певної області сторінки?

Так. Встановіть TextFragmentAbsorber.TextSearchOptions.Rectangle, щоб обмежити пошук певною областю сторінки.

Чи зберігає вилучення тексту порядок читання?

Бібліотека повертає текст у порядку потоку вмісту. Для багатостовпчикових макетів може знадобитися сортування фрагментів за позицією.

Чи можу я витягнути текст з усіх сторінок одночасно?

Так. Викличте doc.Pages.Accept(absorber), щоб шукати на кожній сторінці документа.


Зведення довідки API

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

Див. також

 Українська