LoadFromRangeSource

Gestione dei documenti, prestazioni

Descrizione

Carica e seleziona un PDF attraverso un callback sincrono ad accesso casuale, consentendo a client HTTP, database, object store e provider di archiviazione personalizzati di fornire solo gli intervalli di byte che il parser tocca

Sintassi

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;

Parametri

SourceSizeLa dimensione totale autorevole della sorgente in byte
ReadCallbackIl callback che copia i byte per un offset assoluto della sorgente
PasswordLa password usata per aprire il PDF, oppure una stringa vuota per un documento non cifrato
ChunkSizeLa granularità allineata del recupero degli intervalli; zero seleziona il valore predefinito di 64 KiB e anche i valori inferiori a 4096 usano il predefinito
CacheLimitBytesIl massimo di byte mantenuti tra le finestre usate meno di recente; zero seleziona il valore predefinito di 4 MiB e i valori inferiori a un chunk vengono portati a un chunk
CoalesceWindowMSLa finestra di raccolta per il primo chunk non in cache di ogni lettura assoluta; 2 millisecondi è il predefinito e zero disabilita il ritardo iniziale
AvailabilityCallbackUn test facoltativo senza recupero per gli intervalli di byte già presenti nell'archiviazione progressiva

Valori restituiti

0Gli argomenti della sorgente non erano validi oppure il PDF non poteva essere caricato; esaminare LastErrorCode
1Il documento è stato caricato e selezionato

Osservazioni

Il callback di lettura riceve offset assoluti a base zero e non deve scrivere più di Count byte in Buffer, restituendo il numero scritto

La destinazione del callback e il suo archivio di supporto devono restare validi fino alla chiusura del documento caricato, perché rendering di pagine, estrazione e salvataggio possono richiedere intervalli aggiuntivi più tardi

Le chiamate sono sincrone e possono arrivare in ordine non sequenziale; un risultato corto viene accettato alla fine fisica della sorgente, mentre un risultato zero inatteso fa fallire il caricamento o l'operazione differita corrente

Quando AvailabilityCallback è assegnato, restituite un valore diverso da zero solo quando l'intervallo richiesto completo può essere letto subito senza trasporto né I/O bloccante

Un intervallo in cache è disponibile indipendentemente dal risultato del callback; un callback Nil preserva il comportamento sincrono trattando ogni intervallo di origine valido come disponibile

I blocchi allineati evitano doppi transport per letture sovrapposte, mentre il budget di byte limita il payload conservato indipendentemente dalla dimensione del documento

Le letture differite di oggetti e segmenti usano offset assoluti, così il lavoro concorrente condivide richieste dello stesso blocco e unisce blocchi adiacenti in coda senza cambiare il cursore posizionale del flusso

I callback dell'origine vengono serializzati e non devono leggere ricorsivamente dallo stesso flusso a intervalli

Usate GetRangeSourceDataAvailability per testare dipendenze di pagina, modulo o oggetto indiretto senza leggere intervalli segnalati come mancanti

Usate GetRangeSourceCacheInfo, SetRangeSourceCacheLimit e ClearRangeSourceCache per osservare o cambiare la cache attiva

La libreria è proprietaria del suo flusso a intervalli interno ricercabile, ma non della destinazione del callback né del suo archivio di supporto