LoadFromRangeSource
Gestión de documentos, rendimiento
Descripción
Carga y selecciona un PDF a través de una retrollamada síncrona de acceso aleatorio, permitiendo que clientes HTTP, bases de datos, almacenes de objetos y proveedores de almacenamiento personalizados suministren solo los rangos de bytes que el analizador toca
Sintaxis
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 | El tamaño total autoritativo de la fuente en bytes |
|---|---|
| ReadCallback | La retrollamada que copia bytes para un desplazamiento absoluto de la fuente |
| Password | La contraseña usada para abrir el PDF, o una cadena vacía para un documento sin cifrar |
| ChunkSize | La granularidad alineada de obtención de rangos; cero selecciona el valor predeterminado de 64 KiB y los valores inferiores a 4096 también usan el predeterminado |
| CacheLimitBytes | El máximo de bytes retenidos entre ventanas de uso menos reciente; cero selecciona el valor predeterminado de 4 MiB y los valores inferiores a un fragmento se elevan a un fragmento |
| CoalesceWindowMS | La ventana de recogida para el primer fragmento sin caché de cada lectura absoluta; 2 milisegundos es el valor predeterminado y cero desactiva el retardo inicial |
| AvailabilityCallback | Una prueba opcional sin recuperación de los rangos de bytes ya presentes en el almacenamiento progresivo |
Valores devueltos
| 0 | Los argumentos de la fuente no eran válidos o el PDF no pudo cargarse; examine LastErrorCode |
|---|---|
| 1 | El documento se cargó y seleccionó |
Observaciones
La retrollamada de lectura recibe desplazamientos absolutos de base cero y no debe escribir más de Count bytes en Buffer, devolviendo el número escrito
El destino de la retrollamada y su almacenamiento de respaldo deben seguir siendo válidos hasta que se cierre el documento cargado, porque la renderización de páginas, la extracción y el guardado pueden pedir rangos adicionales más tarde
Las llamadas son síncronas y pueden llegar en orden no secuencial; un resultado corto se acepta en el final físico del origen, mientras que un resultado cero inesperado hace que la carga o la operación diferida actual falle
Cuando AvailabilityCallback está asignado, devuelva un valor distinto de cero solo cuando el rango solicitado completo pueda leerse de inmediato sin transporte ni E/S bloqueante
Un rango en caché está disponible sin importar el resultado de la retrollamada; una retrollamada Nil preserva el comportamiento síncrono tratando todo rango de origen válido como disponible
Los bloques alineados evitan dobles transportes de lectura para lecturas superpuestas, mientras el presupuesto de bytes acota la carga retenida independientemente del tamaño del documento
Las lecturas diferidas de objetos y segmentos usan desplazamientos absolutos, así que el trabajo concurrente comparte peticiones del mismo bloque y fusiona bloques contiguos en cola sin cambiar el cursor posicional del flujo
Las retrollamadas del origen se serializan y no deben leer recursivamente del mismo flujo por rangos
Use GetRangeSourceDataAvailability para probar dependencias de página, formulario u objeto indirecto sin leer rangos notificados como ausentes
Use GetRangeSourceCacheInfo, SetRangeSourceCacheLimit y ClearRangeSourceCache para observar o cambiar la caché activa
La biblioteca es propietaria de su flujo por rangos interno con capacidad de búsqueda, pero no del destino de la retrollamada ni de su almacenamiento de respaldo