PDFium Delphi Component Docs

คลาส TPdfProgressiveDocument

Unit: PDFium  ·  Base class: TPdf
session ดาวน์โหลด progressive ดั้งเถิมของ PDFium ที่มีความพร้อมแบบ sparse รายไบต์ การจัดตารางช่วงตามลำดับความสำคัญ การลองซ้ำแบบมีขอบเขต การยกเลิก และประตูกั้นระดับเอกสาร ฟอร์ม และหน้า

Syntax

type TPdfProgressiveDocument = class(TPdf) ... end;

Methods

MethodDescription
Createสร้างคอมโพเนนต์เอกสารพร้อม scheduler ขอ range request ที่ตนเป็นเจ้าของ
Destroyยกเลิกสถานะ progressive ก่อนคืนทรัพยากรเอกสารที่สืบทอดมา
BeginProgressiveLoad(AStream, AFileSize, AOwnsStream, AInitialAvailableByteCount)สร้าง availability provider ดั้งเถิม โดยแยกขนาดตรรกะสุดท้ายออกจากไบต์ที่มีอยู่จริง ณ ขณะนั้น
CheckDocumentAvailabilityคืน pdaAvailable, pdaNotAvailable หรือ pdaError พร้อมคืนช่วงไบต์ที่รวมกันแล้วซึ่ง PDFium ร้องขอ
OpenProgressiveDocumentเปิด PDF แบบ linearized ผ่าน FPDFAvail_GetDocument หรือเปิด PDF แบบไม่ linearized ที่รับมาครบแล้วผ่าน FPDF_LoadCustomDocument
CheckFormAvailabilityกั้นการเตรียมฟอร์มให้ทำได้เมื่อข้อมูลฟอร์มดั้งเถิมพร้อมใช้แล้วเท่านั้น
LoadAvailablePageกั้นและโหลดหน้าแบบนับจาก 1 หนึ่งหน้า หลังสถานะความพร้อมของฟอร์มไปถึงจุดสุดทาง
CancelProgressiveLoadปิดหน้า ฟอร์ม เอกสาร availability handle, callback และ stream adapter ตามลำดับการพึ่งพิง

Properties and events

MemberTypeDescription
ProgressiveLoadingBooleanเป็น True ขณะ session availability ดั้งเถิมยังมีชีวิตอยู่
LogicalFileSizeUInt64ความยาวเนื้อหาสุดท้ายที่เซิร์ฟเวอร์หรือคอนเทนเนอร์แจ้งมา
AvailableByteCountUInt64ความยาวแบบ monotonic ของ prefix ต่อเนื่องที่อ่านได้จาก stream แล้ว
LinearizationTPdfLinearizationผลตัดสิน linearization ดั้งเถิม เมื่อไบต์ส่วนหัวมีมากพอแล้ว
FirstAvailablePageNumberIntegerหน้าแรกแบบนับจาก 1 หลัง handle เอกสารถูกเปิด
OnDataAvailableTPdfDataAvailableEventแทนที่การทดสอบ prefix สำหรับที่เก็บช่วงแบบ sparse หรือเก็บสับลำดับ (out-of-order)
RangeRequestsTPdfRangeRequestSchedulerscheduler ที่ตนเป็นเจ้าของ ซึ่งถูกป้อนจาก hint การดาวน์โหลดระดับเอกสาร ฟอร์ม และหน้า ทุกชุดที่ดั้งเถิมแจ้งมา

Description

TPdfProgressiveDocument เป็นเจ้าของ handle FPDF_AVAIL ดั้งเถิมและเรกคอร์ด callback ที่ PDFium อาจกลับมาใช้ซ้ำตลอดช่วงการโหลดจากระยะไกลหรือจาก stream ที่กำลังโต

เริ่มจากความยาวเนื้อหาของเซิร์ฟเวอร์และ prefix เริ่มต้นถ้ามี เรียกเมธอดตรวจความพร้อมที่เกี่ยวข้อง ดึงงานออกจาก RangeRequests เขียนคำตอบแต่ละชุดลงที่เก็บแบบ random access ที่รองอยู่ เรียก CompleteRequest แล้วทำซ้ำจนได้รับสถานะความพร้อมแบบสุดทาง

สำหรับการดาวน์โหลดต่อเนื่อง ให้เดิน AvailableByteCount ไปข้างหน้าหลังเขียนไบต์ใหม่ ส่วนแคชช่วงแบบ sparse ให้กำหนด OnDataAvailable แล้วตอบว่าออฟเซตกับขนาดที่ร้องขอแต่ละชุดอ่านได้หรือไม่

scheduler รับ hint ดั้งเถิมชุดเดียวกับที่คืนผ่านเอาต์พุต DownloadHints รุ่นเดิม ตัดช่วงที่รู้แล้วผ่าน prefix หรือ callback แบบ sparse ออก preempt การถ่ายโอนพื้นหลังที่ทับซ้อนกันเพื่อไบต์วิกฤตของหน้าโดยไม่ลากหางติดกันมาด้วย และแบ่งงานขนส่งที่ MaxRequestSize

PDF แบบ linearized เปิด metadata ของเอกสารและหน้าแรกได้ก่อนไฟล์ทั้งไฟล์จะมาถึง ส่วน PDF แบบไม่ linearized ต้องมีไฟล์ครบ และจะใช้ loader custom-stream ดั้งเถิมปกติโดยอัตโนมัติ

Example

var
  Hints: TPdfDownloadRanges;
  Request: TPdfRangeRequest;
  State: TPdfDataAvailability;
begin
  Progressive.BeginProgressiveLoad(CacheStream, ContentLength,
    False, InitialPrefixLength);
  repeat
    State := Progressive.CheckDocumentAvailability(Hints);
    while Progressive.RangeRequests.TryDequeue(Request) do
    begin
      FetchRangeIntoCache(Request.Offset, Request.Size);
      Progressive.RangeRequests.CompleteRequest(Request);
    end;
  until State <> pdaNotAvailable;
  if State = pdaAvailable then
    Progressive.OpenProgressiveDocument;
end;

Remarks

Related types

TPdfDataAvailability, TPdfDownloadRange, TPdfDownloadRanges, TPdfRangeRequest, TPdfRangeRequestPriority, TPdfRangeRequestStatistics, TPdfRangeRequestScheduler, TPdfDataAvailableEvent, TPdfLinearization, TPdfFormAvailability