type TPdfProgressiveDocument = class(TPdf) ... end;
| Method | Description |
|---|---|
Create | Cria o componente de documento e seu agendador de solicitações de intervalo próprio |
Destroy | Cancela o estado progressivo antes de liberar os recursos herdados do documento |
BeginProgressiveLoad(AStream, AFileSize, AOwnsStream, AInitialAvailableByteCount) | Cria o provedor nativo de disponibilidade mantendo o tamanho final lógico separado dos bytes atualmente armazenados |
CheckDocumentAvailability | Retorna pdaAvailable, pdaNotAvailable ou pdaError e devolve os intervalos de bytes mesclados solicitados pelo PDFium |
OpenProgressiveDocument | Abre um PDF linearizado por meio de FPDFAvail_GetDocument ou um PDF não linearizado totalmente recebido por meio de FPDF_LoadCustomDocument |
CheckFormAvailability | Condiciona o preenchimento inicial de formulários até que os dados nativos de formulário estejam disponíveis |
LoadAvailablePage | Condiciona e carrega uma página de base um depois que a disponibilidade de formulário atinge um estado terminal |
CancelProgressiveLoad | Fecha a página, o formulário, o documento, o handle de disponibilidade, os callbacks e o adaptador de stream em ordem de dependência |
| Member | Type | Description |
|---|---|---|
ProgressiveLoading | Boolean | True enquanto a sessão nativa de disponibilidade está ativa |
LogicalFileSize | UInt64 | Comprimento final do conteúdo fornecido pelo servidor ou contêiner |
AvailableByteCount | UInt64 | Comprimento monotônico do prefixo contíguo já legível a partir do stream |
Linearization | TPdfLinearization | Veredito nativo de linearização quando bytes de cabeçalho suficientes estão disponíveis |
FirstAvailablePageNumber | Integer | Primeira página de base um depois que o handle do documento é aberto |
OnDataAvailable | TPdfDataAvailableEvent | Substitui o teste de prefixo para armazenamentos esparsos ou fora de ordem |
RangeRequests | TPdfRangeRequestScheduler | Agendador próprio preenchido a partir de cada dica nativa de download de documento, formulário e página |
TPdfProgressiveDocument é proprietário do handle nativo FPDF_AVAIL e dos records de callback que o PDFium pode revisitar ao longo de um carregamento remoto ou de stream em crescimento
Comece com o comprimento do conteúdo do servidor e qualquer prefixo inicial, chame o método de disponibilidade relevante, desenfileire trabalho de RangeRequests, grave cada resposta no armazenamento de acesso aleatório de suporte, chame CompleteRequest e repita até que um estado terminal de disponibilidade seja retornado
Para um download contíguo, avance AvailableByteCount após gravar novos bytes; para um cache de intervalos esparso, atribua OnDataAvailable e responda se cada deslocamento e tamanho solicitados são legíveis
O agendador aceita as mesmas dicas nativas retornadas pela saída legada DownloadHints, remove intervalos já conhecidos por meio do prefixo ou do callback esparso, preempta transferências em segundo plano sobrepostas em favor de bytes críticos de página sem promover caudas adjacentes e divide o trabalho de transporte em MaxRequestSize
PDFs linearizados podem abrir seus metadados de documento e a primeira página antes que o arquivo inteiro chegue; PDFs não linearizados exigem o arquivo completo e usam automaticamente o carregador nativo normal de stream personalizado
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 do PDFium limita o tamanho lógico do arquivo a 4 GiB e a classe dispara um erro em vez de truncar um tamanho maiorAvailableByteCount não pode diminuir porque o estado de análise nativo pressupõe que os bytes baixados permanecem disponíveisEnableV8Engine antes de BeginProgressiveLoad quando o suporte a XFA e V8 puder ser necessárioCancelProgressiveLoad ou a destruição seja concluídaCompleteRequest; a conclusão torna o intervalo imediatamente visível para o PDFiumTStream.Position compartilhado; use E/S posicionada ou um lock de stream externoRangeRequests.OnCancelRequest para abortar operações de transporte ativas quando a sessão for cancelada, uma dica de prioridade mais alta as sobrepor ou a cobertura esparsa externa as tornar redundantesTPdfDataAvailability,
TPdfDownloadRange,
TPdfDownloadRanges,
TPdfRangeRequest,
TPdfRangeRequestPriority,
TPdfRangeRequestStatistics,
TPdfRangeRequestScheduler,
TPdfDataAvailableEvent,
TPdfLinearization,
TPdfFormAvailability