Optional Document Handlers

THPDFDocumentHandlerRegistry vælger udskiftelige handlers efter inspiceret indhold frem for svage filendelses- eller MIME-hints og konverterer derefter den valgte kilde til én uforanderlig PDF-cache, der deles af eksport og rendering

Indbyggede valgfrie handlers

Budgetter og fejlisolering

Én valideret scanning af ZIP central directory håndhæver grænser for entry, komprimerede bytes, udvidede bytes, pr. entry, duplikerede stier, usikre stier og komprimeringsforhold før konvertering

Klassiske PKZIP ZipCrypto-entry'er kan anmode om credentials via ArchivePasswordCallback; callback'en modtager kildenavnet, entry-navnet og et én-baseret forsøgsnummer, mens MaxPasswordAttempts afgrænser gentagne forsøg fra 1 til 16

Credentials og delvist afkodede entry-bytes forbliver i hukommelsen og ryddes mellem forsøg, annullering tjekkes før og efter hvert callback, og manglende callbacks, afviste credentials, opbrugte forsøg eller ikke-understøttet kryptering fejler lukket

ZipCrypto er en ældre adgangskodebeskyttelse og ikke moderne autentificeret kryptering, og konventionerne for bytes i ikke-ASCII-adgangskoder kan variere mellem ZIP-producenter

Adgangskodebeskyttede entry'er kræver Delphi 12 eller nyere, hvis System.Zip eksponerer dekrypteringshooket; bygget med en tidligere Delphi-version læser handlerne stadig ukrypterede entry'er, men afviser krypterede som ikke-understøttet, før ArchivePasswordCallback kaldes

Entry'er, hvis størrelser eller offsets kræver ZIP64-felter, kræver Delphi 11 eller nyere; tidligere Delphi-versioner afviser dem som ikke-understøttet

Grænserne for ressourcer, reflow, sider, pixels, DPI, output og annullering er aktive gennem hele konverteringen og renderingen, og hvis publiceringen af output fejler, gendannes en destination stream, der kan søges i

Registrering og brug

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;

Relaterede API'er