İ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
- XPS ve OpenXPS; sabit sayfa boyutlarını ve görsel sırayı korur, kendi kendine kapanan veya özellik taşıyan kısaltılmış
Pathgeometrisini yerel PDF vektörlerine çevirir, attribute ve property-element düz fırçalarını, çok duraklıLinearGradientBrushve eliptikRadialGradientBrushshading pattern'lerini korur veTileMode=Noneile paket JPEG, PNG, TIFF veya JPEG XRImageBrushkaynakları üzerinden yolları doldurur - XPS görsel dolguları; mutlak veya
RelativeToBoundingBoxViewboxveViewporteşlemesini,None,Tile,FlipX,FlipYveFlipXYtile modlarını, yerel path ve yerleşim clipping'ini, sonlu altı parametreliTransformattribute'larını veyaImageBrush.TransformMatrixTransformelementlerini, fırça ve path opaklığını, PNG soft-mask alpha'sını, görsel DPI'sını ve paket-kaynağı önbelleklemeyi destekler - XPS
Path.OpacityMask; düz, çok duraklı lineer veya eliptik radyal gradient ve PNGImageBrushmaskelerini, tekrarlanan ve yansıtılan görsel hücreleri de kapsayacak şekilde destekler. Tekdüze alpha mevcut graphics state'lere katlanır, değişken alpha ise shading pattern'lerini ve görsel soft-mask stream'lerini paylaşan sınırlı yerel DeviceGray transparency gruplarını kullanır - XPS Canvas
OpacityveCanvas.OpacityMask, her alt bileşeni tek tek zayıflatmak yerine üst üste binen torunları izole DeviceRGB Form XObject'leri üzerinden bir kez kompozitler. Tekdüze mask alpha'sı grup state'ine katlanır, değişken gradient veya PNG görsel alpha'sı yerel soft-mask kaynaklarını yeniden kullanır; iç içe gruplar ise dönüştürülmüş clip'leri, resource sahipliğini ve sınırlı link annotation'larını, grup başına 4.096 grup ve 16 MiB yakalanan içerik sınırları içinde korur - XPS
VisualBrush; satır içi veya kaynak destekliCanvas,PathveGlyphsgörsellerini özyinelemeli çevirir, iç içe ve uzakResourceDictionarykapsamlarını çözer, mutlak birViewbox'ı mutlak veya bağıl birViewport'a eşler ve tek sınırlı PDF Form XObject'ini direct, tiled ve yansıtılmış yerleşimlerde yeniden kullanır - XPS
Canvas.Clip; sınırlı kısaltılmış geometriyi, yerel veya uzakStaticResourcePathGeometrydeğerlerini ve yapılandırılmış line, Bézier, quadratic veya arc figürleri, geometri transform'ları, boş geometri ileEvenOddya daNonZerodolgu kuralları taşıyan doğrudan property elementlerini kabul eder. İç içe clip'ler yerel PDFW*veyaWyollarına dönüşür, navigasyon dikdörtgenleri etkin dönüştürülmüş clip sınırlarıyla kesiştirilir, ayrıştırma 100.000 sayısal değerle sınırlıdır ve hatalı biçimli veya tekillikli clip'ler, alt görseller boyanmadan önce fail closed davranır - XPS
Glyphsen fazla 65.536 katıIndiceseşlemesi kabul eder; bire-çok ve çoktan-bire küme ilerlemesini, açık yüzdede-em advance'lerini, yatay ve dikey offset'leri, tekBidiLevelters ilerlemesini, düz attribute veya property-element dolgularını, opaklığı, Unicode çıkarımını ve fail-closed hatalı-girdi teşhisini korur. Basit run'lar yerel PDFTJdizilerini kullanır ve büyük eşleme tamponları eşitlenmiş lineer maliyetle büyür - Paket
FontUrikaynakları; TrueType ve OpenType programlarını, TTC üye parçalarını ve XPS GUID-gizlenmiş yazı tiplerini destekler. Kesin glyph ID'leri, cmap kaynaklı run'lar, kümeler, advance'ler, offset'ler, RTL başlangıç noktaları, font-kaynağı yeniden kullanımı, gömme izinleri, isteğe bağlı subsetting veToUnicodeçıkarım eşlemeleri, GDI ikamesi olmadan yerel PDF font verisi olarak kalır - Dönüştürülmüş
PathveGlyphsgörsellerindeki XPSFixedPage.NavigateUri, geometri veya metric kaynaklı sınırlarla yerel bir PDF link annotation'ına dönüşür. HTTP, HTTPS ve posta linkleri URI action olarak kalır; paket-göreli sayfalar ve percent-decodedLinkTargetparçaları ise her sayfa kullanılabilir hâle geldikten sonra ileri veya geri GoTo action'larına dönüşür - Bir Canvas
FixedPage.NavigateUri, bir torun kendi URI'sini verene kadar her torunPath,Glyphsveya iç içe Canvas görselinin devralınan hedefi olur. Kapsamlı hedefler iç içe override'lardan sonra geri yüklenir, her görselin geometrisini ve transform'unu izler, etkin Canvas clip'lerince kısıtlanmaya devam eder, izole opacity-grup yakalama sırasında sağ kalır ve yeniden kullanılabilirVisualBrushForm'larının içinde susturulmuş kalır - Navigasyon, URI başına 8.192 karakterle 65.536 linkle sınırlıdır; yayımlanırken cancellation için denetlenir, yeniden kullanılabilir
VisualBrushyakalama sırasında susturulur ve kontrol karakterleri, güvensiz şemalar, eksik hedefler veya yol ile parça uyuşmazlıkları nedeniyle reddedilir - Standart dışı
RelativeTransform, çözülemeyen matrix kaynakları, Repeat veya Reflect gradient yayılımı, non-sRGB interpolasyon, değişken-alpha boya fırçaları, renk dönüşümü, görsel stroke'lar, bağılVisualBrushviewbox'ları, stil simülasyonu, yan yatık glyph'ler ve ileri stroke özellikleri açık teşhis olarak kalır - EPUB
container.xml, manifest ve spine sırasını çözer, ardından yalnızca callback tabanlı paket kaynaklarıyla sınırlı HTML5 paged-media içe aktarıcısını kullanır - CBZ desteklenen görsel girdilerini tanır, deterministik doğal dosya adı sırasını uygular ve yapılandırılmış görsel DPI'sında görsel başına bir sayfa oluşturur
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;