Видобуток тексту
Видобування тексту
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 | Знайти шрифт за назвою |