LoadFromRangeSource
Gestionarea documentelor, performanță
Descriere
Încarcă și selectează un PDF printr-un callback sincron de acces aleator, permițând clienților HTTP, bazelor de date, magaziilor de obiecte și furnizorilor de stocare particularizați să furnizeze doar intervalele de octeți pe care le atinge analizatorul
Sintaxă
Delphi
Function TPDFlib.LoadFromRangeSource(SourceSize: Int64;
ReadCallback: TPDFlibRangeReadEvent; Const Password: WideString;
ChunkSize: LongInt= 0; CacheLimitBytes: Int64= 0;
CoalesceWindowMS: Cardinal= PDF_NET_DEFAULT_COALESCE_WINDOW_MS;
AvailabilityCallback: TPDFlibRangeAvailabilityEvent= Nil): Integer;Parametri
| SourceSize | Dimensiunea totală autoritativă a sursei, în octeți |
|---|---|
| ReadCallback | Callback-ul care copiază octeții pentru un decalaj absolut al sursei |
| Password | Parola folosită pentru deschiderea PDF-ului, sau un șir gol pentru un document necriptat |
| ChunkSize | Granularitatea aliniată a preluărilor de intervale; zero selectează valoarea implicită de 64 KiB, iar valorile sub 4096 folosesc și ele valoarea implicită |
| CacheLimitBytes | Numărul maxim de octeți reținuți peste ferestrele cele mai puțin recent utilizate; zero selectează valoarea implicită de 4 MiB, iar valorile sub un chunk sunt ridicate la un chunk |
| CoalesceWindowMS | Fereastra de agregare pentru primul chunk necache-at al fiecărei citiri absolute; 2 milisecunde este valoarea implicită, iar zero dezactivează întârzierea inițială |
| AvailabilityCallback | Un test opțional, fără preluare, al intervalelor de octeți deja prezente în stocarea progresivă |
Valori returnate
| 0 | Argumentele sursei au fost invalide sau PDF-ul nu a putut fi încărcat; examinați LastErrorCode |
|---|---|
| 1 | Documentul a fost încărcat și selectat |
Observații
Callback-ul de citire primește decalaje absolute de la 0 și nu trebuie să scrie mai mult de Count octeți în Buffer, returnând numărul scrisȚinta callback-ului și stocarea sa de suport trebuie să rămână valide până la închiderea documentului încărcat, deoarece randarea paginilor, extragerea și salvarea pot cere intervale suplimentare mai târziuApelurile sunt sincrone și pot sosi în ordine nesevențială; un rezultat parțial este acceptat la sfârșitul fizic al sursei, în timp ce un rezultat zero neașteptat face ca încărcarea sau operația amânată curentă să eșuezeCând
AvailabilityCallback este atribuit, returnați o valoare nenulă doar când întregul interval cerut poate fi citit imediat, fără transport sau I/O blocantUn interval din cache este disponibil indiferent de rezultatul callback-ului; un callback
Nil păstrează comportamentul sincron prin tratarea fiecărui interval valid de sursă ca disponibilChunkurile aliniate evită preluările duplicate de transport pentru citirile suprapuse, în timp ce bugetul de octeți mărginește sarcina utilă reținută independent de dimensiunea documentuluiCitirile amânate de obiecte și de segmente folosesc decalaje absolute, astfel încât lucrările concurente partajează cererile pentru același chunk și contopesc chunkurile adiacente aflate în coadă, fără a modifica cursorul pozițional al fluxuluiCallback-urile sursei sunt serializate și nu trebuie să citească recursiv din același flux de intervaleFolosiți
GetRangeSourceDataAvailability
GetRangeSourceCacheInfo pentru a testa dependențele de pagină, de formular sau de obiecte indirecte, fără a citi intervalele raportate ca lipsăFolosiți SetRangeSourceCacheLimit, ClearRangeSourceCache și