Text
Text
Эта страница охватывает чтение текста со страницы на трёх уровнях детализации: простой текст, структурированные блоки разметки и отдельные позиционированные глифы. Для записи текста на страницу см. Core API and Core API.
Извлечение простого текста
Page.GetText() возвращает собранный простой текст страницы в порядке чтения. Это самый простой способ подтвердить, какой текст фактически содержится на странице — например, после уплощения поля или применения редактирования.
const page = doc.Pages[0];
console.log(page.GetText().includes('Internal memo'));Структурированный текст
Page.GetStructuredText() извлекает позиционированный текст, сгруппированный в строки (по базовой линии) и блоки, похожие на абзацы (по вертикальному промежутку и выравниванию по левому краю), возвращая TextBlock[] — полезно, когда вам нужен макет, а не просто плоская строка.
Инспекция на уровне глифов
visitContent(doc, page, visitor) проходит по потокам содержимого страницы — включая Form XObjects — и вызывает соответствующий обработчик на visitor для каждого глифа, изображения или пути, которые он встречает. Обработчик glyph получает GlyphEvent: text глифа, его quad в пространстве устройства, fontSize, color и поля происхождения, такие как mcid (его охватывающий элемент помеченного контента, если он есть) и artifact (истина, когда отрисовано внутри области /Artifact).
import { visitContent } from '@asposefoss/pdf';
let glyphCount = 0;
visitContent(doc, page, {
glyph: (e) => {
glyphCount++;
if (e.artifact) return; // skip decorative content
console.log(e.text, e.quad, e.color);
},
});
console.log('glyphs drawn:', glyphCount);Советы и лучшие практики
- Используйте
Page.GetText()для быстрой проверки наличия/отсутствия; используйтеvisitContent()с обработчикомglyph, когда нужны точные позиция, размер шрифта или цвет каждого глифа. - Проверьте
GlyphEvent.artifact, чтобы пропустить декоративное содержимое (элементы оформления страницы, фон), которое в размеченном документе помечено как/Artifact, а не как реальное содержимое. GlyphEvent.mcidсвязывает глиф с его охватывающим элементом структуры, когда документ помечен — комбинируйте с Structure чтобы перейти от глифа к его логическому элементу.Page.GetStructuredText()группирует глифы в блоки за вас; обращайтесь кvisitContent()напрямую только тогда, когда вам нужны детали по каждому глифу, которыеGetStructuredText()не раскрывает.
Распространённые проблемы
| Проблема | Причина | Исправление |
|---|---|---|
Page.GetText() отсутствует текст, который явно виден на странице | Текст был отрисован в виде векторных контуров или изображения, а не реальными операторами отображения глифов | Используйте visitContent() с обработчиком path / image, чтобы подтвердить, какой тип контента действительно его нарисовал |
Обработчик glyph у visitContent() срабатывает для декоративного фонового текста | GlyphEvent.artifact не был проверен | Пропускать события, где e.artifact является true |
| Извлечённый текст находится вне визуального порядка чтения | Простая сборка GetText() не восстанавливает макет с несколькими колонками | Используйте Page.GetStructuredText(), который группирует текст в блоки, учитывающие макет |
FAQ
В чем разница между GetText и GetStructuredText?
GetText() возвращает одну плоскую строку собранного текста страницы. GetStructuredText() возвращает TextBlock[] — текст, сгруппированный в строки и блоки, похожие на абзацы, по базовой линии и макету, полезно, когда важна позиция.
Как получить точную позицию и размер шрифта каждого символа?
Вызовите visitContent(doc, page, { glyph: (e) => ... }). Каждый GlyphEvent содержит text глифа, quad в пространстве устройства, fontSize, color и базовую линию angle.
Могу ли я определить, является ли часть текста реальным содержимым или декоративным элементом?
Да — GlyphEvent.artifact является true, когда глиф был отрисован внутри /Artifact области отмеченного контента, то же различие использует Document.AutoTag() при выборе, что помечать.
Видит ли извлечение текста содержимое внутри Form XObjects?
Да — visitContent() заходит в Form XObjects в рамках своего обхода, поэтому глифы, отрисованные через переиспользуемую форму, всё равно посещаются.
API Reference Сводка
| Класс/Метод | Описание: |
|---|---|
Page.GetText() | Собранный простой текст страницы в порядке чтения |
Page.GetStructuredText() | Текст, сгруппированный в строки и блоки, похожие на абзацы (TextBlock[]) |
visitContent() | Обход содержимого страницы, генерируя события глифов/изображений/путей с указанием происхождения |
GlyphEvent | Один позиционированный глиф: text, quad, fontSize, color, mcid, artifact |