PDFium Delphi Component Docs

TPdfProgressiveDocument Klasse

Unit: PDFium  ·  Basisklasse: TPdf
Native PDFium-Progressive-Download-Session mit sparsamer Byte-Verfügbarkeit, priorisierter Range-Planung, begrenzten Wiederholungen, Abbruch sowie Dokument-, Formular- und Seiten-Schleusen

Syntax

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

Methoden

MethodeBeschreibung
CreateErstellt die Dokumentkomponente und ihren eigenen Range-Request-Scheduler
DestroyBricht 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
CheckDocumentAvailabilityLiefert 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
CheckFormAvailabilitySchleust die Formularausfüll-Initialisierung, bis die nativen Formulardaten verfügbar sind
LoadAvailablePageSchleust und lädt eine auf 1 basierende Seite, nachdem die Formularverfügbarkeit einen Endzustand erreicht hat
CancelProgressiveLoadSchließt Seite, Formular, Dokument, Verfügbarkeits-Handle, Callbacks und Stream-Adapter in Abhängigkeitsreihenfolge

Eigenschaften und Ereignisse

MemberTypBeschreibung
ProgressiveLoadingBooleanTrue, solange die native Verfügbarkeits-Session lebt
LogicalFileSizeUInt64Vom Server oder Container gelieferte endgültige Inhaltslänge
AvailableByteCountUInt64Monoton wachsende Länge des lesbaren, zusammenhängenden Präfixes im Stream
LinearizationTPdfLinearizationNatives Linearisierungsurteil, sobald genügend Header-Bytes verfügbar sind
FirstAvailablePageNumberIntegerErste, auf 1 basierende Seite, nachdem das Dokument-Handle geöffnet ist
OnDataAvailableTPdfDataAvailableEventÜberschreibt den Präfixtest für sparsame oder ungeordnete Range-Speicher
RangeRequestsTPdfRangeRequestSchedulerEigener Scheduler, der aus jedem nativen Dokument-, Formular- und Seiten-Download-Hinweis gefüllt wird

Beschreibung

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

Beispiel

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;

Hinweise

Verwandte Typen

TPdfDataAvailability, TPdfDownloadRange, TPdfDownloadRanges, TPdfRangeRequest, TPdfRangeRequestPriority, TPdfRangeRequestStatistics, TPdfRangeRequestScheduler, TPdfDataAvailableEvent, TPdfLinearization, TPdfFormAvailability