Native Linux Cairo renderer
HPDFHeadlessCairoDevice vyrenderuje načtenou PDF stránku do RGB PNG pomocí image povrchů Cairo a FreeType, bez zobrazovacího serveru či PDF čtečky
Dodávejte sériový vypůjčený pohled z THPDFHeadlessDocument.GetRenderAccess(PageIndex) a držte ten dokument načtený a beze změny, dokud renderování nevrátí
Document := THPDFHeadlessDocument.Create;
try
Document.LoadFromFile('input.pdf');
Options := THPDFHeadlessRenderOptions.Default;
Info := HPDFRenderHeadlessPagePNGFile(
Document.GetRenderAccess(0), 'page.png', Options);
finally
Document.Free;
end;
Runtime závislosti
Nativní Linux používá libcairo.so.2, libfreetype.so.6 a závislost Fontconfig providera standardních písem; pro substituci Helvetica, Times a Courier nainstalujte vhodná písma
HOTPDF_CAIRO_LIBRARY a HOTPDF_FREETYPE_LIBRARY můžou před prvním renderem vybrat explicitní kompatibilní cesty knihoven; úspěšné moduly zůstávají načtené, protože nativní cache písem mohou držet destrukční callbacky
Hostitel musí držet svůj spustitelný soubor HotPDF, DLL či kód balíčku načtený, dokud mohou ty nativní cache držet HotPDF callbacky ničení písem; uvolnění hostovského modulu nezávisle na životnosti cache leží mimo tenhle profil
Windows používá kompatibilní libcairo-2.dll a libfreetype-6.dll přes tentýž most; runtime binárky i jejich licence dodává aplikace
Barvy ICCBased navíc načtou liblcms2.so.2; JPEG používá libturbojpeg.so.0 a JPEG 2000 OpenJPEG 2.5 kompatibilní libopenjp2.so.7; ty závislosti se načtou jen pro odpovídající vstupy
HOTPDF_LCMS_LIBRARY, HOTPDF_TURBOJPEG_LIBRARY a HOTPDF_OPENJPEG_LIBRARY ty cesty přebijí; Windows defaulty jsou lcms2.dll, turbojpeg.dll a openjp2.dll
Rendering profil
Podporovaný obsah zahrnuje stavbu a malování cest, pravidla výplně nonzero i even-odd, ořez, vnořený grafický stav, transformace CTM, styl linek, barvy DeviceGray/RGB/CMYK, běžnou alpha i opakované Form XObject s vlastními resource, Matrix a BBox
Šířky linek můžou být nulové: PDF hairliny vyžádané 0 w či ExtGState LW=0 použijí jednopixelový tah v device space; záporné šířky se odmítají
ExtGState D i operátor d content streamu sdílejí ohraničenou validaci přerušování: plné prázdné patterny, opakování liché délky, položky nulové délky, zlomkové délky i znaménkové fáze jsou podporované
Pattern přerušování přijme nejvýše 256 konečných nezáporných délek až do 1e9, s alespoň jednou kladnou délkou, když není prázdný, a konečnou fází o absolutní hodnotě nejvýše 1e9; každý element konzumuje práci operací a dočasné úložiště se účastní přijímání pracovních bajtů
Operandová pole přijmou PDF komentáře, tedy i číselná pole přerušování i textová pole TJ; poškozené lexikální hodnoty i chybějící uzavírací závorky si uchová sdílený scanner a renderer je odmítne, místo tichého zmizení
Horizontální text použije sdílený glyfový interpret pro textové matice, explicitní PDF šířky, kanonické advancy Helvetica/Times/Courier, character i word spacing, horizontální scale i úpravy TJ
Vložené podporované font programy použijí FreeType s rozřešenými glyfovými ID; mapování Unicode ToUnicode zůstávají dostupná přes dokumentové textové API, zatímco rastrové tvary standardních písem závisí na instalovaných substitutech
Kompozitní text podporuje Identity-H, Identity-V, explicitní vložené CMap streamy kódování i vestavěné horizontální a vertikální mapování UniJIS, UniGB, UniCNS a UniKS UCS2/UTF16; samostatně instalované CMap resource se nevyžadují
Vertikální malování glyfů respektuje výchozí i explicitní pozicující vektory DW2/W2, text rise, horizontální scale, textové i grafické matice i posun TJ; mapování UTF-16 přijímají kódy supplementárních znaků
Všech osm textových rendering režimů je podporovaných, tedy i vertikální výplň/tah/neviditelné obrysy akumulované do clipu při ET; vložené CMap streamy kódování si uchovávají svůj WMode i neidentitní CID mapování
Průhledné kombinované operace výplně a tahu použijí skládání object knockout, takže překrývající se výplň neprosákne tahem; procedury glyfů Type3 provedou vlastní ohraničené resource i fontové matice
Obrázky přijímají vzorky 1/2/4/8/16 bitů i pole Decode, stencil, explicitní, color-key i soft masky, masky odlišných velikostí i zotavení Matte; chybějící Interpolate použije vzorkování nejbližším sousedem a true vybere bilineární vzorkování
JPX codestreamy přijmou znaménkové či bezznaménkové zdrojové složky až po 26 bitech, tedy i smíšenou přesnost, subsampling i explicitní opacity, a normalizují se do ohraničených vzorků 8 či 16 bitů; BitsPerComponent slovníku obrázku i nestencil položky Decode se u JPX obrázků ignorují, jak vyžaduje profil PDF obrázků
Indexované palety i validované transformace profilů ICCBased do sRGB jsou podporované pro obrázky i barvy cest; DeviceCMYK bez profilu si uchová jednoduchou konverzi zařízení
Transformace ICCBased přijmou signatury profilů Gray, RGB, CMYK, Lab a XYZ a přísně validují deklarovaný počet složek i rozsahy složek
Operandy profilu Lab používají fyzické souřadnice L a b s defaultními rozsahy [0 100 -128 127 -128 127]; operandy XYZ fyzické souřadnice X Y Z s defaultním bezznaménkovým rozsahem 1.15 [0 65535/32768] na složku
Vstupy profilů XYZ jsou nativním kompatibilita rozšířením a nezakládají shodu archivačního PDF; zdrojové profily Lab i XYZ nevyberou podporovaný blending prostor transparentnosti
Range ICC streamu vyžaduje dvě konečné uspořádané hodnoty na složku a ohraničuje barevné operandy; defaulty Decode surových obrázků i vyhledávací hodnoty Indexed použijí ty rozsahy složek
CalGray, CalRGB a Lab podporují cesty, text, obrázky i báze Indexed palet; parametry se přísně validují, položky Matrix CalRGB řídí pořadí sloupců PDF a složky Lab i defaulty Decode obrázků použijí deklarované rozsahy
Barvy CIE použijí chromatickou adaptaci Bradford a relativní sRGB výstup; metadata BlackPoint se validují, zatímco dodatečná kompenzace černého bodu i politiky stavu rendering intentů zůstávají samostatnými rozšířeními
Kompozitní barvy Separation a DeviceN si uchovají jednu až třicet dva tint složek pro cesty, text, báze Indexed i zabalené obrázky; alternativní barvy zařízení či CIE použijí ohraničené tint funkce sampled, exponential, stitching či calculator
Alternativní barevné zdroje ICCBased Lab/XYZ a CalGray/CalRGB/Lab si uchovají své fyzické souřadnice skrz tint transformaci, dřív než konverzi do podporované transparency skupiny
Vícerozměrné vzorkované tint funkce podporují lineární i kubickou interpolaci, Domain, Encode, Decode, výstupní Range i zabalené hloubky vzorků až po 32 bitů; kubické vyhodnocení rozšiřuje stávající skalární konvenci čtyř uzlů o tensorové produkty, s lineárním fallbackem krátkých dimenzí a ohraničenou prací i zrušením
Konvence interpolace i samostatné důkazy vzorců a čteček popisují Nativní vzorkované barevné funkce
Separation None i DeviceN prostory obsahující jen koloranty None nepřispějí ani barvou, ani tvarem knockoutu; smíšené složky None pořád dosáhnou alternativní tint transformace
Separation All aplikuje svou tint na každý dostupný výstupní kolorant, s neutrálním RGB výstupem stránky a zachováním každé procesní složky uvnitř CMYK skupin
CMYK skupiny dostanou původní čtyřsložkové alternativní tint hodnoty, dřív než skládání; separační desky spot barev, výběr procesních/kolorantových složek NChannel i simulace mixing hintů zůstávají samostatnými rozšířeními
Terminální image callback zachová dešifrování dokumentu i předcházející stream filtry, dřív než nativní dekódování JPEG, JPEG 2000, CCITT či JBIG2; JBIG2 podporuje aritmetický i Huffman text, MMR i sdílené globální slovníky
JPEG 2000 podporuje subsampling a znaménkové složky, odvozené deklarace barev i vzorků, vložené ICC profily, explicitní override barevného prostoru i samostatnou či asociovanou opacity přes SMaskInData; hodnoty jeho složek se normalizují na osm či šestnáct bitů a jeho pole Decode obrázku se ignoruje
Vložené či explicitní profily ICC Lab/XYZ použijí fyzické rozsahy složek; asociovaná opacity se odstraní z normalizovaných uložených vzorků, dřív než aplikace mapování fyzických souřadnic, se zachováním offsetových kanálů Lab
Grafický stav SMask podporuje skupiny Alpha i Luminosity, barvy pozadí, matice Form, obnovení uloženého stavu i přenosové funkce sampled, exponential, stitching i ohraničený calculator; vlastní soft maska obrázku přebije soft masku grafického stavu
Všech šestnáct standardních blend režimů PDF je podporovaných; skupiny Form i stránek podporují izolované i neizolované skládání, object knockout i blending prostory DeviceGray, DeviceRGB, DeviceCMYK, CalGray, CalRGB či ICCBased o jedné, třech a čtyřech složkách
Kalibrované skupiny si uchovají nativní hodnoty složek až po hranici skupiny a přijmou barvy zařízení či Lab přes inverzní kalibrované transformace; samotné Lab není platným blending prostorem
Kalibrované masky Luminosity si uchovají souřadnice své skupiny a vyhodnotí CIE XYZ-Y, tedy i opacity skupiny i barvy pozadí, dřív než aplikují přenosovou funkci
Skládání knockout drží geometrický tvar objektu odděleně od opacity soft masky; díry stencilů zachovávají předcházející objekty, zatímco maskovaná cesta je v rámci své malované geometrie nahradí
Vnořené knockout skupiny si uchovají sjednocení geometrických tvarů svých potomků, tedy i objektů s nulovou opacity; neizolované podřízené skupiny použijí počáteční pozadí obklopující knockout skupiny
CMYK skupiny zachovají doplňkové složky CMY a černé v samostatných ohraničených image rovinách a kombinovaný výsledek konvertují na hranicích skupin; neseparovatelné blend režimy černou podle zvoleného režimu buď zachovají, nebo nahradí
Neizolované skupiny vyrenderují dodatečný ohraničený průchod opacity, odstraní příspěvek počátečního pozadí a jednou aplikují vstupní alpha i blend režim skupiny; transparency skupiny stránek použijí izolovaný povrch, dřív než skládání na pozadí stránky
Neizolovaný Form zdědí obklopující blending prostor; explicitní položka CS skupiny nepřepne počáteční pozadí do jiného prostoru
Stávající normal appearance anotací se přizpůsobí z jejich transformovaného BBox na Rect; RenderAnnotations=false vynechá appearance v obou použitích
Usage defaultuje na hruView, který přeskočí anotace Hidden a NoView i neznámé typy anotací se zapnutým Invisible; standardní typy anotací ISO 32000, tedy i PDF 2.0 RichMedia a Projection, s podporovanými normal appearance zůstanou viditelné, když je nastavené jen Invisible
Akceptace RichMedia a Projection pokrývá stávající statická normal appearance s platnými media assety či asociovaným defaultním 3D pohledem; přehrávání médií i interaktivní aktivace 3D leží mimo tuhle raster cestu
hruPrint maluje jen anotace s nastaveným Print a vymazaným Hidden; Invisible potlačí neznámé typy anotací v obou použitích, NoView netisknutí nepotlačí a NoZoom nezmění velikost tištěné appearance
Když normal appearance chybí, podporovaná anotační metadata se vyrenderují přes dočasnou appearance; geometrii, Unicode FreeText, statické ikony i zbývající hranice popisuje nativní anotační fallback
U view výstupu odstraní anotační NoZoom render scale z velikosti appearance, při zachování UserUnit; NoRotate drží přizpůsobenou appearance vzpřímenou přes rotaci stránky v obou použitích a obojí zachovává transformovaný ukotvení bod Rect vlevo nahoře i clip stránky
Textové anotace se stávajícími normal appearance se chovají jako NoZoom a NoRotate v view výstupu, bez ohledu na explicitní příznaky; print výstup si uchová jejich chování NoRotate, zatímco NoZoom ignoruje
Usage řídí statickou raster viditelnost i anotační geometrii; příznaky jen pro interakci nevytvoří chování hover či editace a stávající callback permission pro extrakci zůstává vyžadovaný, aniž by udělil tiskové oprávnění
Optional content ve statickém výstupu
Renderování konzumuje defaultní konfiguraci OCProperties/D katalogu, inicializuje stavy skupin z BaseState, aplikuje override ON a OFF a při určování viditelnosti použije odpovídající hodnoty Intent
Slovníky členství podporují AnyOn, AllOn, AnyOff a AllOff; rekurzivní výrazy VE podporují And, Or i jednooperandové Not, přičemž VE má přednost před jednodušší politikou
Null, nedostupné i zastaralé reference skupin nemají žádný členský efekt; skupiny mimo intenty konfigurace neřídí viditelnost a členství či výraz bez použitelných skupin ponechá obsah viditelný
Vnořený marked content /OC, image i Form XObject a anotace respektují výsledný stav; skryté označené sekce pořád aktualizují barvy, matice, ořez i pozici textu, zatímco skryté celé XObject a anotace se dají přeskočit
Běžné slovníky vlastností marked-content zůstávají použitelné, tedy i vnořené inline hodnoty; content pole zachovávají stav marked-content napříč svými složkovými streamy a podřízené streamy si drží vlastní zanoření marked-content
Samostatná rasterizace finální podoby použije výchozí konfiguraci v režimech view i print, aniž by automaticky aplikovala interaktivní doporučení použití AS, jak předepisuje sekce 8.11.4.5 ISO 32000-1:2008; explicitní ViewerState zapne doporučení View, Print, Export, Zoom, Language a User s perzistentním manuálním výběrem a dočasným stavem událostí
Chybějící vlastnosti optional-content či nil vypůjčený katalog nechají struktury optional-content bez viditelnostního efektu; poškozená živá členství, cykly výrazů i nakonfigurované limity práce, paměti či rekurze selžou, dřív než publikace PNG
Afinní matice appearance i nenulové počátky BBox si pod těmi příznaky uchovají běžné přizpůsobení; extrémně malý render scale může pořád učinit počáteční stránkovou matici Cairo číselně neinvertovatelnou
Renderovaná stránka použije průnik MediaBox/CropBox, zděděné page boxy i čtvrtotáčkové Rotate a UserUnit stránky; scale 1 vytvoří jeden pixel na efektivní bod stránky, s rozměry povrchu zaokrouhlenými nahoru
Operátor sh maluje funkční, axiální i radiální shadings (ShadingTypes 1–3), se dvouvstupovými doménami, shading maticemi, výběrem radiálního kruhu, konci Extend, BBox i stávajícími clipy cest
Podporované barevné funkce i pole skalárních funkcí konvertují přes zdrojové barvy zařízení, kalibrované, ICC Lab/XYZ i Separation/DeviceN; aktuální fill opacity, blend režimy, soft masky grafického stavu i knockout transparency skupin platí pro výsledný shading
Aktuální cesta i barva se zachovají; Background shadingu ignoruje sh a AntiAlias je hint zařízení s barevným vzorkováním ve středu pixelu
Nepodporované položky ExtGState i nepodporované obsahové operátory zůstávají mimo tenhle profil
Trojúhelníkové mesh shadings
ShadingTypes 4 a 5 malují volné i mřížkové Gouraud trojúhelníkové meshe se znovupoužitím hran, libovolnou mřížkovou geometrií, bajtově zarovnanými vrcholovými záznamy, přesností souřadnic až po 32 bitů i přesností složek po 16 bitů
Složky vrcholů interpolují ve střidech pixelů zařízení, dřív než konverzi barev; volitelná jedno vstupní funkce či pole složkových funkcí vyhodnotí interpolovaný parametr, tedy i kalibrované, ICC i speciální barevné prostory
Indexované zdroje zaokrouhlí interpolované indexy na nejbližší paletovou položku; hexadecimální vyhledávací řetězce se dekódují jednou s bílými znaky, číslicemi smíšené velikosti i doplněním lichého závěrečného nibble, zatímco literální vyhledávací řetězce si uchovají dekódované bajty
Aktuální transformace, ořez, BBox, fill opacity, blend režim, soft masky, nemalující koloranty i knockout skupin platí pro dokončený mesh; držené stream bajty, dočasný povrch stránky i dvě mřížkové řady se přidávají do přijímání pracovní paměti
Parsování vrcholů, rasterizace trojúhelníků i funkce sdílejí agregátní operace i dotazování zrušení; poškozené či useknuté záznamy i nekompletní mřížkové řady selžou, dřív než publikace výstupu
Zaměřená akceptace kontroluje uzavřené barycentrické rovnice i samostatné výstupy MuPDF a Poppler; důkazní záznamy drží selhání zdrojových čteček odděleně pro padding vrcholů, nepoužité příznakové bity i transparentnost meshů a používají explicitní alternativní čtečky rovnic pro nemalující barvy i normalizované hodnoty Indexed
Coons a tensor patch meshe
ShadingTypes 6 a 7 malují kubické hranice Coons i tensorové kontrolní sítě, se znovupoužitím předcházející hrany, bajtově zarovnanými záznamy, sémantikou příznaků dvou nejnižších bitů a stejnou přesností souřadnic i složek jako trojúhelníkové meshe
Rohové složky interpolují bilineárně v parametrech patche, dřív než volitelné funkce i konverze barev; hranice Coons se povýší na ekvivalentní bikubickou Bernstein síť, jejíž meze druhých derivátů vyberou subdivize s geometrickou chybou nejvýše 0.125 výstupního pixelu
Polynomiální inverze dolaďuje pixelové parametry; složené pokrytí vybere největší parametr v a pak při shodě v největší u, zatímco pozdější patche nahradí dřívější barvy, dřív než dokončený shading dostane objektovou transparentnost
Sdílený mesh compositor aplikuje ořez, BBox, shading patterny, nemalující koloranty, opacity, blending, soft masky i knockout skupin; dvě subdivizní řady i per-pixel pole parametrů a pořadí se přidávají do aktivního přijímání pracovních bajtů
Parsování kontrolních bodů, subdivize, rasterizace i barevné funkce sdílejí limity operací i zrušení; zaměřená akceptace používá nezávislé rovnice Coons a tensorů i kubické kořeny pro složené patche, se zaznamenanými selháními zdrojových čteček odděleně od běžné verifikace rovnicových stránek RGB
Zděděný textový stav
Podřízené streamy Form, Type3 i pattern zdědí příslušný font objekt, velikost písma, character spacing, word spacing, horizontální scale, proklad, rendering režim i rise ze svého počátečního grafického stavu; podřízený resource se stejným názvem písma nenahradí zděděné písmo, dokud ho lokální Tf nevybere
Uložený grafický stav obnoví textové parametry a operátory TD i dvojité uvozovky si pro následné podřízené streamy uchovají změny prokladu i spacingu; každý potomek začíná vlastními textovými maticemi
Nezávislá anotační appearance začínají defaultními textovými parametry, aniž by držela finální textový stav obsahu stránky
Text Type3 v rendering režimu 3 nepřispívá žádnou viditelnou glyfovou grafikou; zaměřený důkaz vnořeného textu Type3 drží odchylku defaultních parametrů MuPDF odděleně od rovnic zděděného stavu, zatímco Poppler se v těch fixturách řídí zděděnými parametry
Tiling a shading patterny
Barevné prostory patternů podporují barevné i nebarevné tiling patterny, TilingType 1–3, shading patterny, PatternMatrix, BBox buňky, kladné či záporné rozestupy, výběr patternu, obnovení uloženého stavu i malování výplní či tahem
Nebarvené patterny získají své složky z podporovaného základního barevného prostoru a můžou malovat image stencil; explicitní změny barev, barevné obrázky i přímé shadings uvnitř nebarvené definice jsou neplatným PDF obsahem a odmítnou se i skrz vnořené Form a procedury Type3
Vybrané patterny si uchovají výchozí souřadnicový prostor content streamu, který rozřešil jejich definici; pozdější operace cm i zděděný pattern použitý uvnitř Form ten počátek nevymění
Definice začínají počátečním podporovaným grafickým stavem rodiče i defaultními parametry transparentnosti; tiling definice tvoří neizolovanou ne-knockout skupinu, zatímco shading definice používají object knockout
Průhledné a překrývající se tiling buňky se vyhodnocují vůči aktuálnímu pozadí; vstupní alpha objektu i blend režim se aplikují jednou při malování dokončeného patternu, tedy i u vnořených patternů, textu, tahů i masek obrázků
ExtGState shading patternu doplní podporované shading parametry, tedy i opacity a soft masky; Background se maluje, dřív než shading, BBox ořízne oba příspěvky a nemalující barvy None nepřispějí ani barvou, ani tvarem
Vyhodnocení patternu přijme dva stránkové povrchy i dekódovaný obsah buněk, ohraničí enumeraci viditelných buněk na aktuální clip a dotazuje zrušení při renderování buněk i odstraňování příspěvku pozadí
Zaměřené fixtury porovnávají uzavřené rovnice souřadnic, barev i skládání s nativními pixely i výstupem nezávislých čteček; důkazní soubory drží rozdíly čteček pro zděděné počátky Form patternů, opacity ExtGState shading patternů i nemalující barvy None, se samostatnými běžnými vektorovými rovnicovými stránkami pro ty case
CID-keyed písma CFF
Vložené fonty CIDFontType0 rozřeší skutečné CFF CID v samostatných i OpenType kontejnerech, tedy i neidentitní mapování, CID 65535, vložené CMap kódování, vertikální počátky W2, transformované obrysy i ořez textu
Samostatné řezy CFF se načítají podle CID a SFNT zabalené řezy podle kompaktního glyfového indexu; most použije správné rozložení face FreeType pro Linux LP64 i Windows LLP64
Nemapovaný znakový kód či chybějící vyžádaný CID konzultuje notdefchar a notdefrange pro původní kód a pak použije povinný glyf CID 0, když náhrada chybí; rozsahy mají konstantní CID cíle, znakové položky mají přednost a přítomné glyfy si uchovávají vyžádané CID
Zaměřená akceptace použije deklarované polygonové kontury i rovnice počátků pro 28 platných zdrojů, se samostatnými porovnáními MuPDF a Poppler i běžnými rovnicovými stránkami RGB
Důkazní soubory drží rozdíly zdrojových čteček pro výběr glyfů CID-keyed OpenType i vynechané substituce notdef; alternativa s vynecháním se měří samostatně a nenahrazuje povinnou nativní zdrojovou rovnici
Meze a zrušení
Přesná vestavěná kódování Type0 pokrývají všech 200 přibalených názvů kódování: Identity-H a Identity-V, šestnáct mapování UCS2 a UTF16 a 182 dodatečných legacy i Unicode map s rozvinutými vertikálními přepisy znaků
Smíšené operandy jednoho až čtyř bajtů použijí per-bajt meze codespace i zotavení z neplatného kódu nejdéle odpovídající předponou; dekódování i zpětné kódování UTF8 a UTF32 zachovává supplementární skaláry i významné úvodní nulové bajty
Streamy kódování a ToUnicode rozřeší tělové usecmap i slovníkové UseCMap názvy či streamy, s předností slovníku a lokálními přepisy znaků, rozsahů, Unicode sekvencí i notdef
Každý podřízený CMap si drží vlastní režim zápisu, defaultně horizontální, když WMode chybí; explicitní vertikální režim vybere zděděná mapování i vertikální metriky písma
Dědění CMap používá thread-lokální limity vnořené hloubky, aniž by měnila rozložení THPDFCMapBounds; cykly, poškození rodiče i nadměrná hloubka selžou, dřív než publikace výstupu a bloky finally obnoví limity po zrušení či výjimkách
Zaměřený důkaz drží selhání pojmenovaných zdrojů UTF8 a UTF32 v nezávislé čtečce bez těch vestavěných tabulek, verifikuje samostatné companion vložených map a zaznamenává rozdíly zdrojového textu, když víc kódů vybere totéž CID
Tests/Linux/Run-HeadlessLegacyCMapAcceptance.sh postaví a otestuje přesné intervaly kódování, zdrojová PDF smíšené šířky, vnořené renderování, izolaci vláken i zotavení po zrušení na nativním Linuxu
Tests/Linux/Run-HeadlessLegacyCMapWindowsAcceptance.py spustí odpovídající nativní Windows spustitelné soubory, zaznamená hash zdrojů, binárek, PNG i diagnostiky a pak přenese pevné zachycení do nativního Linux úložiště pro samostatné kontroly MuPDF a Poppler
Zabalené mapy si uchovávají hash svých resource i kompletní redistribuční notice; licenci CMap dat držte se zdrojovými i binárními distribucemi
Hexadecimální escapování v hodnotách PDF názvů i operandech názvů obsahu se dekóduje jednou, dřív než rozřešení písem, barevných prostorů, blend režimů i resource; literální hash vzniklý dekódováním zůstává součástí sémantického názvu
Sdílený font dekodér aplikuje tu sémantiku na hodnoty slovníku písma, pojmenovaná kódování, glyfové názvy Differences i CIDToGIDMap, aniž by měnil vypůjčené objekty či dekódoval řetězcové hodnoty
Escapované názvy rendererů použijí lineární dekódování, dočasné přijímání pracovních bajtů, agregátní limity operací i dotazování zrušení; zaměřená akceptace porovnává ekvivalentní nativní PNG bajty i text plus nezávislý výstup MuPDF a Poppler
Raster práce shadings i barevné funkce sdílejí agregátní limity operací i dotazování zrušení; dočasný povrch i cache přesných souřadnic nejvýše 8 192 konvertovaných barev se přidávají do aktivního přijímání pracovních bajtů
Zaměřená akceptace shadings použije uzavřené rovnice geometrie/funkcí/barev i samostatné vektorové rovnicové stránky, s držením rozdílů zdrojových čteček pro ořez BBox, degenerovanou geometrii, konverzi barev, speciální názvy kolorantů i tessellaci knockoutu
Volby ohraničují pixely povrchu, aktivní spravované buffery, kumulativní dekódované bajty, kódované PNG bajty, práci tokenů i operátorů a rekurzivní či graficko-stavovou hloubku
Dekódování písem používá konzervativní přijímací příspěvky: 32 MiB tranzitní kapacity, 64násobek dekódované velikosti font streamu, 128násobek rekurzivně kontrolovaných slotů polí a dvojnásobek drženého odhadu dekodéru v aktivním agregátu
CID tabulky přijmou 65 536 držených položek; enumerace ohraničí skutečné charstringy a pole notdef se přidávají do účtování deep-copy dekodéru i držených bajtů
Parsování CMap i vyhledávání notdef sdílejí thread-lokální, vnořené meze položek i dotazování práce; scopy rendereru sdílejí agregátní limity tokenů i operací a dlouhé lexikální skeny dotazují nejvýše každých 256 bajtů
Interpret navíc zarezervuje kapacitu Unicode sekvencí na glyf ze vstupních operandových bajtů i nejdelšího mapování ToUnicode, dřív než vytvoří glyfové záznamy, takže opakovaná dlouhá mapování nemohou obejít přijímání pracovní paměti
Malý rozpočet pracovní paměti může odmítnout jednoduché písmo, i když by jeho případná alokace vešla; ty kontroly pokrývají spravované buffery i CPU image povrchy, zatímco Cairo, cache Fontconfig, FreeType i celkové RSS procesu leží mimo účtování
Povrchy transparentnosti, soft masek, pozadí, opacity i objektového knockoutu se přidávají do aktivního rozpočtu povrchů; přenosové funkce sdílejí agregátní rozpočet operací, kodeky ICC i obrázků používají konzervativní přijímání a nativní JBIG2 dekodér kumulativně ohraničuje alokaci bitmap/kontextů a dotazuje zrušení během dekódování
Traversaly doplňkového CMY, černé i geometrických tvarů sdílejí agregátní limity operací, dekódování i zrušení; profily používající tentýž rozřešený stream sdílejí jednu validovanou transformaci i aktivní rezervaci přijímání, dokud render stránky neskončí
Držené funkční streamy, vyhodnocování funkcí i záznamy grafického stavu se přidávají do přijímání pracovních bajtů; rekurzivní tint funkce, vícerozměrná interpolace i instrukce kalkulačky sdílejí limity operací i zrušení
Vypůjčený cancellation token se dotazuje během ohraničeného dekódování, tokenizace, operátorů, volání glyfového resolveru, řádků obrázků, rekurze, kódování PNG i před publikací; jeho životnost vlastní volající
Renderer kontroluje permission pro extrakci přes vypůjčenou dokumentovou politiku a zachovává hodnoty zdrojových objektů i zdrojové bajty
Vlastnictví výstupu
HPDFRenderHeadlessPagePNG dokončí render i kódování PNG soukromě, dřív než zapíše do streamu vlastněného volajícím; finální selhání I/O streamu může ponechat už přijaté bajty
HPDFRenderHeadlessPagePNGFile zkontroluje identitu zdroje, výhradně vytvoří staging soubor v cílovém adresáři, flushne ho, znovu zkontroluje identitu i zrušení a atomicky vymění cíl
Windows publikace použije nejvýše osm atomických pokusů o náhradu a sedm čekání po 1, 2, 4, 8, 16, 16 a 16 milisekundách, přičemž opakuje jen chyby access-denied, sharing-violation a lock-violation; zrušení se kontroluje před každým pokusem i na obou stranách každého čekání
Neúspěšná Windows publikace reportuje zachycený finální Windows chybový kód přes EHPDFHeadlessRenderError; zrušení si uchová cancellation diagnostiku rendereru a žádná cesta nesmaže existující cíl ani nepadá na neatomické kopírování
Selhání renderu, rozpočtu, zrušení i stagingu zachovají existující cíl a odstraní vlastněné nepublikované staging soubory; aliasy zdrojové cesty i hardlinků se odmítají
Akceptace
Windows runtime akceptace používá odpovídající nativní konzolové spustitelné soubory a izolovanou, SHA-256 pinnutou přenosnou importní uzávěru DLL; samostatný proces WSL provede nezávislé pixelové, rovnicové i geometrické kontroly MuPDF a Poppler proti PNG souborům vytvořeným na Windows
Windows substituty standardních písem použijí explicitní Cairo GDI řezy pro Unicode text i skutečné obrysy, tedy i ořez i režimy výplně a tahu; vložená písma si uchovávají své glyfové mapování FreeType
Volání OpenJPEG použijí Windows stdcall ABI i Win32 dekorované exporty, zatímco callbacky streamů i zpráv si uchovávají konvenci C callbacků
Tests/Linux/Run-HeadlessCairoAcceptance.sh provede čerstvé nativní ELF sestavení, vymaže DISPLAY a WAYLAND_DISPLAY, odmítne přímo linkované desktopové knihovny a spustí nezávislé orákuly pypdf/MuPDF
Fixtury zkoušejí standardní písma, Unicode TrueType, Type3, všechny textové rendering i blend režimy, alpha i knockout, RGB transparency skupiny, hloubky vzorků i Decode, masky obrázků i Matte, barvy Indexed i ICC, terminální kodeky, šifrované řetězce filtrů AES, geometrii stránek, anotační transformace, rozpočty, zrušení, zachování zdroje i atomický výstup
Počítadla popisuje THPDFHeadlessRenderResult a zpracování chyb EHPDFHeadlessRenderError