TPdfPageObjectSnapshotOptions = record ... end;
TPdfPageObjectSnapshotStatus = record ... end;
TPdfContentMarkSnapshot = record ... end;
TPdfPageObjectSnapshot = record ... end;
TPdfPageObjectsSnapshot = record ... end;
Το TPdfPageObjectSnapshot κατέχει κάθε string και δυναμικό πίνακα και δεν περιέχει handle FPDF_PAGEOBJECT, FPDF_PAGEOBJECTMARK, σελίδας, γραμματοσειράς, bitmap ή σελίδας κειμένου
Συνηθισμένα στοιχεία είναι ο τύπος, τα κανονικά και RotatedBounds όρια, ο matrix, η ενεργή κατάσταση, η διαφάνεια, τα χρώματα γεμίσματος και περιγράμματος, το alpha, το πλάτος περιγράμματος, η ένωση γραμμής και το HasLineJoin, το άκρο γραμμής και το HasLineCap, το μοτίβο dash με DashPhase και το marked-content ID
Στοιχεία ανά τύπο περιλαμβάνουν πλήθη διαδρομής και clip μέσω PathSegmentCount, ClipPathCount και ClipPathSegmentCount με τις πύλες HasPathInfo και HasClipPath, προαιρετική γεωμετρία διαδρομής και τον πίνακα τμημάτων ClipPath, ελαφριά μεταδεδομένα και φίλτρα εικόνας μέσω HasImageInfo, προαιρετικά λεξικά mark, κείμενο μέσω HasText, ονόματα και σημαίες γραμματοσειράς μέσω HasFontInfo, βάρος, FontSize με HasFontSize και RenderMode με HasRenderMode
Κάθε προαιρετικό εγγενές στοιχείο έχει αντίστοιχη σημαία Has..., ώστε μια μη διαθέσιμη τιμή να παραμένει διακριτή από μηδενικά ή κενά δεδομένα
function ReadPageObjectsSnapshot(PageNumber: Integer; const Options: TPdfPageObjectSnapshotOptions; out Status: TPdfPageObjectSnapshotStatus): TPdfPageObjectsSnapshot;
Το PageNumber είναι βάσης ένα και η ανάγνωση άλλης σελίδας διατηρεί το ενεργό TPdf.PageNumber
Το TPdfPageObjectSnapshotOptions.Default καταγράφει συνηθισμένα στοιχεία, πλήθη διαδρομής και clip, μεταδεδομένα εικόνας και μεταδεδομένα γραμματοσειράς, αφήνοντας τα payloads IncludePathSegments, IncludeClipPaths, IncludeContentMarks και IncludeText ανενεργά
Το TPdfPageObjectSnapshotOptions.Full ενεργοποιεί τμήματα διαδρομής, clip paths, content marks και κείμενο αντικειμένων υπό τους ίδιους ρητούς προϋπολογισμούς
Οι προϋπολογισμοί καλύπτουν πλήθος αντικειμένων μέσω 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;
Η indexed ιδιότητα εφαρμόζει προεπιλεγμένες επιλογές και διατηρεί μόνο ολοκληρωμένα στιγμιότυπα σε μια οριοθετημένη cache λιγότερο πρόσφατης χρήσης
Κάθε επιστρεφόμενη τιμή είναι βαθύ αντίγραφο με ιδιοκτησία του καλούντα, οπότε η αλλαγή εμφωλευμένων dash arrays, παραμέτρων mark, τμημάτων διαδρομής, clip paths, φίλτρων ή strings δεν μπορεί να τροποποιήσει δεδομένα cache ή το έγγραφο
Οι επεξεργασίες σελίδας ακυρώνουν την αντίστοιχη εγγραφή, ενώ η αντικατάσταση εγγράφου και οι αλλαγές στο δέντρο σελίδων αδειάζουν την ολόκληρη cache
Χωρητικότητα μηδέν απενεργοποιεί τη διατήρηση χωρίς να απενεργοποιεί τις άμεσες οριοθετημένες αναγνώσεις
Το PageComplexity επαναχρησιμοποιεί αυτή την cache για τύπους αντικειμένων, πλήθη διαδρομών, pixels εικόνων και διαφάνεια
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;