type TPdfProgressiveDocument = class(TPdf) ... end;
| Methode | Beschreibung |
|---|---|
Create | Erstellt die Dokumentkomponente und ihren eigenen Range-Request-Scheduler |
Destroy | Bricht den progressiven Zustand ab, bevor die geerbten Dokumentressourcen freigegeben werden |
BeginProgressiveLoad(AStream, AFileSize, AOwnsStream, AInitialAvailableByteCount) | Erstellt den nativen Verfügbarkeits-Provider und hält dabei die logische Endgröße getrennt von den aktuell gespeicherten Bytes |
CheckDocumentAvailability | Liefert pdaAvailable, pdaNotAvailable oder pdaError und gibt zusammengeführte Byte-Bereiche zurück, die PDFium angefordert hat |
OpenProgressiveDocument | Öffnet ein linearisiertes PDF über FPDFAvail_GetDocument oder ein vollständig empfangenes, nicht linearisiertes PDF über FPDF_LoadCustomDocument |
CheckFormAvailability | Schleust die Formularausfüll-Initialisierung, bis die nativen Formulardaten verfügbar sind |
LoadAvailablePage | Schleust und lädt eine auf 1 basierende Seite, nachdem die Formularverfügbarkeit einen Endzustand erreicht hat |
CancelProgressiveLoad | Schließt Seite, Formular, Dokument, Verfügbarkeits-Handle, Callbacks und Stream-Adapter in Abhängigkeitsreihenfolge |
| Member | Typ | Beschreibung |
|---|---|---|
ProgressiveLoading | Boolean | True, solange die native Verfügbarkeits-Session lebt |
LogicalFileSize | UInt64 | Vom Server oder Container gelieferte endgültige Inhaltslänge |
AvailableByteCount | UInt64 | Monoton wachsende Länge des lesbaren, zusammenhängenden Präfixes im Stream |
Linearization | TPdfLinearization | Natives Linearisierungsurteil, sobald genügend Header-Bytes verfügbar sind |
FirstAvailablePageNumber | Integer | Erste, auf 1 basierende Seite, nachdem das Dokument-Handle geöffnet ist |
OnDataAvailable | TPdfDataAvailableEvent | Überschreibt den Präfixtest für sparsame oder ungeordnete Range-Speicher |
RangeRequests | TPdfRangeRequestScheduler | Eigener Scheduler, der aus jedem nativen Dokument-, Formular- und Seiten-Download-Hinweis gefüllt wird |
TPdfProgressiveDocument besitzt das native FPDF_AVAIL-Handle und die Callback-Datensätze, die PDFium während eines Remote- oder wachsenden Stream-Ladevorgangs jederzeit erneut besuchen kann
Beginnen Sie mit der Inhaltslänge des Servers und einem eventuellen Anfangs-Präfix, rufen Sie die relevante Verfügbarkeitsmethode auf, entnehmen Sie Arbeit aus RangeRequests, schreiben Sie jede Antwort in den zugrunde liegenden Random-Access-Speicher, rufen Sie CompleteRequest auf und wiederholen Sie dies, bis ein endgültiger Verfügbarkeitszustand zurückkommt
Für einen zusammenhängenden Download erhöhen Sie AvailableByteCount nach dem Schreiben neuer Bytes; für einen sparsamen Range-Cache weisen Sie OnDataAvailable zu und beantworten Sie, ob jeder angeforderte Offset und jede Größe lesbar ist
Der Scheduler akzeptiert dieselben nativen Hinweise, die über die ältere DownloadHints-Ausgabe zurückkommen, entfernt bereits über das Präfix oder den Sparse-Callback bekannte Bereiche, verdrängt überlappende Hintergrundübertragungen zugunsten seitenkritischer Bytes, ohne angrenzende Enden hochzustufen, und zerschneidet Transportarbeit an MaxRequestSize
Linearisierte PDFs können ihre Dokumentmetadaten und erste Seite öffnen, bevor die gesamte Datei ankommt; nicht linearisierte PDFs benötigen die vollständige Datei und verwenden automatisch den normalen native Custom-Stream-Loader
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-ABI begrenzt die logische Dateigröße auf 4 GiB, und die Klasse löst einen Fehler aus, statt eine größere Größe zu stutzenAvailableByteCount kann nicht sinken, weil der native Parse-Zustand davon ausgeht, dass heruntergeladene Bytes verfügbar bleibenEnableV8Engine vor BeginProgressiveLoad, wenn XFA- und V8-Unterstützung benötigt werden könnteCancelProgressiveLoad oder die Zerstörung abgeschlossen istCompleteRequest aufrufen; der Abschluss macht den Bereich sofort für PDFium sichtbarTStream.Position nicht sicher; verwenden Sie positionierte E/A oder eine externe Stream-SperreRangeRequests.OnCancelRequest zu, um aktive Transportoperationen abzubrechen, wenn die Session abgebrochen wird, ein hinweis höherer Priorität sie überlappt oder externe sparsame Abdeckung sie überflüssig machtTPdfDataAvailability,
TPdfDownloadRange,
TPdfDownloadRanges,
TPdfRangeRequest,
TPdfRangeRequestPriority,
TPdfRangeRequestStatistics,
TPdfRangeRequestScheduler,
TPdfDataAvailableEvent,
TPdfLinearization,
TPdfFormAvailability