PDFium Delphi Component Docs

TextPageSnapshot Свойство

Компонент: TPdf  ·  Модуль: PDFium
Возвращает кэшированный ограниченный текстовый снимок одной страницы с текстом страницы, записями символов и записями текстовых объектов

Syntax

property TextPageSnapshot[PageNumber: Integer]: TPdfTextPageSnapshot; // read only

 

type TPdfTextPageSnapshot = record
  PageNumber: Integer;
  Width: Double;
  Height: Double;
  Status: TPdfTextSnapshotStatus;
  Text: WString;
  Characters: TPdfTextCharacterSnapshots;
  TextObjects: TPdfTextObjectSnapshots;
end;

PageNumberInteger. Индекс страницы в загруженном документе, начиная с единицы
StatusTPdfTextSnapshotStatus. Признак завершения, счётчики посещений, счётчики непокрытых символов и сбоев, а также достигнутые флаги бюджетов
TextWString. Извлечённый текст страницы в нативном порядке PDFium
CharactersЗаписи по символам с кодовой точкой, индексами, границами, началом координат, углом, размером шрифта, цветами и матричными фактами
TextObjectsЗаписи по текстовым объектам с диапазонами символов, именем шрифта, флагами, насыщенностью и режимом отображения

Description

Первое обращение к странице снимает копию с бюджетами TPdfTextSnapshotOptions.Default: один миллион символов, сто тысяч текстовых объектов и бюджет имён шрифтов в 16 МиБ. Активная страница читается через её загруженные дескрипторы, а любая другая страница транзитно загружается и закрывается, без изменения PageNumber и без вызова OnPageChange

Каждое обращение возвращает глубокую копию, поэтому изменение принадлежащей вызывающему коду строки или массива не может модифицировать кэшированный снимок или PDF

Завершённые снимки удерживаются в ограниченном кэше, который описывает TextSnapshotCacheCapacity и который учитывается в CacheBudgetBytes, причём GetStructuredText и работающий с физической компоновкой GetTextInReadingOrder используют тот же снимок

Remarks

Вызов без активного документа возбуждает EPdfError, а PageNumber вне диапазона от единицы до PageCount возбуждает EPdfError с сообщением Incorrect page number

Для пользовательских бюджетов снятия копии или намеренного обхода кэша используйте ReadTextPageSnapshot

Example

Snapshot := Pdf.TextPageSnapshot[PageNumber];
if Snapshot.Status.Completed then
  LogCharacterCount(Length(Snapshot.Characters));

See Also

TextSnapshotCacheCapacity, TextSnapshotCacheCount, TextPageSnapshots, GetStructuredText, TPdfView.TextPage