Document Handlers opcionales

THPDFDocumentHandlerRegistry selecciona handlers reemplazables por el contenido inspeccionado antes que las pistas débiles de extensión o MIME, y luego convierte el source elegido en una única caché PDF inmutable compartida por exportación y render

Handlers opcionales integrados

Presupuestos y aislamiento de fallos

Un único escaneo validado del central-directory ZIP aplica los límites de entradas, bytes comprimidos, bytes expandidos, por entrada, rutas duplicadas, rutas inseguras y ratio 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 source, el nombre de la entrada y el número de intento de base uno, mientras que MaxPasswordAttempts acota los reintentos de 1 a 16

Las credenciales y los bytes de entrada parcialmente decodificados 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 la encriptación no soportada fallan de forma cerrada

ZipCrypto es protección por contraseña legacy, no encriptación autenticada moderna, y las convenciones de bytes de contraseñas no ASCII pueden variar entre producers de ZIP

Las entradas protegidas por contraseña requieren Delphi 12 o posterior, cuyo System.Zip expone el hook de desencriptación; compilados con una versión anterior de Delphi, los handlers siguen leyendo entradas sin encriptar pero rechazan las encriptadas como no soportadas antes de que se llame 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 soportadas

Los límites de recursos, reflow, páginas, píxeles, DPI, salida y cancelación permanecen activos durante toda la conversión y el render, mientras que la publicación fallida de la salida restaura un destination stream con seek

Registro y uso

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

APIs relacionadas