PDFium Delphi Component Docs

Classe TPdfProgressiveDocument

Unidade: PDFium  ·  Classe base: TPdf
Sessão nativa de transferência progressiva do PDFium com disponibilidade esparsa de bytes, agendamento de intervalos com prioridades, repetições limitadas, cancelamento e controlos de documento, formulário e página

Syntax

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

Methods

MétodoDescrição
CreateCria o componente de documento e o agendador de pedidos de intervalos que lhe pertence
DestroyCancela o estado progressivo antes de libertar os recursos herdados do documento
BeginProgressiveLoad(AStream, AFileSize, AOwnsStream, AInitialAvailableByteCount)Cria o fornecedor nativo de disponibilidade mantendo o tamanho lógico final separado dos bytes atualmente armazenados
CheckDocumentAvailabilityDevolve pdaAvailable, pdaNotAvailable ou pdaError e devolve os intervalos de bytes fundidos pedidos pelo PDFium
OpenProgressiveDocumentAbre um PDF linearizado através de FPDFAvail_GetDocument ou um PDF não linearizado totalmente recebido através de FPDF_LoadCustomDocument
CheckFormAvailabilityControla a inicialização do preenchimento de formulários até os dados nativos do formulário estarem disponíveis
LoadAvailablePageControla e carrega uma página com numeração base 1 depois de a disponibilidade do formulário atingir um estado terminal
CancelProgressiveLoadFecha a página, o formulário, o documento, o handle de disponibilidade, os callbacks e o adaptador de stream por ordem de dependência

Properties and events

MembroTipoDescrição
ProgressiveLoadingBooleanTrue enquanto a sessão nativa de disponibilidade estiver viva
LogicalFileSizeUInt64Comprimento final do conteúdo fornecido pelo servidor ou pelo contentor
AvailableByteCountUInt64Comprimento monótono do prefixo contíguo já legível a partir do stream
LinearizationTPdfLinearizationVeredicto nativo de linearização quando bytes de cabeçalho suficientes estão disponíveis
FirstAvailablePageNumberIntegerPrimeira página, com numeração base 1, depois de o handle do documento estar aberto
OnDataAvailableTPdfDataAvailableEventSubstitui o teste de prefixo para armazenamentos de intervalos esparsos ou fora de ordem
RangeRequestsTPdfRangeRequestSchedulerAgendador proprietário preenchido a partir de todas as sugestões nativas de transferência de documento, formulário e página

Description

TPdfProgressiveDocument é proprietário do handle nativo FPDF_AVAIL e dos registos de callback que o PDFium pode revisitar ao longo de um carregamento remoto ou de um stream em crescimento

Comece com o comprimento do conteúdo do servidor e qualquer prefixo inicial, chame o método de disponibilidade relevante, retire trabalho de RangeRequests, escreva cada resposta no armazenamento de acesso aleatório subjacente, chame CompleteRequest e repita até ser devolvido um estado de disponibilidade terminal

Para uma transferência contígua, avance AvailableByteCount depois de escrever bytes novos; para uma cache esparsa de intervalos, atribua OnDataAvailable e responda se cada offset e tamanho pedidos são legíveis

O agendador aceita as mesmas sugestões nativas devolvidas através da saída legada DownloadHints, remove intervalos já conhecidos através do callback de prefixo ou esparso, prevalece sobre transferências em segundo plano sobrepostas para bytes críticos de página sem promover caudas adjacentes, e divide o trabalho de transporte em MaxRequestSize

PDFs linearizados podem abrir os metadados do documento e a primeira página antes de o ficheiro completo chegar; PDFs não linearizados exigem o ficheiro completo e usam automaticamente o loader nativo normal de streams personalizados

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