TPdfTextSnapshotOptions = record ... end;
TPdfTextSnapshotStatus = record ... end;
TPdfTextCharacterSnapshot = record ... end;
TPdfTextCharacterSnapshots = array of TPdfTextCharacterSnapshot;
TPdfTextObjectSnapshot = record ... end;
TPdfTextObjectSnapshots = array of TPdfTextObjectSnapshot;
TPdfTextPageSnapshot = record ... end;
TPdfTextPageSnapshot مالک Text، آرایهٔ Characters و آرایهٔ نرمالشدهٔ TextObjects خودش است و هرگز دستهٔ نیتیو صفحه، صفحهٔ متنی، فونت یا شیء صفحه را افشا نمیکند
هر TPdfTextCharacterSnapshot Index نویسهٔ PDFium، اسکالر Unicode، TextIndex و TextLength با کدگذاری UTF-16، پرچمهای Generated و IsHyphen، وضعیت نگاشت از طریق UnicodeMapError، کرانهای سختگیرانه و آزاد، Origin و Angle همراه پرچمهای HasOrigin و HasAngle، FontSize با HasFontSize، رنگ پر و خط، آلفا، ماتریس و یک TextObjectIndex محلی-اسنپشات را با خود حمل میکند
هر TPdfTextObjectSnapshot نمایانگر یک شیء متنی نیتیوی متمایز است و FirstCharacterIndex، شمار نویسهها، نام فونت و پرچمها از طریق HasFontInfo، FontWeight با HasFontWeight و RenderMode با HasRenderMode را حمل میکند
هر واقعیت اختیاری پرچم Has... متناظری دارد تا فرادادهٔ نیتیوی غایب از یک مقدار معتبر صفر یا خالی تمیز داده شود
function ReadTextPageSnapshot(PageNumber: Integer; const Options: TPdfTextSnapshotOptions; out Status: TPdfTextSnapshotStatus): TPdfTextPageSnapshot;
PageNumber یک-مبناست و خواندن صفحهای غیر از صفحهٔ فعلی TPdf.PageNumber را عوض نمیکند
TPdfTextSnapshotOptions.Default یک میلیون MaxCharacters، صد هزار MaxTextObjects، ۱۶ MB بافر نام فونت با کدگذاری UTF-8 از طریق MaxFontNameBytes و بدون DeadlineMilliseconds را اجازه میدهد
وضعیت Completed، NativeCharacterCount، CharactersVisited، TextObjectsVisited، FontNameBytes، شمارندههای نگاشتنشده و شکست، و پرچمهای برش CharacterLimitReached، TextObjectLimitReached، FontNameLimitReached و DeadlineReached را با خود حمل میکند
Status.Completed وقتی بودجهٔ نویسه، شیء، نام فونت یا مهلت نتیجه را قطع کند False است
GeometryFailureCount و MetadataFailureCount واقعیتهای در دسترسنبودن بهازای هر نویسه یا هر شیء را میشمارند بدون آنکه ادامهٔ پیمایش را قطع کنند
رکورد بازگرداندهشده همان وضعیت را در فیلد Status خود تکرار میکند تا پردازش صفشده بتواند داده و وضعیت تکمیل را با هم نگه دارد
property TextPageSnapshot[PageNumber: Integer]: TPdfTextPageSnapshot;
property TextSnapshotCacheCapacity: Integer; // default 8
property TextSnapshotCacheCount: Integer;
property TextSnapshotCacheHitCount: Int64;
property TextSnapshotCacheMissCount: Int64;
ویژگی اندیسی بودجههای پیشفرض را اعمال میکند و فقط اسنپشاتهای کاملشده را در یک کش کراندار کماستفادهترین (LRU) ذخیره میکند
هر مقدار بازگرداندهشده یک کپی عمیق است، بنابراین تغییر رشته یا آرایهٔ متعلق به فراخوان نمیتواند اسنپشات کششده یا PDF را دستکاری کند
ویرایش صفحه همان صفحه را باطل میکند، در حالی که جایگزینی سند و تغییرهای درخت صفحه کل کش را خالی میکنند
ظرفیت صفر نگهداشتن را از کار میاندازد بدون آنکه خواندنهای مستقیم اسنپشات از کار بیفتد
GetStructuredText و GetTextInReadingOrder با چیدمان فیزیکی از همین اسنپشات استفاده میکنند و برای ترتیب چیدمان از مرتبسازی هندسی O(n log n) بهره میبرند
var
Snapshot: TPdfTextPageSnapshot;
Character: TPdfTextCharacterSnapshot;
begin
Pdf.TextSnapshotCacheCapacity := 16;
Snapshot := Pdf.TextPageSnapshot[1];
if not Snapshot.Status.Completed then
raise Exception.Create('Text snapshot is incomplete');
for Character in Snapshot.Characters do
if Character.HasBounds and Character.HasUnicode then
IndexCharacter(Character.CodePoint, Character.Bounds);
end;