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

См. также:

 Русский