LoadFromRangeSource
Gestão de documentos, desempenho
Descrição
Carrega e seleciona um PDF através de um callback síncrono de acesso aleatório, permitindo que clientes HTTP, bases de dados, armazenamentos de objetos e fornecedores de armazenamento personalizados forneçam apenas os intervalos de bytes que o analisador 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 desvio absoluto da origem |
| Password | A senha usada para abrir o PDF, ou uma cadeia vazia para um documento não encriptado |
| ChunkSize | A granularidade alinhada de obtenção de intervalos; zero seleciona a predefinição de 64 KiB e valores abaixo de 4096 também usam a predefinição |
| CacheLimitBytes | O máximo de bytes retidos entre janelas menos recentemente utilizadas; zero seleciona a predefinição de 4 MiB e valores abaixo de um bloco são elevados a um bloco |
| CoalesceWindowMS | A janela de recolha do primeiro bloco fora da cache de cada leitura absoluta; 2 milissegundos é a predefinição e zero desativa o atraso inicial |
| AvailabilityCallback | Um teste opcional sem obtenção para intervalos de bytes já presentes em armazenamento progressivo |
Valores devolvidos
| 0 | Os argumentos de origem eram inválidos ou o PDF não pôde ser carregado; inspecione LastErrorCode |
|---|---|
| 1 | O documento foi carregado e selecionado |
Observações
O callback de leitura recebe desvios absolutos com base zero e deve escrever no máximo Count bytes em Buffer, devolvendo o número escritoO destino do callback e o seu armazenamento de suporte devem permanecer válidos até o documento carregado ser fechado, porque a renderização de páginas, a extração e a gravação podem pedir intervalos adicionais mais tardeAs chamadas são síncronas e podem chegar por ordem não sequencial; um resultado curto é aceite no fim físico da origem, enquanto um resultado zero inesperado faz falhar o carregamento ou a operação diferida atualQuando
AvailabilityCallback está atribuído, devolva um valor diferente de zero apenas quando o intervalo pedido completo puder ser lido imediatamente sem transporte nem E/S bloqueanteUm intervalo em cache está disponível independentemente do resultado do callback; um callback
Nil preserva o comportamento síncrono tratando todos os intervalos de origem válidos como disponíveisBlocos alinhados evitam obtenções de transporte duplicadas para leituras sobrepostas, enquanto o orçamento de bytes limita o payload retido independentemente do tamanho do documentoAs leituras diferidas de objetos e segmentos usam desvios absolutos, pelo que o trabalho concorrente partilha pedidos do mesmo bloco e funde blocos adjacentes em fila sem alterar o cursor posicional do fluxoOs callbacks de origem são serializados e não devem ler recursivamente do mesmo fluxo de intervalos. Use
GetRangeSourceDataAvailability
GetRangeSourceCacheInfo para testar dependências de página, formulário ou objeto indireto sem ler intervalos reportados como em falta. Use SetRangeSourceCacheLimit, ClearRangeSourceCache e