PDFium Delphi Component Docs

Снимки объектов страницы

Компонент: TPdf  ·  Модуль: PDFium
Захватывайте факты об объектах страницы во владении вызывающей стороны один раз для потребителей анализа, preflight и экспорта, не удерживая нативных дескрипторов

Types

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..., поэтому недоступное значение остаётся отличимым от нуля или пустых данных

Bounded read

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 сообщает о недоступных нативных фактах, не прерывая оставшийся обход

Revision-aware cache

property PageObjectsSnapshot[PageNumber: Integer]: TPdfPageObjectsSnapshot;

property PageObjectSnapshotCacheCapacity: Integer; // default 8

property PageObjectSnapshotCacheCount: Integer;

property PageObjectSnapshotCacheHitCount: Int64;

property PageObjectSnapshotCacheMissCount: Int64;

Индексируемое свойство применяет параметры по умолчанию и удерживает только полные снимки в ограниченном LRU-кэше

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

Правки страницы аннулируют соответствующую запись, а замена документа и изменения дерева страниц очищают весь кэш

Нулевая ёмкость отключает удержание, не отключая прямых ограниченных чтений

PageComplexity переиспользует этот кэш для типов объектов, количеств путей, пикселей изображений и прозрачности

Example

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;

See Also

PageObjectInfo, PathInfo, PageObjectClipPath, Снимки текстовых страниц