Volitelné obslužné programy dokumentů
Volitelné obslužné programy dokumentů převádějí podporované zdrojové formáty, například CBZ, EPUB a XPS, do PDF nebo vykreslené stránkyTHPDFDocumentHandlerRegistry
Vestavěné volitelné obslužné programy
- XPS a OpenXPS zachovávají rozměry fixed-page a vizuální pořadí, konvertují sebeuzavírající se nebo property elementy nesoucí zkrácenou geometrii
Pathna nativní PDF vektory, zachovávají solid štětce z atributů i property elementů, shading patternyLinearGradientBrushs více zástavkami a eliptickéRadialGradientBrusha vyplňují cesty přes package zdrojeImageBrushJPEG, PNG, TIFF nebo JPEG XR sTileMode=None - Obrazové výplně XPS podporují mapování
ViewboxaViewportabsolutní iRelativeToBoundingBox, režimy dlaždicNone,Tile,FlipX,FlipYaFlipXY, nativní clipování cest a umístění, atributyTransformo šesti konečných parametrech nebo elementyMatrixTransformvImageBrush.Transform, opacity štětce a cesty, alfa soft mask PNG, DPI obrázku a caching package zdrojů Path.OpacityMaskv XPS podporuje solid masky, lineární nebo eliptické radiální gradientní masky s více zástavkami a PNGImageBrushmasky, včetně opakovaných a zrcadlených obrazových buněk; uniformní alfa se složí do stávajících grafických stavů, zatímco proměnná alfa používá ohraničené nativní transparentní skupiny DeviceGray, které sdílejí shading patterny a streamy soft mask obrázkůOpacityaCanvas.OpacityMaskna XPS Canvas skládají překrývající se potomky jednou přes izolované Form XObjects DeviceRGB místo zeslabování každého potomka zvlášť; uniformní alfa masky se složí do stavu skupiny, proměnná gradientní nebo PNG obrazová alfa znovu používá nativní zdroje soft mask a vnořené skupiny si zachovávají transformované clipy, vlastnictví zdrojů a ohraničené anotace odkazů v mezích 4 096 skupin a 16 MiB zachyceného obsahu na skupinu- XPS
VisualBrushrekurzivně konvertuje visualyCanvas,PathaGlyphsinline nebo založené na zdrojích, řeší vnořené a vzdálené scopeResourceDictionary, mapuje absolutníViewboxna absolutní nebo relativníViewporta znovu používá jeden ohraničený Form XObject PDF napříč přímými, dlaždicovými i zrcadlenými umístěními Canvas.Clipv XPS přijímá ohraničenou zkrácenou geometrii, hodnotyPathGeometryz lokálních nebo vzdálenýchStaticResourcea přímé property elementy se strukturovanými figurami čar, Bézierových křivek, kvadratických křivek nebo oblouků, transformacemi geometrie, prázdnou geometrií a pravidly výplněEvenOddneboNonZero; vnořené clipy se stanou nativními cestami PDFW*neboW, navigační obdélníky se protnou s aktivními transformovanými mezemi clipu, parsání se zastaví na 100 000 číselných hodnot a poškozené nebo singulární clipy selžou bezpečně dřív, než se malují potomci visualů- XPS
Glyphspřijímá nejvýše 65 536 přísných mapováníIndices, zachovává postup klastrů many-to-one i one-to-many, explicitní advance v setinách em, horizontální a vertikální offsety, obrácený postup lichéhoBidiLevel, solid výplně z atributů nebo property elementů, opacity, extrakci Unicode a diagnostiku poškozeného vstupu selhávající bezpečně; jednoduché běhy používají nativní pole PDFTJa velké mapovací buffery rostou s amortizovanou lineární nákladem - Package zdroje
FontUripodporují programy TrueType a OpenType, fragmenty členů TTC a GUID-obfuskované fonty XPS; přesné ID glyfů, běhy odvozené z cmap, klastry, advance, offsety, RTL origo, znovupoužití font zdrojů, oprávnění k vkládání, volitelný subsetting a extrakční mapyToUnicodezůstávají nativními fontovými daty PDF bez substituce GDI FixedPage.NavigateUriv XPS na transformovaných visiblechPathaGlyphsse stane nativní anotací odkazu PDF s mezemi odvozenými z geometrie nebo metrik; odkazy HTTP, HTTPS a mail zůstávají URI akcemi, zatímco stránky relativní k package a fragmentyLinkTargetdekódované z procent se stanou akcemi GoTo dopředu nebo dozadu, jakmile jsou k dispozici všechny stránkyFixedPage.NavigateUrina Canvasu se stane děděným cílem každého potomkaPath,Glyphsnebo vnořeného Canvas visualu, dokud potomek neposkytne vlastní URI; scope cíle se obnoví po vnořených přepisech, následují geometrii a transformaci každého visualu, zůstávají omezené aktivními clipy Canvasu, přežijí zachycení v izolovaných opacity skupinách a zůstávají potlačené uvnitř znovupoužitelných FormsVisualBrush- Navigace se omezuje na 65 536 odkazů s 8 192 znaky na URI, kontroluje zrušení při publikování, potlačuje se během zachytávání znovupoužitelných
VisualBrusha odmítá řídicí znaky, nebezpečné schémata, chybějící cíle nebo nesouhlas cest a fragmentů - Nestandardní
RelativeTransform, nevyřešené maticové zdroje, gradient spread Repeat nebo Reflect, interpolace mimo sRGB, nátěrové štětce s proměnnou alfou, konverze barev, obrazové tahy, relativní viewboxyVisualBrush, simulace stylů, boční glyfy a pokročilé vlastnosti tahů zůstávají explicitní diagnostikou - EPUB řeší
container.xml, manifest a pořadí spine, poté používá ohraničený importer HTML5 paged-media s package zdroji pouze přes callbacky - CBZ rozpozná podporované obrazové položky, aplikuje deterministické přirozené pořadí podle názvů souborů a vytvoří jednu stránku na obrázek při nastaveném DPI obrázku
Rozpoznání a otevření
Každý obslužný program ohodnotí prozkoumaný zdroj a nejvhodnější kandidát jej otevře v rámci zadaných limitů. Vlastnictví zdrojového streamu zůstává volajícímu
Úspěšná konverze zveřejní neměnný IHPDFHandledDocument, který lze zapsat do PDF nebo z něj vykreslit stránkuAplikace může používat vestavěné obslužné programy nebo zaregistrovat vlastní implementaci IHPDFDocumentHandler
Přihlašovací údaje a částečně dekódované bajty položek zůstávají v paměti a mažou se mezi pokusy, zrušení se kontroluje před každým callbackem i po něm a chybějící callbacky, odmítnuté přihlašovací údaje, vyčerpané pokusy nebo nepodporované šifrování selžou bezpečně
ZipCrypto je zastaralá ochrana heslem, nikoli moderní autentizované šifrování, a konvence bajtů ne-ASCII hesel se mohou mezi producenty ZIP lišit
Položky chráněné heslem vyžadují Delphi 12 nebo novější, jehož System.Zip zpřístupňuje hook pro dešifrování; při sestavení se starší verzí Delphi obslužné programy dál čtou nešifrované položky, ale šifrované odmítnou jako nepodporované, ještě než se zavolá ArchivePasswordCallback
Položky, jejichž velikosti nebo offsety vyžadují pole ZIP64, potřebují Delphi 11 nebo novější; starší verze Delphi je odmítnou jako nepodporované
Limity zdrojů, reflow, stránek, pixelů, DPI, výstupu a zrušení zůstávají aktivní po celou konverzi i renderování, zatímco selhavší publikování výstupu obnoví seekovatelný cílový stream
Registrace a použití
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;