TPdfPageObjectSnapshotOptions = record ... end;
TPdfPageObjectSnapshotStatus = record ... end;
TPdfContentMarkSnapshot = record ... end;
TPdfPageObjectSnapshot = record ... end;
TPdfPageObjectsSnapshot = record ... end;
TPdfPageObjectSnapshot sở hữu mọi chuỗi và mảng động và không chứa bất kỳ handle FPDF_PAGEOBJECT, FPDF_PAGEOBJECTMARK, trang, font, bitmap hay text page nào
Các thông tin chung gồm kiểu, bounds thường và RotatedBounds, matrix, trạng thái kích hoạt, độ trong suốt, màu tô và nét, alpha, độ rộng nét, kiểu nối dòng và HasLineJoin, kiểu đầu dòng và HasLineCap, dash pattern cùng DashPhase, và marked-content ID
Thông tin riêng theo kiểu gồm số path và clip qua PathSegmentCount, ClipPathCount và ClipPathSegmentCount với các cổng HasPathInfo và HasClipPath, hình học path tùy chọn cùng mảng đoạn ClipPath, siêu dữ liệu ảnh và filter dạng nhẹ qua HasImageInfo, từ điển mark tùy chọn, văn bản qua HasText, tên và cờ font qua HasFontInfo, weight, FontSize với HasFontSize, và RenderMode với HasRenderMode
Mỗi thông tin gốc tùy chọn đều có một cờ Has... tương ứng để một giá trị không có sẵn vẫn phân biệt được với dữ liệu 0 hoặc rỗng
function ReadPageObjectsSnapshot(PageNumber: Integer; const Options: TPdfPageObjectSnapshotOptions; out Status: TPdfPageObjectSnapshotStatus): TPdfPageObjectsSnapshot;
PageNumber tính từ 1 và việc đọc một trang khác giữ nguyên TPdf.PageNumber hiện hành
TPdfPageObjectSnapshotOptions.Default chụp các thông tin chung, số path và clip, siêu dữ liệu ảnh và siêu dữ liệu font, trong khi để tắt các phần dữ liệu IncludePathSegments, IncludeClipPaths, IncludeContentMarks và IncludeText
TPdfPageObjectSnapshotOptions.Full bật path segment, clip path, content mark và văn bản của object dưới cùng các ngân sách tường minh
Ngân sách phủ số object qua MaxObjects, MaxPathSegments, MaxClipPathSegments, MaxMarkParams, MaxTextCharacters, MaxStringBytes và thời gian trôi qua qua DeadlineMilliseconds; IncludeImageMetadata điều khiển các thông tin ảnh dạng nhẹ
Status báo cáo NativeObjectCount, ObjectsVisited, PathSegmentsVisited, ClipPathSegmentsVisited, MarksVisited, MarkParamsVisited, TextCharacters và StringBytes, đồng thời đặt ObjectLimitReached, PathSegmentLimitReached, ClipPathSegmentLimitReached, MarkParamLimitReached, TextCharacterLimitReached, StringLimitReached hoặc DeadlineReached khi một ngân sách làm cụt kết quả, còn MetadataFailureCount báo cáo các thông tin gốc không lấy được mà không dừng phần duyệt còn lại
property PageObjectsSnapshot[PageNumber: Integer]: TPdfPageObjectsSnapshot;
property PageObjectSnapshotCacheCapacity: Integer; // default 8
property PageObjectSnapshotCacheCount: Integer;
property PageObjectSnapshotCacheHitCount: Int64;
property PageObjectSnapshotCacheMissCount: Int64;
Property đánh chỉ mục áp các tùy chọn mặc định và chỉ giữ lại snapshot hoàn chỉnh trong một cache least-recently-used có giới hạn
Mọi giá trị trả về là bản sao sâu thuộc sở hữu của caller, nên việc đổi dash array lồng nhau, tham số mark, đoạn path, clip path, filter hoặc chuỗi không thể làm hỏng dữ liệu cache hay tài liệu
Chỉnh sửa trang làm mất hiệu lực entry tương ứng, còn việc thay tài liệu và thay đổi page tree xóa sạch toàn bộ cache
Dung lượng 0 tắt việc giữ lại nhưng không tắt các lượt đọc có giới hạn trực tiếp
PageComplexity tái sử dụng cache này cho kiểu object, số path, số pixel ảnh và độ trong suốt
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;