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

SourceSizeEl tamaño total autoritativo de la fuente en bytes
ReadCallbackLa retrollamada que copia bytes para un desplazamiento absoluto de la fuente
PasswordLa contraseña usada para abrir el PDF, o una cadena vacía para un documento sin cifrar
ChunkSizeLa 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
CacheLimitBytesEl 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
CoalesceWindowMSLa 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
AvailabilityCallbackUna prueba opcional sin recuperación de los rangos de bytes ya presentes en el almacenamiento progresivo

Valores devueltos

0Los argumentos de la fuente no eran válidos o el PDF no pudo cargarse; examine LastErrorCode
1El 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