PDFium Component Docs

TPdfProgressiveDocument klasa

Unit: PDFium  ·  Base class: TPdf
Natywna sesja pobierania progresywnego PDFium z rzadką dostępnością bajtów, priorytetyzowanym planowaniem zakresów, ograniczonymi ponowieniami, anulowaniem oraz bramkami dokumentu, formularza i strony

Syntax

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

Methods

MethodDescription
CreateTworzy komponent dokumentu i należący do niego planistę żądań zakresów
DestroyAnuluje stan progresywny przed zwolnieniem odziedziczonych zasobów dokumentu
BeginProgressiveLoad(AStream, AFileSize, AOwnsStream, AInitialAvailableByteCount)Tworzy natywnego dostawcę dostępności, utrzymując logiczny rozmiar końcowy osobno od bajtów aktualnie zapisanych
CheckDocumentAvailabilityZwraca pdaAvailable, pdaNotAvailable lub pdaError oraz przekazuje scalone zakresy bajtów zażądane przez PDFium
OpenProgressiveDocumentOtwiera PDF zlinearyzowany przez FPDFAvail_GetDocument albo w pełni odebrany PDF bez linearyzacji przez FPDF_LoadCustomDocument
CheckFormAvailabilityWstrzymuje inicjalizację wypełniania formularzy, dopóki natywne dane formularza nie będą dostępne
LoadAvailablePageBramkuje i wczytuje jedną stronę (numerowaną od 1) po osiągnięciu stanu końcowego dostępności formularza
CancelProgressiveLoadZamyka stronę, formularz, dokument, uchwyt dostępności, wywołania zwrotne i adapter strumienia w kolejności zależności

Properties and events

MemberTypeDescription
ProgressiveLoadingBooleanTrue, dopóki natywna sesja dostępności jest żywa
LogicalFileSizeUInt64Końcowa długość zawartości podana przez serwer lub kontener
AvailableByteCountUInt64Monotoniczna długość ciągłego prefiksu już czytelnego ze strumienia
LinearizationTPdfLinearizationNatywny werdykt linearyzacji, gdy dostępnych jest już wystarczająco dużo bajtów nagłówka
FirstAvailablePageNumberIntegerPierwsza strona (numeracja od 1) po otwarciu uchwytu dokumentu
OnDataAvailableTPdfDataAvailableEventZastępuje test prefiksu dla magazynów zakresów rzadkich lub przychodzących poza kolejnością
RangeRequestsTPdfRangeRequestSchedulerPlanista należący do klasy, zasilany każdą natywną podpowiedzią pobierania dokumentu, formularza i strony

Description

TPdfProgressiveDocument jest właścicielem natywnego uchwytu FPDF_AVAIL oraz rekordów wywołań zwrotnych, do których PDFium może wracać przez cały czas ładowania zdalnego lub rosnącego strumienia

Zacznij od długości zawartości po stronie serwera i ewentualnego początkowego prefiksu, wywołaj właściwą metodę dostępności, pobieraj zadania z RangeRequests, zapisuj każdą odpowiedź w bazowym magazynie o dostępie swobodnym, wywołuj CompleteRequest i powtarzaj, aż zostanie zwrócony końcowy stan dostępności

Przy pobieraniu ciągłym przesuwaj AvailableByteCount po zapisaniu nowych bajtów; przy pamięci podręcznej rzadkich zakresów podepnij OnDataAvailable i odpowiadaj, czy każde żądane przesunięcie i rozmiar są czytelne

Planista przyjmuje te same natywne podpowiedzi, które zwraca starsze wyjście DownloadHints, usuwa zakresy już znane z prefiksu lub rzadkiego wywołania zwrotnego, wywłaszcza nakładające się transfery w tle dla bajtów krytycznych dla strony bez awansowania przyległych ogonów oraz dzieli pracę transportową według MaxRequestSize

PDF-y zlinearyzowane mogą otworzyć metadane dokumentu i pierwszą stronę, zanim dotrze cały plik; PDF-y bez linearyzacji wymagają kompletnego pliku i automatycznie używają zwykłego natywnego loadera strumienia niestandardowego

Example

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;

Remarks

Related types

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