PDFium Delphi Component Docs

Clasa TPdfProgressiveDocument

Unit: PDFium  ·  Base class: TPdf
Sesiune nativă de descărcare progresivă PDFium, cu disponibilitate sparse a octeților, planificare prioritară a intervalelor, reîncercări limitate, anulare și porți pentru document, formular și pagină

Syntax

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

Methods

MethodDescription
CreateCreează componenta de document și planificatorul său de cereri de interval
DestroyAnulează starea progresivă înainte de a elibera resursele moștenite ale documentului
BeginProgressiveLoad(AStream, AFileSize, AOwnsStream, AInitialAvailableByteCount)Creează furnizorul nativ de disponibilitate, menținând dimensiunea finală logică separată de octeții stocați în prezent
CheckDocumentAvailabilityReturnează pdaAvailable, pdaNotAvailable sau pdaError și furnizează intervalele de octeți fuzionate cerute de PDFium
OpenProgressiveDocumentDeschide un PDF linearizat prin FPDFAvail_GetDocument sau un PDF neliniarizat primit complet prin FPDF_LoadCustomDocument
CheckFormAvailabilityPorți inițializarea completării formularelor până când datele native ale formularului sunt disponibile
LoadAvailablePagePoartă și încarcă o pagină indexată de la unu după ce disponibilitatea formularului a atins o stare terminală
CancelProgressiveLoadÎnchide pagina, formularul, documentul, handle-ul de disponibilitate, callback-urile și adaptorul de flux în ordinea dependențelor

Properties and events

MemberTypeDescription
ProgressiveLoadingBooleanTrue cât timp sesiunea nativă de disponibilitate este vie
LogicalFileSizeUInt64Lungimea finală a conținutului furnizată de server sau de container
AvailableByteCountUInt64Lungimea monotonică a prefixului contiguu deja lizibil din flux
LinearizationTPdfLinearizationVerdictul nativ de linearizare de îndată ce sunt disponibili suficienti octeți de antet
FirstAvailablePageNumberIntegerPrima pagină, indexată de la unu, după ce handle-ul documentului este deschis
OnDataAvailableTPdfDataAvailableEventÎnlocuiește testul de prefix pentru depozite de intervale sparse sau dezordonate
RangeRequestsTPdfRangeRequestSchedulerPlanificator deținut, populat din fiecare indiciu nativ de descărcare al documentului, al formularului și al paginii

Description

TPdfProgressiveDocument deține handle-ul nativ FPDF_AVAIL și înregistrările de callback pe care PDFium le poate revedea pe parcursul unei încărcări de la distanță sau dintr-un flux în creștere

Porniți cu lungimea conținutului de la server și orice prefix inițial, apelați metoda de disponibilitate relevantă, scoateți sarcini din coada RangeRequests, scrieți fiecare răspuns în depozitul suport cu acces aleator, apelați CompleteRequest și repetați până se returnează o stare terminală de disponibilitate

Pentru o descărcare contiguu, avansați AvailableByteCount după scrierea octeților noi; pentru un cache de intervale sparse, atribuiți OnDataAvailable și răspundeți dacă fiecare offset și dimensiune cerută este lizibilă

Planificatorul acceptă aceleași indicii native returnate prin ieșirea învechită DownloadHints, elimină intervalele deja cunoscute prin callback-ul de prefix sau sparse, preemptează transferurile de fundal care se suprapun pentru octeții critici ai paginii fără a promova cozile adiacente și împarte munca de transport la MaxRequestSize

PDF-urile linearizate își pot deschide metadatele documentului și prima pagină înainte ca tot fișierul să sosească; PDF-urile neliniarizate cer fișierul complet și folosesc automat loader-ul nativ obișnuit pentru fluxuri personalizate

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