type TPdfProgressiveDocument = class(TPdf) ... end;
| Método | Descrição |
|---|---|
Create | Cria o componente de documento e o agendador de pedidos de intervalos que lhe pertence |
Destroy | Cancela 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 |
CheckDocumentAvailability | Devolve pdaAvailable, pdaNotAvailable ou pdaError e devolve os intervalos de bytes fundidos pedidos pelo PDFium |
OpenProgressiveDocument | Abre um PDF linearizado através de FPDFAvail_GetDocument ou um PDF não linearizado totalmente recebido através de FPDF_LoadCustomDocument |
CheckFormAvailability | Controla a inicialização do preenchimento de formulários até os dados nativos do formulário estarem disponíveis |
LoadAvailablePage | Controla e carrega uma página com numeração base 1 depois de a disponibilidade do formulário atingir um estado terminal |
CancelProgressiveLoad | Fecha a página, o formulário, o documento, o handle de disponibilidade, os callbacks e o adaptador de stream por ordem de dependência |
| Membro | Tipo | Descrição |
|---|---|---|
ProgressiveLoading | Boolean | True enquanto a sessão nativa de disponibilidade estiver viva |
LogicalFileSize | UInt64 | Comprimento final do conteúdo fornecido pelo servidor ou pelo contentor |
AvailableByteCount | UInt64 | Comprimento monótono do prefixo contíguo já legível a partir do stream |
Linearization | TPdfLinearization | Veredicto nativo de linearização quando bytes de cabeçalho suficientes estão disponíveis |
FirstAvailablePageNumber | Integer | Primeira página, com numeração base 1, depois de o handle do documento estar aberto |
OnDataAvailable | TPdfDataAvailableEvent | Substitui o teste de prefixo para armazenamentos de intervalos esparsos ou fora de ordem |
RangeRequests | TPdfRangeRequestScheduler | Agendador proprietário preenchido a partir de todas as sugestões nativas de transferência de documento, formulário e página |
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
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 ficheiro a 4 GiB e a classe lança um erro em vez de trunca um tamanho maiorAvailableByteCount não pode diminuir, porque o estado nativo de parsing assume que os bytes transferidos continuam disponíveisEnableV8Engine antes de BeginProgressiveLoad quando o suporte de XFA e V8 pode ser necessárioCancelProgressiveLoad ou a destruição terminaremCompleteRequest; a conclusão torna o intervalo imediatamente visível para o PDFiumTStream.Position partilhado; use I/O posicionado ou um lock externo de streamRangeRequests.OnCancelRequest para abortar operações de transporte ativas quando a sessão é cancelada, uma sugestão de prioridade superior as sobrepõe, ou a cobertura esparsa externa as torna redundantesTPdfDataAvailability,
TPdfDownloadRange,
TPdfDownloadRanges,
TPdfRangeRequest,
TPdfRangeRequestPriority,
TPdfRangeRequestStatistics,
TPdfRangeRequestScheduler,
TPdfDataAvailableEvent,
TPdfLinearization,
TPdfFormAvailability