type TPdfProgressiveDocument = class(TPdf) ... end;
| Method | Description |
|---|---|
Create | Vytvoří komponentu dokumentu a její vlastněný plánovač požadavků na rozsahy |
Destroy | Zruší progresivní stav před uvolněním zděděných zdrojů dokumentu |
BeginProgressiveLoad(AStream, AFileSize, AOwnsStream, AInitialAvailableByteCount) | Vytvoří nativního poskytovatele dostupnosti a drží logickou konečnou velikost odděleně od aktuálně uložených bajtů |
CheckDocumentAvailability | Vrací pdaAvailable, pdaNotAvailable nebo pdaError a vrací sloučené bajtové rozsahy vyžádané PDFiem |
OpenProgressiveDocument | Otevře linearizované PDF přes FPDFAvail_GetDocument nebo plně přijaté nelinearizované PDF přes FPDF_LoadCustomDocument |
CheckFormAvailability | Brání inicializaci vyplňování formulářů, dokud nativní data formuláře nejsou dostupná |
LoadAvailablePage | Po dosažení koncového stavu dostupnosti formuláře ubrání a načte jednu stránku číslovanou od jedničky |
CancelProgressiveLoad | Zavře stránku, formulář, dokument, handle dostupnosti, zpětná volání a adaptér streamu v pořadí závislostí |
| Member | Type | Description |
|---|---|---|
ProgressiveLoading | Boolean | True, dokud žije nativní relace dostupnosti |
LogicalFileSize | UInt64 | Konečná délka obsahu dodaná serverem nebo kontejnerem |
AvailableByteCount | UInt64 | Monotónní délka souvislého prefixu už čitelného ze streamu |
Linearization | TPdfLinearization | Nativní verdikt linearizace, jakmile je dostatek bajtů hlavičky |
FirstAvailablePageNumber | Integer | První stránka od jedničky po otevření handle dokumentu |
OnDataAvailable | TPdfDataAvailableEvent | Přepisuje test prefixu pro sparse nebo neuspořádaná úložiště rozsahů |
RangeRequests | TPdfRangeRequestScheduler | Vlastněný plánovač naplněný z každého nativního hintu stahování dokumentu, formuláře i stránky |
TPdfProgressiveDocument vlastní nativní handle FPDF_AVAIL a záznamy zpětných volání, které může PDFium během vzdáleného nebo rostoucího načítání opakovaně navštěvovat
Začněte délkou obsahu od serveru a případným počátečním prefixem, zavolejte relevantní metodu dostupnosti, vybírejte práci z RangeRequests, zapisujte každou odpověď do podkladového úložiště s náhodným přístupem, zavolejte CompleteRequest a opakujte, dokud se nevrátí koncový stav dostupnosti
Pro souvislé stahování posouvejte AvailableByteCount po zapsání nových bajtů; pro sparse mezipaměť rozsahů přiřaďte OnDataAvailable a odpovídejte, zda je každý požadovaný offset a délka čitelná
Plánovač přijímá tytéž nativní hinty vrácené starším výstupem DownloadHints, odstraňuje rozsahy už známé přes prefix nebo sparse zpětné volání, předskočí překrývající se přenosy na pozadí kvůli bajtům kritickým pro stránku bez povyšování sousedních ocasů a dělí přenosovou práci na MaxRequestSize
Linearizovaná PDF umí otevřít metadata dokumentu a první stránku dřív, než dorazí celý soubor; nelinearizovaná PDF vyžadují kompletní soubor a automaticky použijí běžný nativní nakladač vlastních streamů
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 PDFia omezuje logickou velikost souboru na 4 GiB a třída místo zkrácení větší velikosti vyvolá chybuAvailableByteCount nemůže klesnout, protože nativní stav parsování předpokládá, že stažené bajty zůstávají dostupnéBeginProgressiveLoad nastavte EnableV8Engine, když může být potřeba podpora XFA a V8CancelProgressiveLoad nebo zánik objektuCompleteRequest; dokončení učiní rozsah okamžitě viditelným pro PDFiumTStream.Position nečiní bezpečným; použijte pozicované I/O nebo externí zámek streamuRangeRequests.OnCancelRequest k přerušení aktivních přenosových operací, když je relace zrušena, překryje je hint vyšší priority, nebo je externí sparse pokrytí učiní nadbytečnýmiTPdfDataAvailability,
TPdfDownloadRange,
TPdfDownloadRanges,
TPdfRangeRequest,
TPdfRangeRequestPriority,
TPdfRangeRequestStatistics,
TPdfRangeRequestScheduler,
TPdfDataAvailableEvent,
TPdfLinearization,
TPdfFormAvailability