Opcjonalne moduły obsługi dokumentów

THPDFDocumentHandlerRegistry wybiera zastępowalne moduły obsługi wg zbadań treści przed słabymi wskazówkami rozszerzenia lub MIME, a następnie konwertuje wybrane źródło na jedną niezmienną pamięć podręczną PDF współdzieloną przez eksport i renderowanie

Wbudowane moduły opcjonalne

Budżety i izolacja awarii

Jeden zwalidowany skan centralnego katalogu ZIP egzekwuje przed konwersją limity wpisów, bajtów skompresowanych, bajtów rozwiniętych, per wpis, zduplikowanych ścieżek, niebezpiecznych ścieżek i stosunku kompresji

Klasyczne wpisy PKZIP ZipCrypto mogą żądać poświadczeń przez ArchivePasswordCallback; callback dostaje nazwę źródła, nazwę wpisu i numer próby od jedynki, a MaxPasswordAttempts ogranicza ponowienia do zakresu 1-16

Poświadczenia i częściowo zdekodowane bajty wpisu pozostają w pamięci i są czyszczone między próbami, anulowanie jest sprawdzane przed i po każdym callbacku, a brakujące callbacki, odrzucone poświadczenia, wyczerpane ponowienia albo nieobsługiwane szyfrowanie failują na zamkniętym

ZipCrypto to przestarzała ochrona hasłem, a nowoczesne uwierzytelnione szyfrowanie, i konwencje bajtów haseł nie-ASCII mogą się różnić między producentami ZIP

Wpisy chronione hasłem wymagają Delphi 12 lub nowszego, którego System.Zip udostępnia hak deszyfrowania; zbudowane ze starszą wersją Delphi handlery nadal czytają wpisy niezaszyfrowane, ale odrzucają zaszyfrowane jako nieobsługiwane, zanim zostanie wywołany ArchivePasswordCallback

Wpisy, których rozmiary albo offsety wymagają pól ZIP64, wymagają Delphi 11 lub nowszego; starsze wersje Delphi odrzucają je jako nieobsługiwane

Limity zasobów, reflow, stron, pikseli, DPI, wyjścia i anulowania pozostają aktywne przez całą konwersję i renderowanie, podczas gdy nieudana publikacja wyjścia przywraca możliwy do przewijania strumień docelowy

Rejestracja i użycie

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;

Powiązane API