Optional Document Handlers

THPDFDocumentHandlerRegistry väljer utbytbara hanterare efter granskat innehåll före svaga filändelse- eller MIME-ledtrådar, och konverterar därefter den valda källan till en oföränderlig PDF-cache som delas av export och rendering

Inbyggda valfria hanterare

Budgetar och felisolering

En validerad genomsökning av ZIP:s centrala katalog driver post-, komprimerad-byte-, expanderad-byte-, per-post-, duplicerad-sökvägs-, osäker-sökvägs- och komprimeringsförhållanden-gränser innan konverteringen

Klassiska PKZIP ZipCrypto-poster kan begära autentiseringsuppgifter via ArchivePasswordCallback; callbacken tar emot källnamnet, postnamnet och försöksnumret (1-baserat), medan MaxPasswordAttempts takar försök från 1 till 16

Autentiseringsuppgifter och delvis avkodade postbyte stannar i minnet och rensas mellan försök, avbrott kontrolleras före och efter varje callback, och saknade callbacks, avslagna autentiseringsuppgifter, uttömda försök eller ej stödd kryptering misslyckas slutet

ZipCrypto är äldre lösenordsskydd snarare än modern autentiserad kryptering, och bytekonventioner för icke-ASCII-lösenord kan variera mellan ZIP-producenter

Lösenordsskyddade poster kräver Delphi 12 eller senare, vars System.Zip exponerar dekrypteringskroken; byggd med en tidigare Delphi-version läser hanterarna fortfarande okrypterade poster men avvisar krypterade som ej stödda innan ArchivePasswordCallback anropas

Poster vars storlekar eller offsetter behöver ZIP64-fält kräver Delphi 11 eller senare; tidigare Delphi-versioner avvisar dem som ej stödda

Gränser för resurser, reflow, sidor, pixlar, DPI, utdata och avbrott förblir aktiva genom hela konvertering och rendering, medan misslyckad utdatapublikering återställer en sökbar målström

Registrering och användning

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;

Relaterade API:er