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