Gestori di Documenti Opzionali

THPDFDocumentHandlerRegistry seleziona i gestori sostituibili in base al contenuto ispezionato prima degli hint deboli su estensione o MIME, quindi converte la sorgente selezionata in una cache PDF immutabile condivisa da esportazione e rendering

Handler opzionali integrati

Budget e isolamento dei guasti

Una singola scansione validata della directory centrale ZIP applica limiti su voci, byte compressi, byte espansi, per voce, cifratura, percorsi duplicati, percorsi non sicuri e rapporto di compressione prima della conversione

Le entry PKZIP ZipCrypto classiche possono richiedere le credenziali tramite ArchivePasswordCallback; il callback riceve il nome della sorgente, il nome della entry e il numero di tentativo (a partire da uno), mentre MaxPasswordAttempts limita i tentativi da 1 a 16

Le credenziali e i byte delle voci parzialmente decodificati restano in memoria e vengono svuotati tra i tentativi, la cancellazione viene controllata prima e dopo ogni callback, e callback mancanti, credenziali rifiutate, tentativi esauriti o cifratura non supportata falliscono in modo chiuso

ZipCrypto è protezione a password legacy piuttosto che cifratura autenticata moderna, e le convenzioni dei byte delle password non ASCII possono variare tra i producer ZIP

Le entry protette da password richiedono Delphi 12 o successivo, il cui System.Zip espone l'hook di decifratura; compilati con una versione Delphi precedente, gli handler leggono ancora le entry non cifrate ma rifiutano quelle cifrate come non supportate prima che ArchivePasswordCallback venga chiamato

Le entry le cui dimensioni o offset richiedono campi ZIP64 richiedono Delphi 11 o successivo; le versioni Delphi precedenti le rifiutano come non supportate

I limiti di risorse, reflow, pagina, pixel, DPI, output e cancellazione restano attivi per tutta la conversione e il rendering, mentre la pubblicazione fallita dell'output ripristina uno stream di destinazione riposizionabile

Registrazione e utilizzo

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;

API correlate