Automatic XFA native graphics and images

Unit: HPDFXFAHeadless

HPDFXFAWriteHeadlessPDF konzumuje draw callbacky obdélníků, čar, oblouků i vložených obrázků přímo z XDP, vedle stávajících konzumentů textu a widgetů

Každý draw vytvoří nativní Form XObject umístěný na skutečné layout stránce; image draw obsahují reálné Image XObject a při potřebě alpha soft masky

Vektorové cesty

Obdélníky použijí nativní PDF obdélníkové cesty, čáry zachovají lomítkový či zpětně lomítkový slope a eliptické oblouky použijí kubické segmenty nejvýše po 90 stupních

První efektivní edge dodá RGB barvu tahu i tloušťku, tedy i šířky pod bod; meze appearance tahu zahrnují polovinu tloušťky, takže form neořízne vlastní ohraničení

Oblouky konzumují startAngle a znaménkový sweepAngle, s defaultní plnou otáčkou a maximálním absolutním sweep 360 stupňů

Draw hinty rotace, scale i posunu se aplikují jednou v konečném afinním umístění kolem středu draw, s pozitivní rotací proti směru hodinových ručiček; souřadnice XFA vlevo nahoře se konvertují jednou na nativní PDF počátek

PNG a JPEG

FormátSkutečná nativní konzumace
PNG grayscaleVzorky 1, 2, 4, 8 i 16 bitů, přičemž zabalené vzorky se rozbalí na 8 bitů a 16bitová přesnost se zachová
PNG RGBBarevné vzorky 8 i 16 bitů
PNG indexed colorIndexy 1, 2, 4 a 8 bitů rozbalené přes paletu do vzorků RGB
PNG transparencyPrůhledné vzorky grayscale a RGB, alpha palety i grayscale-alpha a RGBA 8 či 16 bitů; skutečné streamy /SMask zachovají přesnost alpha
PNG filtering a interlaceVšech pět PNG řádkových filtrů i průchodů Adam7, validovaných přes sdílené nativní implementace zlib a prediktorů
JPEGBaseline i progresivní grayscale, RGB a CMYK snímky po 8 bitech, validované sdíleným nativním JPEG dekodérem, dřív než se zachová původní stream /DCTDecode

Kontrolní součty chunků PNG, jejich pořadí, rozměry, indexy palet, rozsahy průhledných vzorků i přesná dekomprimovaná délka se zkontrolují, dřív než se kandidát zapíše; useknutá či nadměrná komprimovaná data přípravu zhatí

Rozměry JPEG snímku se musí shodovat se skutečným nativním dekódováním a inverze Adobe CMYK se explicitně deklaruje ve slovníku obrázku

JPEG vyžaduje stávající nativní runtime TurboJPEG; HOTPDF_TURBOJPEG_LIBRARY umí určit absolutní cestu knihovny, se závislými knihovnami hledanými operačním systémem

Poměr stran obrázku podporuje fit, none, width, height a actual; hustota PNG pHYs i JPEG JFIF určí fyzickou velikost pixelu, s použitím 96 dpi, když použitelná hustota chybí

Škálované obrázky se centerují a ořezávají na draw obdélník XFA; skládání alpha zůstává operací nativní PDF čtečky

Meze a transakce

Kódované bajty obrázků, dekódované pracovní buffery i surové image či alpha streamy jsou ohraničené, dřív než alokace; nativní limity objektů i agregátní limity image a font streamů zůstávají aktivní

Zrušení se kontroluje při parsování chunků, nafukování dat, dekódování řádků i umísťování nativních objektů; stávající nativní JPEG dekodér dostane token volajícího

Selhání přípravy zachovají pozici, délku i bajty cíle; finální WriteBuffer do cíle se řídí vlastní I/O sémantikou streamu volajícího

Aktuální hranice

Vyplněné tvary, styling rohů, ohraničení specifická po hranách, dash patterny, čárové kódy, externí transport obrázků, widgety imageEdit, další formáty obrázků, vložené barevné profily i orientace Exif pořád vyžadují dodatečnou integraci konzumentů

Animovaný PNG se konzumuje jako jeho výchozí statický obrázek; cizí XML exData zůstává samostatnou funkcí a tenhle draw adaptér nespouští libovolné vložené objekty

Akceptace

Tests/Linux/Build-XFAHeadlessGraphicFixtures.py vytvoří deterministické fixtury řádkových filtrů, Adam7, přesnosti vzorků, transparentnosti, fyzického poměru, JPEG i poškozeného protokolu

Tests/Linux/XFAHeadlessGraphicsTests.pas zapíše a znovu otevře skutečná nativní PDF a verifikuje zachování volajícího při selháních; Verify-XFAHeadlessGraphics.py nezávisle zkontroluje dekódované vzorky obrázků, přesnost /SMask, vektorové operátory, umístění i renderované pixely přes pypdf a MuPDF

Automatická nativní tvorba XFA PDF popisuje stávající konzumenty polí a textu i veřejné API voleb a výsledku