Manejadores de documentos opcionales

THPDFDocumentHandlerRegistry selecciona manejadores reemplazables por contenido inspeccionado antes que por pistas débiles de extensión o MIME, y luego convierte el origen seleccionado en una caché PDF inmutable compartida por la exportación y el renderizado

Manejadores opcionales integrados

Presupuestos y aislamiento de fallos

Un único escaneo validado del directorio central ZIP hace cumplir los límites de entradas, bytes comprimidos, bytes expandidos, por entrada, rutas duplicadas, rutas no seguras y relación de compresión antes de la conversión

Las entradas ZipCrypto clásicas de PKZIP pueden solicitar credenciales mediante ArchivePasswordCallback; el callback recibe el nombre del origen, el nombre de la entrada y el número de intento base 1, mientras que MaxPasswordAttempts acota los reintentos de 1 a 16

Las credenciales y los bytes de entradas parcialmente decodificadas permanecen en memoria y se limpian entre intentos, la cancelación se comprueba antes y después de cada callback, y los callbacks ausentes, las credenciales rechazadas, los reintentos agotados o el cifrado no soportado fallan de forma cerrada

ZipCrypto es protección por contraseña heredada en lugar de cifrado autenticado moderno, y las convenciones de bytes de contraseñas no ASCII pueden variar entre productores de ZIP

Las entradas protegidas por contraseña requieren Delphi 12 o posterior, cuyo System.Zip expone el hook de descifrado; compilados con una versión anterior de Delphi, los handlers siguen leyendo las entradas sin cifrar pero rechazan las cifradas como no compatibles antes de llamar a ArchivePasswordCallback

Las entradas cuyos tamaños u offsets requieren campos ZIP64 necesitan Delphi 11 o posterior; las versiones anteriores de Delphi las rechazan como no compatibles

Los límites de recursos, reflow, página, píxel, DPI, salida y cancelación permanecen activos durante toda la conversión y el renderizado, mientras que una publicación de salida fallida restaura el stream de destino desplazable

Registro y uso

var
  Registry: THPDFDocumentHandlerRegistry;
  Options: THPDFDocumentHandlerOptions;
  Handled: IHPDFHandledDocument;
  Info: THPDFDocumentHandlerInfo;
begin
  Registry:= THPDFDocumentHandlerRegistry.Create;
  try
    Registry.RegisterStandardHandlers;
    Options:= THPDFDocumentHandlerOptions.Default;
    if Registry.OpenFromFile('book.epub', '', Options, Handled, Info) then
      Handled.WritePDF(OutputStream, Options, Info);
  finally
    Registry.Free;
  end;
end;

APIs relacionadas