PDFium Delphi Component Docs

اسنپ‌شات‌های صفحهٔ متنی

کامپوننت: TPdf  ·  واحد: PDFium
ثبت یک نمای کامل متعلق به فراخوان از یک صفحهٔ متنی نیتیو در یک گذر کراندار و استفادهٔ دوباره از اسنپ‌شات‌های کامل‌شده میان مصرف‌کننده‌های متن

Types

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... متناظری دارد تا فرادادهٔ نیتیوی غایب از یک مقدار معتبر صفر یا خالی تمیز داده شود

Bounded read

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 خود تکرار می‌کند تا پردازش صف‌شده بتواند داده و وضعیت تکمیل را با هم نگه دارد

Revision-aware cache

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) بهره می‌برند

Example

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;

See Also

GetStructuredText, GetTextInReadingOrder, Structure traversal