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;
| PageNumber | Integer. Индекс страницы в загруженном документе, начиная с единицы |
| Status | TPdfTextSnapshotStatus. Признак завершения, счётчики посещений, счётчики непокрытых символов и сбоев, а также достигнутые флаги бюджетов |
| Text | WString. Извлечённый текст страницы в нативном порядке PDFium |
| Characters | Записи по символам с кодовой точкой, индексами, границами, началом координат, углом, размером шрифта, цветами и матричными фактами |
| TextObjects | Записи по текстовым объектам с диапазонами символов, именем шрифта, флагами, насыщенностью и режимом отображения |
Первое обращение к странице снимает копию с бюджетами TPdfTextSnapshotOptions.Default: один миллион символов, сто тысяч текстовых объектов и бюджет имён шрифтов в 16 МиБ. Активная страница читается через её загруженные дескрипторы, а любая другая страница транзитно загружается и закрывается, без изменения PageNumber и без вызова OnPageChange
Каждое обращение возвращает глубокую копию, поэтому изменение принадлежащей вызывающему коду строки или массива не может модифицировать кэшированный снимок или PDF
Завершённые снимки удерживаются в ограниченном кэше, который описывает TextSnapshotCacheCapacity и который учитывается в CacheBudgetBytes, причём GetStructuredText и работающий с физической компоновкой GetTextInReadingOrder используют тот же снимок
Вызов без активного документа возбуждает EPdfError, а PageNumber вне диапазона от единицы до PageCount возбуждает EPdfError с сообщением Incorrect page number
Для пользовательских бюджетов снятия копии или намеренного обхода кэша используйте ReadTextPageSnapshot
Snapshot := Pdf.TextPageSnapshot[PageNumber];
if Snapshot.Status.Completed then
LogCharacterCount(Length(Snapshot.Characters));