PDFium Delphi Component Docs

TPdfProgressiveDocument klasse

Enhed: PDFium  ·  Basisklasse: TPdf
Native PDFium progressive-download-session med sparsom byte-tilgængelighed, prioriteret range-planlægning, afgrænsede retries, annullering og gates for dokument, formular og side

Syntax

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

Methods

MethodDescription
CreateOpretter dokumentkomponenten og dens ejede range-request-scheduler
DestroyAnnullerer den progressive tilstand, før de nedarvede dokumentressourcer frigives
BeginProgressiveLoad(AStream, AFileSize, AOwnsStream, AInitialAvailableByteCount)Opretter den native availability-provider, mens den logiske endelige størrelse holdes adskilt fra de bytes, der i øjeblikket er gemt
CheckDocumentAvailabilityReturnerer pdaAvailable, pdaNotAvailable eller pdaError og returnerer flettede byte-intervaller, som PDFium har bedt om
OpenProgressiveDocumentÅbner en lineariseret PDF gennem FPDFAvail_GetDocument eller en fuldt modtaget ikke-lineariseret PDF gennem FPDF_LoadCustomDocument
CheckFormAvailabilitySpærrer formularudfyldnings-initialisering, indtil de native formulardata er tilgængelige
LoadAvailablePageSpærrer og indlæser én 1-baseret side, efter at formulartilgængeligheden har nået en terminal tilstand
CancelProgressiveLoadLukker siden, formularen, dokumentet, availability-handlen, callbacks og stream-adapteren i afhængighedsrækkefølge

Properties and events

MemberTypeDescription
ProgressiveLoadingBooleanTrue, mens den native availability-session lever
LogicalFileSizeUInt64Endelig indholdslængde leveret af serveren eller containeren
AvailableByteCountUInt64Monoton længde af det sammenhængende præfiks, der allerede kan læses fra streamen
LinearizationTPdfLinearizationNative lineariseringsdom, når der er nok header-bytes tilgængelige
FirstAvailablePageNumberInteger1-baseret første side, efter at dokumenthandlen er åbnet
OnDataAvailableTPdfDataAvailableEventOverstyrer præfiks-testen for sparsomme eller ude-af-rækkefølge range-lagre
RangeRequestsTPdfRangeRequestSchedulerEjet scheduler fyldt fra hvert native dokument-, formular- og side-download-hint

Description

TPdfProgressiveDocument ejer det native FPDF_AVAIL-handle og de callback-records, som PDFium kan vende tilbage til gennem en fjern- eller voksende stream-indlæsning

Start med serverens indholdslængde og et eventuelt indledende præfiks, kald den relevante availability-metode, hent arbejde fra RangeRequests-køen, skriv hvert svar ind i det bagvedliggende random access-lager, kald CompleteRequest og gentag, indtil en terminal tilgængelighedstilstand returneres

Ved en sammenhængende download rykkes AvailableByteCount frem efter skrivning af nye bytes; ved en sparsom range-cache tildel OnDataAvailable og svar, om hvert forespurgt offset og hver størrelse kan læses

Scheduleren accepterer de samme native hints, som returneres gennem det ældre DownloadHints-output, fjerner intervaller, der allerede er kendt gennem præfiks- eller sparse-callbacket, preemter overlappende baggrundstransfers for sidekritiske bytes uden at promovere tilstødende haler og opdeler transportarbejdet ved MaxRequestSize

Lineariserede PDF'er kan åbne deres dokumentmetadata og første side, før hele filen ankommer; ikke-lineariserede PDF'er kræver den komplette fil og bruger automatisk den almindelige native custom-stream-loader

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