Optionale Dokumenthandler

THPDFDocumentHandlerRegistry wählt austauschbare Handler anhand des untersuchten Inhalts vor schwachen Erweiterungs- oder MIME-Hinweisen aus und wandelt die gewählte Quelle dann in einen unveränderlichen PDF-Cache um, der von Export und Wiedergabe gemeinsam genutzt wird

Integrierte optionale Handler

Budgets und Fehlerisolierung

Ein validierter ZIP-Central-Directory-Scan setzt vor der Konvertierung Grenzen für Einträge, komprimierte Bytes, entpackte Bytes, Werte pro Eintrag, doppelte Pfade, unsichere Pfade und das Kompressionsverhältnis durch

Klassische PKZIP-ZipCrypto-Einträge können Zugangsdaten über ArchivePasswordCallback anfordern; der Callback erhält Quellname, Eintragsnamen und die Ein-basierte Versuchsnummer, während MaxPasswordAttempts Wiederholungen auf 1 bis 16 begrenzt

Zugangsdaten und teilweise dekodierte Eintragsbytes bleiben im Speicher und werden zwischen Versuchen gelöscht, Abbruch wird vor und nach jedem Callback geprüft, und fehlende Callbacks, abgelehnte Zugangsdaten, erschöpfte Wiederholungen oder nicht unterstützte Verschlüsselung schlagen geschlossen fehl

ZipCrypto ist ein legacy-Passwortschutz und keine moderne authentifizierte Verschlüsselung, und die Byte-Konventionen für Nicht-ASCII-Passwörter können je ZIP-Produzent variieren

Passwortgeschützte Einträge benötigen Delphi 12 oder neuer, dessen System.Zip den Entschlüsselungs-Hook bereitstellt; gebaut mit einer älteren Delphi-Version lesen die Handler weiterhin unverschlüsselte Einträge, weisen verschlüsselte aber als nicht unterstützt zurück, bevor ArchivePasswordCallback aufgerufen wird

Einträge, deren Größen oder Offsets ZIP64-Felder benötigen, erfordern Delphi 11 oder neuer; ältere Delphi-Versionen weisen sie als nicht unterstützt zurück

Grenzen für Ressourcen, Reflow, Seiten, Pixel, DPI, Ausgabe und Abbruch bleiben während der gesamten Konvertierung und Wiedergabe aktiv, und eine fehlgeschlagene Ausgabeveröffentlichung stellt einen seekbaren Ziel-Stream wieder her

Registrierung und Verwendung

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;

Verwandte APIs