Gestori di Documenti Opzionali
THPDFDocumentHandlerRegistry seleziona i gestori sostituibili in base al contenuto ispezionato prima degli hint deboli su estensione o MIME, quindi converte la sorgente selezionata in una cache PDF immutabile condivisa da esportazione e rendering
Handler opzionali integrati
- XPS e OpenXPS conservano le dimensioni a pagina fissa e l'ordine visivo, convertono abbreviazioni a chiusura automatica o con proprietà in
Pathgeometria in vettori PDF nativi, preservano brush solidi da attributo o elemento proprietà, multi-stopLinearGradientBrushed ellitticheRadialGradientBrushpattern di shading, e riempiono i percorsi attraverso JPEG, PNG, TIFF o JPEG XR del pacchettoImageBrushrisorse conTileMode=None - I fill immagine XPS supportano
RelativeToBoundingBoxViewboxeViewportmapping,None,Tile,FlipX,FlipYeFlipXYmodalità di tile, clipping nativo di percorso e piazzamento, sei attributi finitiTransformattributi oImageBrush.TransformMatrixTransformelementi, opacità di brush e percorso, alpha soft-mask PNG, DPI delle immagini e caching delle risorse del pacchetto - XPS
Path.OpacityMasksupporta maschere a gradiente solido, lineare multi-stop o radiale ellittico, e PNGImageBrush, incluse celle di immagine ripetute e riflesse; l'alpha uniforme viene ripiegata negli stati grafici esistenti mentre l'alpha variabile usa gruppi di trasparenza DeviceGray nativi limitati che condividono pattern di shading e stream soft-mask delle immagini - Canvas XPS
OpacityeCanvas.OpacityMaskcompongono una sola volta i discendenti sovrapposti attraverso Form XObject DeviceRGB isolati invece di attenuare ogni figlio indipendentemente; l'alpha uniforme della maschera viene ripiegata nello stato del gruppo, l'alpha variabile da gradiente o immagine PNG riusa risorse soft-mask native, e i gruppi annidati conservano clip trasformati, proprietà delle risorse e annotazioni link limitate entro i limiti di 4.096 gruppi e 16 MiB di contenuto catturato per gruppo VisualBrushdi XPS converte ricorsivamente i visualCanvas,PatheGlyphsinline o basati su risorse, risolve gli scope annidati e remoti diResourceDictionary, mappa unViewboxassoluto su unViewportassoluto o relativo e riusa un solo Form XObject PDF limitato per posizionamenti diretti, a tessere e riflessi- XPS
Canvas.Clipaccetta geometria abbreviata limitata, locali o remotiStaticResourcePathGeometryvalori, ed elementi proprietà diretti con figure strutturate a linee, Bézier, quadratiche o archi, trasformazioni di geometria, geometria vuota eEvenOddoppureNonZeroregole di fill; i clip annidati diventanoW*oppureWpercorsi, i rettangoli di navigazione vengono intersecati con i bounds trasformati attivi del clip, il parsing è limitato a 100.000 valori numerici, e i clip malformati o singolari falliscono in modo chiuso prima che i visual figli vengano disegnati Glyphsdi XPS accetta al massimo 65.536 mappingIndicesrigorosi e mantiene la progressione dei cluster uno-a-molti e molti-a-uno, gli advance espliciti in centesimi di em, gli offset orizzontali e verticali, la progressione inversa perBidiLeveldispari, i riempimenti solid come attributo o property element, l'opacità, l'estrazione Unicode e una diagnostica fail-closed per input malformato; le run semplici usano arrayTJnativi di PDF e i buffer di mapping di grandi dimensioni crescono con costo lineare ammortizzato- Le risorse
FontUridel package supportano programmi TrueType e OpenType, frammenti di membri TTC e font XPS offuscati con GUID; ID di glifo esatti, run derivate dalla cmap, cluster, advance, offset, origini RTL, riuso delle risorse font, permessi di embedding, subsetting opzionale e mappe di estrazioneToUnicoderestano dati di font PDF nativi, senza sostituzione GDI - XPS
FixedPage.NavigateUrisu trasformatePatheGlyphsvisual diventa un'annotazione link PDF nativa con bounds derivati dalla geometria o dalle metriche; i link HTTP, HTTPS e mail restano azioni URI, mentre le pagine relative al pacchetto e leLinkTargetcon percent-decoding diventano azioni GoTo in avanti o all'indietro dopo che ogni pagina è disponibile - Una Canvas
FixedPage.NavigateUridiventa il target ereditato di ogni discendentePath,Glyphs, o visual Canvas annidati finché un discendente non fornisce il proprio URI; i target con ambito si ripristinano dopo override annidati, seguono la geometria e la trasformazione di ogni visual, restano vincolati dai clip Canvas attivi, sopravvivono alla cattura dei gruppi di opacità isolati e restano soppressi dentro iVisualBrushForms - La navigazione è limitata a 65.536 link con 8.192 caratteri per URI, controllata per la cancellazione durante la pubblicazione, soppressa durante la cattura
VisualBrushriutilizzabile, e rifiutata per caratteri di controllo, scheme non sicuri, target mancanti o mismatch di percorso e frammento - Non standard
RelativeTransform, risorse matrice irrisolte, spread del gradiente Repeat o Reflect, interpolazione non sRGB, paint brush con alpha variabile, conversione di colore, stroke di immagini, iVisualBrushviewbox, simulazione di stile, glifi laterali e proprietà di stroke avanzate restano diagnostici espliciti - L'EPUB risolve
container.xml, il manifest e l'ordine del spine, poi usa l'importatore HTML5 paged-media limitato con risorse del pacchetto solo tramite callback - CBZ riconosce le voci immagine supportate, applica un ordine determinato dai nomi file naturali e crea una pagina per immagine alla DPI dell'immagine configurata
Budget e isolamento dei guasti
Una singola scansione validata della directory centrale ZIP applica limiti su voci, byte compressi, byte espansi, per voce, cifratura, percorsi duplicati, percorsi non sicuri e rapporto di compressione prima della conversione
Le entry PKZIP ZipCrypto classiche possono richiedere le credenziali tramite ArchivePasswordCallback; il callback riceve il nome della sorgente, il nome della entry e il numero di tentativo (a partire da uno), mentre MaxPasswordAttempts limita i tentativi da 1 a 16
Le credenziali e i byte delle voci parzialmente decodificati restano in memoria e vengono svuotati tra i tentativi, la cancellazione viene controllata prima e dopo ogni callback, e callback mancanti, credenziali rifiutate, tentativi esauriti o cifratura non supportata falliscono in modo chiuso
ZipCrypto è protezione a password legacy piuttosto che cifratura autenticata moderna, e le convenzioni dei byte delle password non ASCII possono variare tra i producer ZIP
Le entry protette da password richiedono Delphi 12 o successivo, il cui System.Zip espone l'hook di decifratura; compilati con una versione Delphi precedente, gli handler leggono ancora le entry non cifrate ma rifiutano quelle cifrate come non supportate prima che ArchivePasswordCallback venga chiamato
Le entry le cui dimensioni o offset richiedono campi ZIP64 richiedono Delphi 11 o successivo; le versioni Delphi precedenti le rifiutano come non supportate
I limiti di risorse, reflow, pagina, pixel, DPI, output e cancellazione restano attivi per tutta la conversione e il rendering, mentre la pubblicazione fallita dell'output ripristina uno stream di destinazione riposizionabile
Registrazione e utilizzo
var
Registry: THPDFDocumentHandlerRegistry;
Options: THPDFDocumentHandlerOptions;
Handled: IHPDFHandledDocument;
Info: THPDFDocumentHandlerInfo;
begin
Registry:= THPDFDocumentHandlerRegistry.Create;
try
Registry.RegisterStandardHandlers;
Options:= THPDFDocumentHandlerOptions.Default;
if Registry.OpenFromFile('book.epub', '', Options, Handled, Info) then
Handled.WritePDF(OutputStream, Options, Info);
finally
Registry.Free;
end;
end;