Document Handlers opcionais

THPDFDocumentHandlerRegistry seleciona handlers substituíveis pelo conteúdo inspecionado, antes de pistas fracas de extensão ou MIME, e depois converte a origem escolhida numa única cache PDF imutável partilhada pela exportação e pela renderização

Handlers opcionais integrados

Orçamentos e isolamento de falhas

Uma única varredura validada do central-directory ZIP impõe limites de entradas, bytes comprimidos, bytes expandidos, por entrada, caminhos duplicados, caminhos inseguros e rácio de compressão antes da conversão

Entradas ZipCrypto PKZIP clássicas podem pedir credenciais através de ArchivePasswordCallback; o callback recebe o nome da origem, o nome da entrada e o número da tentativa com base um, enquanto MaxPasswordAttempts limita as repetições de 1 a 16

As credenciais e os bytes parcialmente descodificados das entradas permanecem em memória e são limpos entre tentativas, o cancelamento é verificado antes e depois de cada callback, e callbacks em falta, credenciais recusadas, repetições esgotadas ou encriptação não suportada falham de forma fechada

O ZipCrypto é proteção por palavra-passe legada, e não encriptação autenticada moderna, e as convenções de bytes de palavras-passe não ASCII podem variar entre produtores de ZIP

As entradas protegidas por palavra-passe precisam do Delphi 12 ou posterior, cujo System.Zip expõe o hook de desencriptação; compilados com uma versão anterior do Delphi, os handlers continuam a ler entradas não encriptadas, mas rejeitam as encriptadas como não suportadas antes de ArchivePasswordCallback ser chamado

As entradas cujos tamanhos ou offsets precisam de campos ZIP64 requerem o Delphi 11 ou posterior; versões anteriores do Delphi rejeitam-nas como não suportadas

Os limites de recursos, reflow, páginas, píxeis, DPI, saída e cancelamento permanecem ativos durante toda a conversão e renderização, enquanto uma publicação de saída falhada restaura uma stream de destino seekable

Registo e utilização

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