LoadFromRangeSource
Gerenciamento de documentos, Desempenho
Descrição
Carrega e seleciona um PDF por meio de um callback síncrono de acesso aleatório, permitindo que clientes HTTP, bancos de dados, armazenamentos de objetos e provedores de armazenamento personalizados forneçam somente os intervalos de bytes que o parser toca
Sintaxe
Delphi
Function TPDFlib.LoadFromRangeSource(SourceSize: Int64;
ReadCallback: TPDFlibRangeReadEvent; Const Password: WideString;
ChunkSize: LongInt= 0; CacheLimitBytes: Int64= 0;
CoalesceWindowMS: Cardinal= PDF_NET_DEFAULT_COALESCE_WINDOW_MS;
AvailabilityCallback: TPDFlibRangeAvailabilityEvent= Nil): Integer;Parâmetros
| SourceSize | O tamanho total autoritativo da origem em bytes |
|---|---|
| ReadCallback | O callback que copia bytes para um deslocamento absoluto da origem |
| Password | A senha usada para abrir o PDF, ou uma string vazia para um documento não criptografado |
| ChunkSize | A granularidade alinhada de busca de intervalos; zero seleciona o padrão de 64 KiB e valores abaixo de 4096 também usam o padrão |
| CacheLimitBytes | O máximo de bytes retidos entre janelas menos usadas recentemente; zero seleciona o padrão de 4 MiB e valores abaixo de um chunk são elevados a um chunk |
| CoalesceWindowMS | A janela de coleta para o primeiro chunk não armazenado em cache de cada leitura absoluta; 2 milissegundos é o padrão e zero desabilita o atraso inicial |
| AvailabilityCallback | Um teste opcional que não busca, para intervalos de bytes já presentes no armazenamento progressivo |
Valores retornados
| 0 | Os argumentos de origem eram inválidos ou o PDF não pôde ser carregado; examine LastErrorCode |
|---|---|
| 1 | O documento foi carregado e selecionado |
Observações
O callback de leitura recebe offsets absolutos com base zero e deve gravar no máximo Count bytes em Buffer, retornando o número gravado
O alvo do callback e seu armazenamento de apoio devem permanecer válidos até que o documento carregado seja fechado, porque renderização de página, extração e salvamento podem solicitar faixas adicionais depois
Chamadas são síncronas e podem chegar em ordem não sequencial; um resultado curto é aceito no fim físico da origem, enquanto um resultado zero inesperado faz a carga ou a operação diferida atual falhar
Quando AvailabilityCallback está atribuído, retorne um valor diferente de zero apenas quando a faixa solicitada completa puder ser lida imediatamente sem transporte ou I/O bloqueante
Uma faixa em cache está disponível independentemente do resultado do callback; um callback Nil preserva o comportamento síncrono tratando toda faixa de origem válida como disponível
Blocos alinhados evitam buscas de transporte duplicadas para leituras sobrepostas, enquanto o orçamento de bytes limita o payload retido independentemente do tamanho do documento
Leituras diferidas de objetos e segmentos usam offsets absolutos, então trabalho concorrente compartilha requisições do mesmo bloco e mescla blocos adjacentes na fila sem mudar o cursor posicional do stream
Os callbacks de origem são serializados e não devem ler recursivamente do mesmo range stream
Use GetRangeSourceDataAvailability para testar dependências de página, formulário ou objeto indireto sem ler faixas relatadas como ausentes
GetRangeSourceCacheInfo para testar dependências de página, formulário ou objeto indireto sem ler intervalos relatados como ausentesUse SetRangeSourceCacheLimit, ClearRangeSourceCache e
A biblioteca é dona do seu range stream posicionável interno, mas não é dona do alvo do callback nem do armazenamento de apoio dele