type TPdfProgressiveDocument = class(TPdf) ... end;
| Method | Description |
|---|---|
Create | Creează componenta de document și planificatorul său de cereri de interval |
Destroy | Anulează 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 |
CheckDocumentAvailability | Returnează pdaAvailable, pdaNotAvailable sau pdaError și furnizează intervalele de octeți fuzionate cerute de PDFium |
OpenProgressiveDocument | Deschide un PDF linearizat prin FPDFAvail_GetDocument sau un PDF neliniarizat primit complet prin FPDF_LoadCustomDocument |
CheckFormAvailability | Porți inițializarea completării formularelor până când datele native ale formularului sunt disponibile |
LoadAvailablePage | Poartă ș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 |
| Member | Type | Description |
|---|---|---|
ProgressiveLoading | Boolean | True cât timp sesiunea nativă de disponibilitate este vie |
LogicalFileSize | UInt64 | Lungimea finală a conținutului furnizată de server sau de container |
AvailableByteCount | UInt64 | Lungimea monotonică a prefixului contiguu deja lizibil din flux |
Linearization | TPdfLinearization | Verdictul nativ de linearizare de îndată ce sunt disponibili suficienti octeți de antet |
FirstAvailablePageNumber | Integer | Prima pagină, indexată de la unu, după ce handle-ul documentului este deschis |
OnDataAvailable | TPdfDataAvailableEvent | Înlocuiește testul de prefix pentru depozite de intervale sparse sau dezordonate |
RangeRequests | TPdfRangeRequestScheduler | Planificator deținut, populat din fiecare indiciu nativ de descărcare al documentului, al formularului și al paginii |
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
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;
FPDF_FILEACCESS limitează dimensiunea logică a fișierului la 4 GiB, iar clasa ridică o excepție în loc să trunchieze o dimensiune mai mareAvailableByteCount nu poate scădea deoarece starea nativă de parsare presupune că octeții descărcați rămân disponibiliEnableV8Engine înainte de BeginProgressiveLoad când este posibil să fie necesar suportul XFA și V8CancelProgressiveLoad sau distrugerea se terminăCompleteRequest; finalizarea face intervalul imediat vizibil pentru PDFiumTStream.Position suport partajat; folosiți I/O poziționat sau o blocare externă a fluxuluiRangeRequests.OnCancelRequest pentru a abandona operațiile de transport active când sesiunea este anulată, un indiciu cu prioritate mai mare le acoperă sau acoperirea externă sparse le face redundanteTPdfDataAvailability,
TPdfDownloadRange,
TPdfDownloadRanges,
TPdfRangeRequest,
TPdfRangeRequestPriority,
TPdfRangeRequestStatistics,
TPdfRangeRequestScheduler,
TPdfDataAvailableEvent,
TPdfLinearization,
TPdfFormAvailability