type TPdfProgressiveDocument = class(TPdf) ... end;
| Method | Description |
|---|---|
Create | Tworzy komponent dokumentu i należący do niego planistę żądań zakresów |
Destroy | Anuluje 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 |
CheckDocumentAvailability | Zwraca pdaAvailable, pdaNotAvailable lub pdaError oraz przekazuje scalone zakresy bajtów zażądane przez PDFium |
OpenProgressiveDocument | Otwiera PDF zlinearyzowany przez FPDFAvail_GetDocument albo w pełni odebrany PDF bez linearyzacji przez FPDF_LoadCustomDocument |
CheckFormAvailability | Wstrzymuje inicjalizację wypełniania formularzy, dopóki natywne dane formularza nie będą dostępne |
LoadAvailablePage | Bramkuje i wczytuje jedną stronę (numerowaną od 1) po osiągnięciu stanu końcowego dostępności formularza |
CancelProgressiveLoad | Zamyka stronę, formularz, dokument, uchwyt dostępności, wywołania zwrotne i adapter strumienia w kolejności zależności |
| Member | Type | Description |
|---|---|---|
ProgressiveLoading | Boolean | True, dopóki natywna sesja dostępności jest żywa |
LogicalFileSize | UInt64 | Końcowa długość zawartości podana przez serwer lub kontener |
AvailableByteCount | UInt64 | Monotoniczna długość ciągłego prefiksu już czytelnego ze strumienia |
Linearization | TPdfLinearization | Natywny werdykt linearyzacji, gdy dostępnych jest już wystarczająco dużo bajtów nagłówka |
FirstAvailablePageNumber | Integer | Pierwsza strona (numeracja od 1) po otwarciu uchwytu dokumentu |
OnDataAvailable | TPdfDataAvailableEvent | Zastępuje test prefiksu dla magazynów zakresów rzadkich lub przychodzących poza kolejnością |
RangeRequests | TPdfRangeRequestScheduler | Planista należący do klasy, zasilany każdą natywną podpowiedzią pobierania dokumentu, formularza i strony |
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
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 w PDFium ogranicza logiczny rozmiar pliku do 4 GiB, a klasa zgłasza wyjątek zamiast ucinać większy rozmiarAvailableByteCount nie może maleć, ponieważ natywny stan parsowania zakłada, że pobrane bajty pozostają dostępneEnableV8Engine przed BeginProgressiveLoad, gdy może być potrzebna obsługa XFA i V8CancelProgressiveLoad albo destrukcja obiektuCompleteRequest; zakończenie czyni zakres natychmiast widocznym dla PDFiumTStream.Position w magazynie bazowym; używaj I/O pozycjonowanego albo zewnętrznej blokady strumieniaRangeRequests.OnCancelRequest, aby przerywać aktywne operacje transportowe, gdy sesja zostaje anulowana, podpowiedź o wyższym priorytecie się z nimi nakłada albo zewnętrzne rzadkie pokrycie czyni je zbędnymiTPdfDataAvailability,
TPdfDownloadRange,
TPdfDownloadRanges,
TPdfRangeRequest,
TPdfRangeRequestPriority,
TPdfRangeRequestStatistics,
TPdfRangeRequestScheduler,
TPdfDataAvailableEvent,
TPdfLinearization,
TPdfFormAvailability