İsteğe Bağlı Document Handler'lar

THPDFDocumentHandlerRegistry, değiştirilebilir handler'ları zayıf uzantı veya MIME ipuçlarından önce incelenen içeriğe göre seçer ve seçilen kaynağı, export ile rendering'in paylaştığı tek değişmez PDF önbelleğine dönüştürür

Yerleşik isteğe bağlı handler'lar

Bütçeler ve hata izolasyonu

Tek bir doğrulanmış ZIP central-directory taraması; girdi, sıkıştırılmış-bayt, açılmış-bayt, girdi başına, mükerrer-yol, güvensiz-yol ve sıkıştırma-oranı sınırlarını dönüşümden önce uygular

Klasik PKZIP ZipCrypto girdileri kimlik bilgilerini ArchivePasswordCallback üzerinden isteyebilir; callback kaynak adını, girdi adını ve birden başlayan deneme numarasını alır, MaxPasswordAttempts ise retry'ları 1 ile 16 arasında sınırlar

Kimlik bilgileri ve kısmen çözülmüş girdi baytları bellekte kalır ve denemeler arasında temizlenir; cancellation her callback'ten önce ve sonra denetlenir; eksik callback'ler, reddedilen kimlik bilgileri, tükenen retry'lar veya desteklenmeyen şifreleme fail closed davranır

ZipCrypto, modern authenticated encryption değil eski parola korumasıdır ve non-ASCII parola bayt kuralları ZIP üreticileri arasında değişebilir

Parola korumalı girdiler, System.Zip'inin şifre çözme kancasını açığa çıkardığı Delphi 12 veya sonrasını gerektirir; daha eski bir Delphi sürümüyle derlendiğinde handler'lar şifrelenmemiş girdileri okumaya devam eder ama şifreli olanları, ArchivePasswordCallback çağrılmadan önce desteklenmiyor olarak reddeder

Boyutları veya ofsetleri ZIP64 alanları gerektiren girdiler Delphi 11 veya sonrasını gerektirir; daha eski Delphi sürümleri bunları desteklenmiyor olarak reddeder

Resource, reflow, sayfa, piksel, DPI, çıktı ve cancellation sınırları dönüşüm ve rendering boyunca etkin kalır; başarısız çıktı yayımlaması ise seek edilebilir hedef stream'i geri yükler

Kayıt ve kullanım

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;

İlgili API'ler