TPdfPageObjectSnapshotOptions = record ... end;
TPdfPageObjectSnapshotStatus = record ... end;
TPdfContentMarkSnapshot = record ... end;
TPdfPageObjectSnapshot = record ... end;
TPdfPageObjectsSnapshot = record ... end;
TPdfPageObjectSnapshot владеет каждой строкой и динамическим массивом и не содержит FPDF_PAGEOBJECT, FPDF_PAGEOBJECTMARK, дескрипторов страницы, шрифта, bitmap или текстовой страницы
Общие факты включают тип, обычные и RotatedBounds, матрицу, состояние активности, прозрачность, цвета заливки и обводки, альфу, толщину обводки, соединение линий и HasLineJoin, концы линий и HasLineCap, шаблон штрихов с DashPhase и идентификатор маркированного содержимого
Факты по типам включают количества путей и клипов через PathSegmentCount, ClipPathCount и ClipPathSegmentCount с разрешающими HasPathInfo и HasClipPath, необязательную геометрию пути и массив сегментов ClipPath, облегчённые метаданные и фильтры изображений через HasImageInfo, необязательные словари марок, текст через HasText, имена и флаги шрифтов через HasFontInfo, насыщенность, FontSize с HasFontSize и RenderMode с HasRenderMode
У каждого необязательного нативного факта есть соответствующий флаг Has..., поэтому недоступное значение остаётся отличимым от нуля или пустых данных
function ReadPageObjectsSnapshot(PageNumber: Integer; const Options: TPdfPageObjectSnapshotOptions; out Status: TPdfPageObjectSnapshotStatus): TPdfPageObjectsSnapshot;
PageNumber отсчитывается с единицы, и чтение другой страницы сохраняет активный TPdf.PageNumber
TPdfPageObjectSnapshotOptions.Default захватывает общие факты, количества путей и клипов, метаданные изображений и метаданные шрифтов, оставляя полезные данные IncludePathSegments, IncludeClipPaths, IncludeContentMarks и IncludeText отключёнными
TPdfPageObjectSnapshotOptions.Full включает сегменты путей, пути клипа, марки содержимого и текст объектов под теми же явными бюджетами
Бюджеты покрывают количество объектов через MaxObjects, MaxPathSegments, MaxClipPathSegments, MaxMarkParams, MaxTextCharacters, MaxStringBytes и истёкшее время через DeadlineMilliseconds; IncludeImageMetadata разрешает облегчённые факты об изображениях
Статус сообщает NativeObjectCount, ObjectsVisited, PathSegmentsVisited, ClipPathSegmentsVisited, MarksVisited, MarkParamsVisited, TextCharacters и StringBytes и устанавливает ObjectLimitReached, PathSegmentLimitReached, ClipPathSegmentLimitReached, MarkParamLimitReached, TextCharacterLimitReached, StringLimitReached или DeadlineReached, когда бюджет усекает результат, а MetadataFailureCount сообщает о недоступных нативных фактах, не прерывая оставшийся обход
property PageObjectsSnapshot[PageNumber: Integer]: TPdfPageObjectsSnapshot;
property PageObjectSnapshotCacheCapacity: Integer; // default 8
property PageObjectSnapshotCacheCount: Integer;
property PageObjectSnapshotCacheHitCount: Int64;
property PageObjectSnapshotCacheMissCount: Int64;
Индексируемое свойство применяет параметры по умолчанию и удерживает только полные снимки в ограниченном LRU-кэше
Каждое возвращаемое значение — глубокая копия во владении вызывающей стороны, поэтому изменение вложенных массивов штрихов, параметров марок, сегментов путей, путей клипа, фильтров или строк не может модифицировать кэшированные данные или документ
Правки страницы аннулируют соответствующую запись, а замена документа и изменения дерева страниц очищают весь кэш
Нулевая ёмкость отключает удержание, не отключая прямых ограниченных чтений
PageComplexity переиспользует этот кэш для типов объектов, количеств путей, пикселей изображений и прозрачности
var
Snapshot: TPdfPageObjectsSnapshot;
Obj: TPdfPageObjectSnapshot;
begin
Pdf.PageObjectSnapshotCacheCapacity := 16;
Snapshot := Pdf.PageObjectsSnapshot[1];
if not Snapshot.Status.Completed then
raise Exception.Create('Page object snapshot is incomplete');
for Obj in Snapshot.Objects do
if Obj.ObjectType = otImage then
IndexImage(Obj.Bounds, Obj.ImageInfo);
end;