LoadFromRangeSource

Gestión de documentos, rendimiento

Descripción

Carga y selecciona un PDF a través de un callback síncrono 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 del origen en bytes
ReadCallbackEl callback que copia bytes para un desplazamiento absoluto del origen
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 por debajo de 4096 también usan el predeterminado
CacheLimitBytesEl máximo de bytes retenidos a través de ventanas menos recientemente usadas; cero selecciona el valor predeterminado de 4 MiB y los valores por debajo de un fragmento se elevan a un fragmento
CoalesceWindowMSLa ventana de recolección para el primer fragmento sin caché de cada lectura absoluta; 2 milisegundos es el valor predeterminado y cero deshabilita el retardo inicial
AvailabilityCallbackUna prueba opcional sin obtención de datos para rangos de bytes ya presentes en el almacenamiento progresivo

Valores devueltos

0Los argumentos del origen no eran válidos o no se pudo cargar el PDF; inspeccione LastErrorCode
1El documento se cargó y seleccionó

Observaciones

El callback 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 del callback 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 del callback; un callback Nil preserva el comportamiento síncrono tratando todo rango de origen válido como disponible

Blocchi allineati 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 simultáneo comparte solicitudes del mismo bloque y fusiona bloques contiguos en cola sin cambiar el cursor posicional del flujo

Los callbacks 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 faltantes

Usate GetRangeSourceCacheInfo, SetRangeSourceCacheLimit e 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 del callback ni de su almacenamiento de respaldo