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