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
| SourceSize | La dimensione totale autorevole della sorgente in byte |
|---|---|
| ReadCallback | Il callback che copia i byte per un offset assoluto della sorgente |
| Password | La password usata per aprire il PDF, oppure una stringa vuota per un documento non cifrato |
| ChunkSize | La granularità allineata del recupero degli intervalli; zero seleziona il valore predefinito di 64 KiB e anche i valori inferiori a 4096 usano il predefinito |
| CacheLimitBytes | Il 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 |
| CoalesceWindowMS | La finestra di raccolta per il primo chunk non in cache di ogni lettura assoluta; 2 millisecondi è il predefinito e zero disabilita il ritardo iniziale |
| AvailabilityCallback | Un test facoltativo senza recupero per gli intervalli di byte già presenti nell'archiviazione progressiva |
Valori restituiti
| 0 | Gli argomenti della sorgente non erano validi oppure il PDF non poteva essere caricato; esaminare LastErrorCode |
|---|---|
| 1 | Il 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