TPdfPageObjectSnapshotOptions = record ... end;
TPdfPageObjectSnapshotStatus = record ... end;
TPdfContentMarkSnapshot = record ... end;
TPdfPageObjectSnapshot = record ... end;
TPdfPageObjectsSnapshot = record ... end;
TPdfPageObjectSnapshot is eigenaar van elke string en elke dynamische array en bevat geen FPDF_PAGEOBJECT-, FPDF_PAGEOBJECTMARK-, pagina-, font-, bitmap- of text-page-handle
Algemene feiten omvatten type, de normale bounds en RotatedBounds, matrix, actieve status, transparantie, vul- en lijnkleuren, alpha, lijndikte, line join met HasLineJoin, line cap met HasLineCap, dash-patroon met DashPhase en de marked-content ID
Type-specifieke feiten omvatten path- en clipaantallen via PathSegmentCount, ClipPathCount en ClipPathSegmentCount met de poorten HasPathInfo en HasClipPath, optionele path-geometrie en de ClipPath-segmentarray, lichtgewicht image-metadata en filters via HasImageInfo, optionele mark-dictionaries, tekst via HasText, fontnamen en -vlaggen via HasFontInfo, gewicht, FontSize met HasFontSize en RenderMode met HasRenderMode
Elk optioneel native feit heeft een bijbehorende Has...-vlag, zodat een onbeschikbare waarde onderscheiden blijft van nul of lege data
function ReadPageObjectsSnapshot(PageNumber: Integer; const Options: TPdfPageObjectSnapshotOptions; out Status: TPdfPageObjectSnapshotStatus): TPdfPageObjectsSnapshot;
PageNumber is 1-gebaseerd en het lezen van een andere pagina laat de actieve TPdf.PageNumber onaangetast
TPdfPageObjectSnapshotOptions.Default legt algemene feiten, path- en clipaantallen, image-metadata en fontmetadata vast, terwijl de payloads IncludePathSegments, IncludeClipPaths, IncludeContentMarks en IncludeText uitgeschakeld blijven
TPdfPageObjectSnapshotOptions.Full schakelt pathsegmenten, clippaden, content marks en objecttekst in, onder dezelfde expliciete budgets
Budgetten dekken het objectaantal via MaxObjects, MaxPathSegments, MaxClipPathSegments, MaxMarkParams, MaxTextCharacters, MaxStringBytes en de verstreken tijd via DeadlineMilliseconds; IncludeImageMetadata beheerst de lichtgewicht image-feiten
De status rapporteert NativeObjectCount, ObjectsVisited, PathSegmentsVisited, ClipPathSegmentsVisited, MarksVisited, MarkParamsVisited, TextCharacters en StringBytes, en zet ObjectLimitReached, PathSegmentLimitReached, ClipPathSegmentLimitReached, MarkParamLimitReached, TextCharacterLimitReached, StringLimitReached of DeadlineReached wanneer een budget het resultaat afkapt, terwijl MetadataFailureCount onbeschikbare native feiten meldt zonder de rest van de traversing af te breken
property PageObjectsSnapshot[PageNumber: Integer]: TPdfPageObjectsSnapshot;
property PageObjectSnapshotCacheCapacity: Integer; // default 8
property PageObjectSnapshotCacheCount: Integer;
property PageObjectSnapshotCacheHitCount: Int64;
property PageObjectSnapshotCacheMissCount: Int64;
De geïndexeerde eigenschap past de standaardopties toe en bewaart alleen volledige momentopnamen in een begrensde least-recently-used-cache
Elke retourwaarde is een deep copy in eigendom van de aanroeper, dus het wijzigen van geneste dash-arrays, markparameters, pathsegmenten, clippaden, filters of strings kan gecachte data of het document niet aanpassen
Paginabewerkingen maken het bijbehorende item ongeldig, terwijl het vervangen van het document en wijzigingen in de paginaboom de volledige cache legen
Een capaciteit van nul schakelt retentie uit zonder directe begrensde reads uit te sluiten
PageComplexity hergebruikt deze cache voor objecttypes, path-aantallen, imagepixels en transparantie
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;