Volitelné obslužné programy dokumentů

Volitelné obslužné programy dokumentů převádějí podporované zdrojové formáty, například CBZ, EPUB a XPS, do PDF nebo vykreslené stránkyTHPDFDocumentHandlerRegistry

Vestavěné volitelné obslužné programy

Rozpoznání a otevření

Každý obslužný program ohodnotí prozkoumaný zdroj a nejvhodnější kandidát jej otevře v rámci zadaných limitů. Vlastnictví zdrojového streamu zůstává volajícímu

Úspěšná konverze zveřejní neměnný IHPDFHandledDocument, který lze zapsat do PDF nebo z něj vykreslit stránkuAplikace může používat vestavěné obslužné programy nebo zaregistrovat vlastní implementaci IHPDFDocumentHandler

Přihlašovací údaje a částečně dekódované bajty položek zůstávají v paměti a mažou se mezi pokusy, zrušení se kontroluje před každým callbackem i po něm a chybějící callbacky, odmítnuté přihlašovací údaje, vyčerpané pokusy nebo nepodporované šifrování selžou bezpečně

ZipCrypto je zastaralá ochrana heslem, nikoli moderní autentizované šifrování, a konvence bajtů ne-ASCII hesel se mohou mezi producenty ZIP lišit

Položky chráněné heslem vyžadují Delphi 12 nebo novější, jehož System.Zip zpřístupňuje hook pro dešifrování; při sestavení se starší verzí Delphi obslužné programy dál čtou nešifrované položky, ale šifrované odmítnou jako nepodporované, ještě než se zavolá ArchivePasswordCallback

Položky, jejichž velikosti nebo offsety vyžadují pole ZIP64, potřebují Delphi 11 nebo novější; starší verze Delphi je odmítnou jako nepodporované

Limity zdrojů, reflow, stránek, pixelů, DPI, výstupu a zrušení zůstávají aktivní po celou konverzi i renderování, zatímco selhavší publikování výstupu obnoví seekovatelný cílový stream

Registrace a použití

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;

Související API