Native Linux Cairo-renderare

HPDFHeadlessCairoDevice renderar en laddad PDF-sida till en RGB PNG med Cairo-bildytor och FreeType, utan någon displayserver eller PDF-läsare

Tillför en seriell lånad vy från THPDFHeadlessDocument.GetRenderAccess(PageIndex) och håll dokumentet laddat och oförändrat tills renderingen returnerar

Document := THPDFHeadlessDocument.Create;
try
  Document.LoadFromFile('input.pdf');
  Options := THPDFHeadlessRenderOptions.Default;
  Info := HPDFRenderHeadlessPagePNGFile(
    Document.GetRenderAccess(0), 'page.png', Options);
finally
  Document.Free;
end;

Körtidsberoenden

Native Linux använder libcairo.so.2, libfreetype.so.6 och leverantören av standardteckensnitts Fontconfig-beroende; installera lämpliga teckensnitt för ersättning av Helvetica, Times och Courier

HOTPDF_CAIRO_LIBRARY och HOTPDF_FREETYPE_LIBRARY kan välja explicita kompatibla bibliotekssökvägar före första renderingen; lyckade moduler förblir inlästa eftersom nativa teckensnittscachar kan behålla förstörelsecallbacks

Värden måste hålla sin HotPDF-körbara fil, DLL eller paketkod inläst medan de nativa cacharna kan behålla HotPDF-callbacks för teckensnittsförstörelse; att lossa en värdmodul oberoende av cachens livstid ligger utanför denna profil

Windows använder kompatibla libcairo-2.dll och libfreetype-6.dll via samma brygga; körtidsbinärer och deras licensiering tillhandahålls av applikationen

ICCBased-färger läser dessutom in liblcms2.so.2; JPEG använder libturbojpeg.so.0 och JPEG 2000 använder en OpenJPEG 2.5-kompatibel libopenjp2.so.7; dessa beroenden läses bara in för motsvarande indata

HOTPDF_LCMS_LIBRARY, HOTPDF_TURBOJPEG_LIBRARY och HOTPDF_OPENJPEG_LIBRARY åsidosätter de sökvägarna; standard på Windows är lcms2.dll, turbojpeg.dll och openjp2.dll

Renderingsprofil

Stött innehåll omfattar path-konstruktion och målning, fyllnadsreglerna nonzero och even-odd, klippning, nästlat grafiktillstånd, CTM-transformeringar, linjestil, DeviceGray/RGB/CMYK-färger, normal alfa och upprepade Form XObjects med egna resurser, Matrix och BBox

Linjebredder får vara noll: PDF-hårlinjer som begärs med 0 w eller ExtGState LW=0 använder ett streck om en pixel i enhetsrymden; negativa bredder avvisas

ExtGState D och innehållsströmmens d-operator delar avgränsad streckvalidering: heldragna tomma mönster, repetition med udda längd, poster med längd noll, fraktionella längder och teckensatta faser stöds

Ett streckmönster tillåter högst 256 ändliga icke-negativa längder upp till 1e9, med minst en positiv längd när det inte är tomt och en ändlig fas vars absolutvärde är högst 1e9; varje element förbrukar operationsarbete och temporär lagring räknas in i arbetsminnesbudgeten

Operandarrayer accepterar PDF-kommentarer, inklusive numeriska streckarrayer och TJ-textarrayer; felformade lexikala värden och saknade avslutande hakparenteser behålls av den gemensamma skannern och avvisas av renderaren i stället för att tyst försvinna

Horisontell text använder den gemensamma glyftolken för textmatriser, explicita PDF-bredder, kanoniska Helvetica/Times/Courier-bredder, tecken- och ordavstånd, horisontell skala och TJ-justeringar

Inbäddade stödda teckensnittsprogram använder FreeType med uppslagna glyf-ID:n; Unicode ToUnicode-mappningar förblir tillgängliga via dokumentets text-API, medan rastformerna för standardteckensnitt beror på installerade ersättare

Sammansatt text stöder Identity-H, Identity-V, explicita inbäddade encoding-CMap-strömmar och inbyggda UniJIS-, UniGB-, UniCNS- och UniKS UCS2/UTF16-mappningar i horisontell och vertikal riktning; separat installerade CMap-resurser krävs inte

Vertikal glyfmålning respekterar standard- och explicita DW2/W2-positioneringsvektorer, textlyft, horisontell skala, text- och grafikmatriser samt TJ-förskjutning; UTF-16-mappningar accepterar tilläggsteckenkoder

Alla åtta textrenderingslägen stöds, inklusive vertikala fill/stroke/osynliga konturer som ackumuleras i klippet vid ET; inbäddade encoding-CMap-strömmar behåller sin WMode och icke-identitets-CID-mappningar

Transparenta kombinerade fill-and-stroke-operationer använder object knockout-komponering så att överlappande fyllnad inte läcker genom strecket; Type3-glyfprocedurer exekverar egna avgränsade resurser och fontmatriser

Bilder accepterar 1/2/4/8/16-bitars sample och Decode-arrayer, stencil-, explicita-, color-key- och soft masks, masker av olika storlek samt Matte-återhämtning; saknad Interpolate använder nearest-neighbor-sampling och true väljer bilinjär sampling

JPX-kodströmmar accepterar signerade eller osignerade källkomponenter upp till 26 bitar, inklusive blandad precision, sub-sampling och explicit opacitet, och normaliserar till avgränsade 8- eller 16-bitars sample; bilddictionaryns BitsPerComponent och icke-stencil Decode-poster ignoreras för JPX-bilder enligt PDF-bildprofilens krav

Indexerade paletter och validerade ICCBased profil-till-sRGB-transformeringar stöds för bilder och path-färger; DeviceCMYK utan profil behåller den enkla enhetskonverteringen

ICCBased-transformeringar accepterar Gray-, RGB-, CMYK-, Lab- och XYZ-profilsignaturer och validerar strikt deklarerat komponentantal och komponentintervall

Lab-profiloperatorer använder fysiska L a b-koordinater med standardintervallen [0 100 -128 127 -128 127]; XYZ-operatorer använder fysiska X Y Z-koordinater med ett standardintervall utan tecken i 1.15-format, [0 65535/32768] per komponent

XYZ-profilindata är en native kompatibilitetsutökning och innebär inte överensstämmelse med arkiv-PDF; Lab- och XYZ-källprofiler väljer inte något stött transparent blandningsutrymme

En ICC-ströms Range kräver två ändliga ordnade värden per komponent och begränsar färgoperatorer; råa bild-Decode-standarder och Indexed-uppslagsvärden använder de komponentintervallen

CalGray, CalRGB och Lab stöder paths, text, bilder och Indexed-palettbaser; parametrar valideras strikt, CalRGB Matrix-poster följer PDF:s kolumnordning, och Lab-komponenter samt bild-Decode-standarder använder de deklarerade intervallen

CIE-färger använder Bradford-kromatisk anpassning och relativ sRGB-utdata; BlackPoint-metadata valideras, medan ytterligare black point-kompensation och policyer för rendering-intent-tillstånd förblir separata utökningar

Sammansatta Separation- och DeviceN-färger behåller en till trettiotvå tonungskomponenter för paths, text, Indexed-baser och packade bilder; enhets- eller CIE-alternativfärger använder avgränsade sampled-, exponentiella-, stitching- eller kalkylator-tonungsfunktioner

ICCBased Lab/XYZ- och CalGray/CalRGB/Lab-alternativfärgkällor behåller sina fysiska koordinater genom tonungstransformeringen före konvertering till en stödd transparensgrupp

Flerdimensionella sampled-tonungsfunktioner stöder linjär och kubisk interpolation, Domain, Encode, Decode, utdata-Range och packade sample-djup upp till 32 bitar; kubisk utvärdering utökar den befintliga skalära fyra-knot-konventionen med tensorprodukter, med linjär reserv för korta dimensioner samt avgränsat arbete och avbrott

Se Native sampled-färgfunktioner för interpolationskonventioner samt separata formel- och läsarbelägg

Separation None och DeviceN-rymder som bara innehåller None-färgämnen bidrar varken med färg eller knockoutform; blandade None-komponenter når fortfarande den alternativa tonungstransformeringen

Separation All tillämpar sin tonung på alla tillgängliga utdatafärgämnen, med neutral RGB-sidutdata och varje processkomponent behållen inom CMYK-grupper

CMYK-grupper tar emot ursprungliga fyra-komponents alternativa tonungsvärden före blandning; separationsplattor för spotfärger, NChannel process-/färgämnesval och simulering av blandningsledtrådar förblir separata utökningar

Terminalbild-callbacken bevarar dokumentdekryptering och föregående strömfilter före nativ avkodning av JPEG, JPEG 2000, CCITT eller JBIG2; JBIG2 stöder aritmetisk och Huffman-text, MMR och delade globala dictionaries

JPEG 2000 stöder sub-samplade och signerade komponenter, härledda färg- och sample-deklarationer, inbäddade ICC-profiler, explicita färgrymdsåsidosättningar samt separat eller associerad opacitet via SMaskInData; dess komponentvärden normaliseras till åtta eller sexton bitar och dess bild-Decode-array ignoreras

Inbäddade eller explicita Lab/XYZ ICC-profiler använder fysiska komponentintervall; associerad opacitet tas bort från normaliserade lagrade sample innan den fysiska koordinatmappningen tillämpas, med Lab-offsetkanaler bevarade

Grafiktillståndets SMask stöder Alpha- och Luminosity-grupper, bakplanfärger, Form-matriser, återställning av sparat tillstånd samt sampled-, exponentiella-, stitching- och avgränsade kalkylator-överföringsfunktioner; en bilds egen soft mask åsidosätter grafiktillståndets soft mask

Alla sexton standardiserade PDF-blandningslägen stöds; Form- och sidgrupper stöder isolerad och icke-isolerad komponering, object knockout samt blandningsutrymmena DeviceGray, DeviceRGB, DeviceCMYK, CalGray, CalRGB eller ICCBased med en, tre och fyra komponenter

Kalibrerade grupper behåller nativa komponentvärden till en gruppgräns och accepterar enhets- eller Lab-källfärger via inversa kalibrerade transformeringar; Lab är i sig inte ett giltigt blandningsutrymme

Kalibrerade Luminosity-masker behåller sina grupprkoordinater och utvärderar CIE XYZ-Y, inklusive gruppens opacitet och bakplanfärger, innan överföringsfunktionen tillämpas

Knockout-komponering håller objektets geometriska form skild från soft mask-opacitet; stencilhål bevarar föregående objekt medan en maskerad path ersätter dem i hela sin målade geometri

Nästlade knockoutgrupper behåller unionen av sina barns geometriska former, inklusive objekt med nollopacitet; icke-isolerade barngrupper använder den omslutande knockoutgruppens ursprungliga bakplan

CMYK-grupper bevarar komplementära CMY- och svartkomponenter i separata avgränsade bildplan och konverterar det kombinerade resultatet vid gruppgränser; icke-separerbara blandningslägen behåller eller ersätter svart enligt valt läge

Icke-isolerade grupper renderar ett ytterligare avgränsat opacitetspass, tar bort det ursprungliga bakplansbidraget och tillämpar gruppens inkommande alfa och blandningsläge en gång; sidtransparensgrupper använder en isolerad yta före komponering på sidbakgrunden

En icke-isolerad Form ärver sitt omslutande blandningsutrymme; en explicit CS-post i gruppen byter inte det ursprungliga bakplanet till ett annat utrymme

Befintliga normal-annoteringsappearances anpassas från sin transformerade BBox till Rect; RenderAnnotations=false utelämnar appearances i båda användningarna

Usage blir hruView som standard, vilket hoppar över Hidden- och NoView-annoteringar samt okända annoteringstyper med Invisible satt; ISO 32000-standardannoteringstyper, inklusive PDF 2.0 RichMedia och Projection, med stödda normal-appearances förblir synliga när bara Invisible är satt

Acceptansen för RichMedia och Projection täcker befintliga statiska normal-appearances med giltiga medietillgångar eller en associerad standard 3D-vy; medieuppspelning och interaktiv 3D-aktivering ligger utanför denna rasterväg

hruPrint målar bara annoteringar med Print satt och Hidden nollställt; Invisible undertrycker okända annoteringstyper i båda användningarna, NoView undertrycker inte utskrift och NoZoom ändrar inte den utskrivna appearance-storleken

När en normal-appearance saknas renderas stödd annoteringsmetadata via en tillfällig appearance; se native annoteringsreserv för geometri, Unicode FreeText, statiska ikoner och återstående gränser

För view-utdata tar annoteringens NoZoom bort renderskalan från appearance-storleken med UserUnit bevarad; NoRotate håller den anpassade appearance:n upprätt genom sidrotation i båda användningarna, och båda bevarar det transformerade övre vänster-Rect-ankaret och sidklippet

Textannoteringar med befintliga normal-appearances beter sig som NoZoom och NoRotate i view-utdata oavsett sina explicita flaggor; utskriftsutdata behåller deras NoRotate-beteende medan NoZoom ignoreras

Usage styr statisk raster-synlighet och annoteringsgeometri; flaggor som bara påverkar interaktion skapar inget hover- eller redigeringsbeteende, och det befintliga callbacket för extraktionsbehörighet förblir nödvändigt utan att ge utskriftsbehörighet

Optional content i statisk utdata

Renderingen konsumerar katalogens standardkonfiguration OCProperties/D, initierar gruppstatusar från BaseState, tillämpar ON- och OFF-åsidosättningar och använder matchande Intent-värden när synligheten avgörs

Medlemskapsdictionaries stöder AnyOn, AllOn, AnyOff och AllOff; rekursiva VE-uttryck stöder And, Or och Not med en operand, där VE har företräde framför den enklare policyn

Null-, otillgängliga och inaktuella gruppreferenser saknar medlemskapseffekt; grupper utanför konfigurationens intent styr inte synligheten, och ett medlemskap eller uttryck utan tillämpliga grupper lämnar innehållet synligt

Nästlat /OC-märkt innehåll, bild- och Form XObjects samt annoteringar respekterar den resulterande statusen; dolda märkta sektioner uppdaterar fortfarande färger, matriser, klippning och textposition, medan dolda hela XObjects och annoteringar kan hoppas över

Vanliga egenskapsdictionaries för märkt innehåll förblir användbara, inklusive nästlade inline-värden; innehållsarrayer bevarar tillståndet för märkt innehåll över sina komponentströmmar, och barnströmmar behåller sin egen nästling av märkt innehåll

Fristående slutlig rastrering använder standardkonfigurationen i både view- och print-lägen utan att automatiskt tillämpa interaktiva AS-användningsrekommendationer, enligt ISO 32000-1:2008 sektion 8.11.4.5; en explicit ViewerState aktiverar rekommendationerna View, Print, Export, Zoom, Language och User med beständigt manuellt val och tillfällig eventstatus

Saknade optional content-egenskaper eller en nil-lånad katalog lämnar optional content-strukturer utan synlighetseffekt; felformade aktiva medlemskap, uttryckscykler samt konfigurerade arbets-, minnes- eller rekursionsgränser misslyckas före PNG-publiceringen

Affina appearance-matriser och BBox-origo skilda från noll behåller sin normala anpassning under dessa flaggor; en extremt liten renderskala kan fortfarande göra Cairos ursprungliga sidmatris numeriskt icke-inverterbar

Den renderade sidan använder MediaBox/CropBox-snittet, ärvda sidrutor och kvartsvarts Rotate samt sidans UserUnit; skala 1 ger en pixel per effektiva sidpunkt, med ytdimensioner avrundade uppåt

Operatorn sh målar funktionsbaserade, axiala och radiella shadings (ShadingTypes 1–3), med två-indata-domäner, shadingmatriser, radiellt cirkelval, Extend-ändpunkter, BBox och befintliga path-klipp

Stödda färgfunktioner och skalära funktionsarrayer konverterar via enhets-, kalibrerade, ICC Lab/XYZ- och Separation/DeviceN-källfärger; aktuell fyllnadsopacitet, blandningslägen, grafiktillståndets soft masks och transparensgruppknockout tillämpas på den resulterande shadingen

Aktuell path och färg bevaras; shadingens Background ignoreras av sh, och AntiAlias är en enhetsledtråd med färgsampling i pixelcentrum

ExtGState-poster och innehållsoperatorer som inte stöds förblir utanför denna profil

Triangelmesh-shadings

ShadingTypes 4 och 5 målar fria och gallerbaserade Gouraud-triangelnät med kantåteranvändning, godtycklig gallergeometri, byte-alignerade hörnposter, koordinatprecision upp till 32 bitar och komponentprecision upp till 16 bitar

Hörnkomponenter interpoleras i enhetspixelcentrum före färgkonverteringen; en valfri funktion med en indata eller en komponentfunktionsarray utvärderar den interpolerade parametern, inklusive kalibrerade, ICC och speciella färgrymder

Indexerade källor avrundar interpolerade index till närmaste palettpost; hexadecimala uppslagssträngar avkodas en gång med blanksteg, siffror i blandad skiftläge och udda avslutande nibble-utfyllnad, medan literala uppslagssträngar behåller sina avkodade byte

Aktuella transformeringar, klippning, BBox, fyllnadsopacitet, blandningsläge, soft masks, icke-målade färgämnen och gruppknockout tillämpas på det färdiga nätet; kvarhållna strömbyte, den tillfälliga sidytan och två gallerrader räknas in i arbetsminnesbudgeten

Hörntolkning, triangelrastrering och funktioner delar sammanlagda operationer och avbrottspollning; felformade eller avhuggna poster och ofullständiga gallerrader misslyckas före utdatapubliceringen

Fokuserad acceptans kontrollerar slutna barycentriska ekvationer och separat MuPDF- och Poppler-utdata; bevisposter håller käll-läsarfel åtskilda för hörnutfyllnad, oanvända flaggbitar och mesh-transparens och använder explicita alternativa läsarekvationer för icke-målade färger och normaliserade Indexed-värden

Coons- och tensor-patch-nät

ShadingTypes 6 och 7 målar kubiska Coons-gränser och tensor-kontrolnät, med återanvändning av föregående kant, byte-alignerade poster, låga-två-bitar-flaggsemantik och samma koordinat- och komponentprecision som triangelnäten

Hörnkomponenter interpoleras bilinjärt i patchparametrar före valfria funktioner och färgkonvertering; Coons-gränser höjs till ett ekvivalent bikubiskt Bernstein-nät, vars andraderivatabegränsningar väljer underindelningar med högst 0,125 utdatapixels geometrifel

Polynomisk inversion förfinar pixelparametrar; vikt täckning väljer den största v-parametern och sedan den största u-parametern vid lika v, medan senare patchar ersätter tidigare färger innan den färdiga shadingen tar emot objekttransparens

Den gemensamma mesh-kompositören tillämpar klippning, BBox, shadingmönster, icke-målade färgämnen, opacitet, blandning, soft masks och gruppknockout; två underindelningsrader samt per-pixel-parameter- och ordningsarrayer räknas in i den aktiva arbetsbyte-budgeten

Kontrollpunktstolkning, underindelning, rastrering och färgfunktioner delar operationsgränser och avbrott; fokuserad acceptans använder oberoende Coons- och tensorekvationer och kubiska rötter för vikt patchar, med käll-läsarfel registrerade åtskilda från den vanliga RGB-ekvationssidesverifieringen

Ärvd textstatus

Form-, Type3- och mönsterbarnströmmar ärver det tillämpliga fontobjektet, teckensnittsstorlek, teckenavstånd, ordavstånd, horisontell skala, leading, renderingsläge och lyft från sitt ursprungliga grafiktillstånd; en barnresurs med samma teckensnittsnamn ersätter inte ett ärvt teckensnitt förrän en lokal Tf väljer det

Sparat grafiktillstånd återställer textparametrar, och operatorerna TD och dubbelcitattecken behåller sina leading- och avståndsändringar för efterföljande barnströmmar; varje barn börjar med sina egna textmatriser

Oberoende annoteringsappearances börjar från standardtextparametrar utan att behålla sidinnehållets slutliga textstatus

Type3-text i renderingsläge 3 bidrar inte med någon synlig glyfgrafik; det fokuserade Type3-beviset för nästlad text behåller MuPDF:s avvikelse i standardparametrar åtskild från de ärvda-tillstånd-ekvationerna, medan Poppler följer de ärvda parametrarna i de fixturerna

Tiling- och shadingmönster

Mönsterfärgrymder stöder färgsatta och ofärgade tiling-mönster, TilingType 1–3, shadingmönster, PatternMatrix, cell-BBox, positivt eller negativt avstånd, mönsterval, återställning av sparat tillstånd samt fyllnads- eller streckmålning

Ofärgade mönster får sina komponenter från en stödd basfärgrymd och kan måla bildstenciler; explicita färgändringar, färgsatta bilder och direkta shadings inuti en ofärgad definition är ogiltigt PDF-innehåll och avvisas även via nästlade Forms och Type3-procedurer

Valda mönster behåller standardkoordinatrymden hos den innehållsström som slog upp deras definition; senare cm-operationer och ett ärvt mönster som används inuti en Form ersätter inte den origon

Definitioner börjar med förälderns ursprungliga stödda grafiktillstånd och standardtransparensparametrar; tiling-definitioner bildar en icke-isolerad icke-knockout-grupp, medan shadingdefinitioner använder object knockout

Transparenta och överlappande tiling-celler utvärderas mot aktuellt bakplan; inkommande objektalfa och blandningsläge tillämpas en gång när det färdiga mönstret målas, inklusive nästlade mönster, text, streck och bildmasker

ExtGState för shadingmönster utökar stödda shadingparametrar, inklusive opacitet och soft masks; Background målas före shadingen, BBox klipper båda bidragen, och icke-målade None-färger bidrar varken med färg eller form

Mönsterutvärdering tillåter två sidytor och avkodat cellinnehåll, begränsar uppräkning av synliga celler till det aktuella klippet och pollar avbrott medan celler renderas och bakplansbidraget tas bort

Fokuserade fixturer jämför slutna koordinat-, färg- och komponeringsekvationer med nativa pixlar och fristående läsareutdata; bevisfiler behåller läsarskillnader för ärvda Form-mönsterorigon, ExtGState-opacitet för shadingmönster och icke-målade None-färger, med separata vanliga vektorekvationssidor för de fallen

CID-nycklade CFF-teckensnitt

Inbäddade CIDFontType0-teckensnitt slår upp riktiga CFF-CID:n i fristående och OpenType-behållare, inklusive icke-identitetsmappningar, CID 65535, inbäddade Encoding-CMaps, vertikala W2-origon, transformerade konturer och textklippning

Fristående CFF-faces läses in via CID och SFNT-omsultade faces via kompakt glyfindex; bryggan använder den korrekta FreeType-face-layouten för Linux LP64 och Windows LLP64

En omappad teckenkod eller frånvarande begärd CID rådfrågar notdefchar och notdefrange för den ursprungliga koden och använder sedan den obligatoriska CID 0-glyfen om ersättningen saknas; intervall har konstanta CID-mål och teckenposter har företräde, medan befintliga glyfer behåller sin begärda CID

Fokuserad acceptans använder deklarerade polygonomtvistningar och origoekvationer för 28 giltiga källor, med separata MuPDF- och Poppler-jämförelser och vanliga RGB-ekvationssidor

Bevisfiler behåller käll-läsarskillnader för CID-nycklat OpenType-glyfval och utelämnade notdef-ersättningar; alternativet för utelämnandet mäts separat och ersätter inte den obligatoriska nativa källekvationen

Gränser och avbrott

Exakta inbyggda Type0-kodningar täcker alla 200 medföljande kodningsnamn: Identity-H och Identity-V, sexton UCS2- och UTF16-mappningar samt 182 ytterligare äldre och Unicode-kartor med utplattade vertikala teckenåsidosättningar

Blandade en- till fyra-byte-operatorer använder per-byte codespace-gränser och återhämtning av ogiltiga koder via längsta prefix; UTF8- och UTF32-avkodning samt omvänd kodning bevarar tilläggsskalärer och betydelsefulla inledande nollbyte

Encoding- och ToUnicode-strömmar slår upp usecmap i brödtexten samt UseCMap-namn eller -strömmar i dictionaryn, med dictionaryns företräde och lokala åsidosättningar för tecken, intervall, Unicode-sekvenser och notdef

Varje barn-CMap behåller sitt eget skrivläge, med horisontellt som standard när WMode utelämnas; explicit vertikalt läge väljer ärvda mappningar och teckensnittets vertikala mått

CMap-arv använder trådlokala nästlingsdjupgränser utan att ändra THPDFCMapBounds-layouten; cykler, felformade föräldrar och överdrivet djup misslyckas före utdatapubliceringen, och finally-block återställer gränserna efter avbrott eller undantag

Fokuserat bevis behåller namngivna UTF8- och UTF32-källfel i en fristående läsare utan de inbyggda tabellerna, verifierar separata inbäddade kartkompanjoner och registrerar skillnader i källtext när flera koder väljer samma CID

Tests/Linux/Run-HeadlessLegacyCMapAcceptance.sh bygger och testar exakta kodningsintervall, käll-PDF:er med blandad bredd, nästlad rendering, trådisolering och avbrottsåterhämtning på native Linux

Tests/Linux/Run-HeadlessLegacyCMapWindowsAcceptance.py kör matchande nativa Windows-program, registrerar hashar för källa, binär, PNG och diagnostik och överför sedan fasta fångster till native Linux-lagring för separata MuPDF- och Poppler-kontroller

De packade kartorna bevarar sina resurshashar och fullständiga vidaredistributionsnotiser; behåll CMap-datalicensen med käll- och binärdistributioner

Hexadecimala escapes i PDF-name-värden och innehållsnamnsoperatorer avkodas en gång före uppslag av teckensnitt, färgrymder, blandningslägen och resurser; en literal hash som skapas vid avkodningen förblir del av det semantiska namnet

Den gemensamma teckensnittsavkodaren tillämpar dessa semantik på font dictionary-värden, namngivna kodningar, Differences-glyfnamn och CIDToGIDMap, utan att ändra lånade objekt eller avkoda strängvärden

Escapade renderarnamn använder linjär avkodning, tillfällig arbetsbyte-antagning, sammanlagda operationsgränser och avbrottspollning; fokuserad acceptans jämför ekvivalenta nativa PNG-byte och text plus fristående MuPDF- och Poppler-utdata

Shading-rasterarbete och färgfunktioner delar sammanlagda operationsgränser och avbrottspollning; den tillfälliga ytan och en exakt-koordinat-cache med högst 8 192 konverterade färger räknas in i den aktiva arbetsbyte-budgeten

Fokuserad shading-acceptans använder slutna geometri-/funktions-/färgekvationer och separata vektorekvationssidor och behåller käll-läsarskillnader för BBox-klippning, degenererad geometri, färgkonvertering, speciella färgämnesnamn och knockout-tessellering

Options begränsar ytpixlar, aktiva hanterade buffertar, kumulativa avkodade byte, kodade PNG-byte, token- och operatorarbete samt rekursivt eller grafiktillståndsdjup

Teckensnittsavkodning använder konservativa antagningsutrymmen: 32 MiB övergående kapacitet, 64 gånger avkodad fontströmstorlek, 128 gånger rekursivt kontrollerade arrayplatser och två gånger den kvarhållna avkodarens uppskattning i den aktiva summan

CID-tabeller tillåter 65 536 kvarhållna poster; uppräkningen begränsar riktiga charstrings, och notdef-arrayer räknas in i avkodarens djupkopia- och kvarhållen-byte-redovisning

CMap-tolkning och notdef-uppslag delar trådlokala, nästlade postgränser och arbetspollning; renderarscopes delar sammanlagda token- och operationsgränser, och långa lexikala skanningar pollar högst var 256 byte

Tolken reserverar också per-glyf Unicode-sekvenskapacitet utifrån indata-operatorbyte och den längsta ToUnicode-mappningen innan glyfposter skapas, så att upprepade långa mappningar inte kan kringgå arbetsminnesantagningen

En liten arbetsminnesbudget kan avvisa ett enkelt teckensnitt även när dess slutliga allokering skulle rymmas; dessa kontroller täcker hanterade buffertar och CPU-bildytor, medan Cairo, Fontconfig, FreeType-cachar och processens totala RSS ligger utanför redovisningen

Ytor för transparens, soft mask, bakplan, opacitet och object knockout räknas in i den aktiva ytbudgeten; överföringsfunktioner delar den sammanlagda operationsbudgeten, ICC- och bildcodecs använder konservativ antagning, och den nativa JBIG2-avkodaren begränsar bitmapp-/kontextallokering kumulativt och pollar avbrott under avkodningen

Genomgångar av komplementär CMY, svart och geometrisk form delar de sammanlagda operations-, avkodnings- och avbrottsgränserna; profiler som använder samma uppslagna ström delar en validerad transformering och aktiv antagningsreservation tills sidrenderingen är klar

Kvarhållna funktionsströmmar, funktionsutvärdering och grafiktillståndsposter räknas in i arbetsbyte-budgeten; rekursiva tonungsfunktioner, flerdimensionell interpolation och kalkylatorinstruktioner delar operations- och avbrottsgränser

Den lånade cancellation token pollas under avgränsad avkodning, tokenisering, operatorer, glyfuppslagaranrop, bildrader, rekursion och PNG-kodning samt före publiceringen; anroparen äger dess livstid

Renderaren kontrollerar extraktionsbehörighet via den lånade dokumentpolicyn och behåller källobjektvärden och källbyte

Ägande av utdata

HPDFRenderHeadlessPagePNG avslutar rendering och PNG-kodning privat innan skrivning till en anroparägd ström; ett slutligt ström-I/O-fel kan behålla redan accepterade byte

HPDFRenderHeadlessPagePNGFile kontrollerar källidentitet, skapar exklusivt en staging-fil i målkatalogen, spolar den, kontrollerar identitet och avbrott igen och ersätter destinationen atomärt

Windows-publicering använder högst åtta atomära ersättningsförsök och sju väntan om 1, 2, 4, 8, 16, 16 och 16 millisekunder och försöker igen bara vid fel av typerna access denied, sharing violation och lock violation; avbrott kontrolleras före varje försök och på båda sidor om varje väntan

Misslyckad Windows-publicering redovisar den fångade slutliga Windows-felkoden via EHPDFHeadlessRenderError; avbrott behåller renderarens avbrottsdiagnos, och ingen av vägarna tar bort den befintliga destinationen eller faller tillbaka på icke-atomär kopiering

Renderings-, budget-, avbrotts- och stagingfel bevarar en befintlig destination och tar bort egna opublicerade staging-filer; källsökvägs- och hårdlänkalias avvisas

Acceptans

Windows körtidsacceptans använder matchande nativa konsolprogram och en isolerad, SHA256-försluten portabel DLL-importslutning; en separat WSL-process kör fristående MuPDF- och Poppler-kontroller av pixlar, ekvationer och geometri mot de Windows-producerade PNG-filerna

Windows-ersättare för standardteckensnitt använder explicita Cairo GDI-faces för Unicode-text och riktiga konturer, inklusive klippning och fill-and-stroke-lägen; inbäddade teckensnitt behåller sin FreeType-glyfmappning

OpenJPEG-anrop använder Windows stdcall-ABI och Win32-dekorerade exporter, medan ström- och meddelandecallbacks behåller C-callback-konventionen

Tests/Linux/Run-HeadlessCairoAcceptance.sh utför färska nativa ELF-byggen, tömmer DISPLAY och WAYLAND_DISPLAY, avvisar direkt länkade skrivbordsbibliotek och kör fristående pypdf/MuPDF-oraklar

Fixturerna övar standardteckensnitt, Unicode TrueType, Type3, alla textrenderings- och blandningslägen, alfa och knockout, RGB-transparensgrupper, sample-djup och Decode, bildmasker och Matte, Indexed- och ICC-färger, terminalcodecs, AES-krypterade filterkedjor, sidgeometri, annoteringstransformeringar, budgeter, avbrott, källbevarande och atomär utdata

Se THPDFHeadlessRenderResult för räknare och EHPDFHeadlessRenderError för felhantering