Renderer Cairo nativo su Linux
HPDFHeadlessCairoDevice esegue il rendering di una pagina PDF caricata in un PNG RGB usando superfici immagine Cairo e FreeType, senza display server né lettori PDF
Passate una vista borrowed seriale ottenuta da THPDFHeadlessDocument.GetRenderAccess(PageIndex) e tenete il documento caricato e invariato finché il rendering non restituisce
Document := THPDFHeadlessDocument.Create;
try
Document.LoadFromFile('input.pdf');
Options := THPDFHeadlessRenderOptions.Default;
Info := HPDFRenderHeadlessPagePNGFile(
Document.GetRenderAccess(0), 'page.png', Options);
finally
Document.Free;
end;
Dipendenze a runtime
Linux nativo usa libcairo.so.2, libfreetype.so.6 e la dipendenza Fontconfig del provider di font standard; installate font adatti alla sostituzione di Helvetica, Times e Courier
HOTPDF_CAIRO_LIBRARY e HOTPDF_FREETYPE_LIBRARY permettono di scegliere percorsi espliciti di librerie compatibili prima del primo rendering; i moduli caricati con successo restano in memoria perché le cache native dei font possono trattenere callback di distruzione
L'host deve mantenere caricato il proprio eseguibile HotPDF, la DLL o il codice del package finché quelle cache native possono trattenere i callback di distruzione dei font HotPDF; scaricare un modulo host indipendentemente dal ciclo di vita della cache resta fuori da questo profilo
Windows usa libcairo-2.dll e libfreetype-6.dll compatibili attraverso lo stesso bridge; i binari a runtime e le relative licenze sono a carico dell'applicazione
I colori ICCBased caricano inoltre liblcms2.so.2; JPEG usa libturbojpeg.so.0 e JPEG 2000 usa una libopenjp2.so.7 compatibile con OpenJPEG 2.5; queste dipendenze vengono caricate solo per gli input corrispondenti
HOTPDF_LCMS_LIBRARY, HOTPDF_TURBOJPEG_LIBRARY e HOTPDF_OPENJPEG_LIBRARY sovrascrivono quei percorsi; i default Windows sono lcms2.dll, turbojpeg.dll e openjp2.dll
Profilo di rendering
Il contenuto supportato include costruzione e paint dei path, regole di fill nonzero ed even-odd, clipping, graphics state annidati, trasformazioni CTM, stile di linea, colori DeviceGray/RGB/CMYK, alpha normale e Form XObjects ripetuti con le proprie risorse, Matrix e BBox
Le larghezze di linea possono essere zero: le hairline PDF richieste da 0 w o da ExtGState LW=0 usano uno stroke di un pixel nello spazio device; le larghezze negative vengono rifiutate
ExtGState D e l'operatore d del content stream condividono una validazione dash con limiti: pattern vuoti solidi, ripetizioni di lunghezza dispari, entry di lunghezza zero, lunghezze frazionarie e phase con segno sono supportate
Un pattern dash ammette al massimo 256 lunghezze finite e non negative fino a 1e9, con almeno una lunghezza positiva quando non è vuoto e una phase finita di valore assoluto al massimo 1e9; ogni elemento consuma lavoro operativo e lo storage temporaneo entra nel budget dei working byte
Gli array di operandi accettano commenti PDF, inclusi array dash numerici e array di testo TJ; i valori lessicali malformati e le parentesi di chiusura mancanti vengono conservati dallo scanner condiviso e rifiutati dal renderer invece di sparire silenziosamente
Il testo orizzontale usa l'interprete di glifi condiviso per matrici di testo, larghezze PDF esplicite, advance canonici di Helvetica/Times/Courier, spaziatura caratteri e parole, scala orizzontale e aggiustamenti TJ
I programmi font supportati incorporati usano FreeType con glyph ID risolti; le mappature Unicode ToUnicode restano disponibili tramite l'API testo del documento, mentre le forme raster dei font standard dipendono dai sostituti installati
Il testo composito supporta Identity-H, Identity-V, stream CMap di encoding incorporati espliciti e le mappature orizzontali e verticali integrate UniJIS, UniGB, UniCNS e UniKS UCS2/UTF16; non servono risorse CMap installate a parte
Il paint verticale dei glifi rispetta i vettori di posizionamento default ed espliciti DW2/W2, il text rise, la scala orizzontale, le matrici testo e graphics e lo spostamento TJ; le mappature UTF-16 accettano codici di caratteri supplementari
Tutte le otto modalità di rendering del testo sono supportate, incluse le outline verticali fill/stroke/invisible accumulate nel clip a ET; gli stream CMap di encoding incorporati mantengono il proprio WMode e le mappature CID non identità
Le operazioni trasparenti combinate di fill-and-stroke usano compositing object knockout perché il fill sovrapposto non trasali attraverso lo stroke; le procedure di glifi Type3 eseguono le proprie risorse limitate e le proprie matrici font
Le immagini accettano campioni a 1/2/4/8/16 bit e array Decode, stencil, mask esplicite, color-key e soft mask, mask di dimensioni diverse e recupero Matte; l'assenza di Interpolate usa sampling nearest-neighbor e true seleziona il sampling bilineare
I codestream JPX accettano componenti sorgente con o senza segno fino a 26 bit, inclusi precisione mista, subsampling e opacità esplicita, e normalizzano in campioni limitati a 8 o 16 bit; il BitsPerComponent del dizionario immagine e le entry Decode non stencil vengono ignorati per le immagini JPX come richiesto dal profilo immagini PDF
Palette indicizzate e trasformazioni ICCBased validate verso sRGB sono supportate per immagini e colori dei path; DeviceCMYK senza profilo mantiene la semplice conversione device
Le trasformazioni ICCBased accettano firme di profilo Gray, RGB, CMYK, Lab e XYZ e validano in modo rigoroso il numero di componenti dichiarato e i range delle componenti
Gli operandi dei profili Lab usano coordinate fisiche L a b con range default [0 100 -128 127 -128 127]; gli operandi XYZ usano coordinate fisiche X Y Z con un range default senza segno 1.15 [0 65535/32768] per componente
Gli input di profili XYZ sono un'estensione di compatibilità nativa e non implicano conformità PDF archivistica; i profili sorgente Lab e XYZ non selezionano uno spazio di blending trasparenza supportato
Il Range di uno stream ICC richiede due valori finiti ordinati per componente e vincola gli operandi colore; i default Decode delle immagini raw e i valori di lookup Indexed usano quei range di componente
CalGray, CalRGB e Lab supportano path, testo, immagini e basi di palette Indexed; i parametri sono validati rigorosamente, le entry Matrix di CalRGB seguono l'ordinamento a colonne PDF, e le componenti Lab e i default Decode delle immagini usano i range dichiarati
I colori CIE usano adattamento cromatico Bradford e output sRGB relativo; i metadati BlackPoint sono validati, mentre compensazioni black-point aggiuntive e policy di stato dei rendering intent restano estensioni separate
I colori compositi Separation e DeviceN conservano da una a trentadue componenti tint per path, testo, basi Indexed e immagini packed; i colori alternativi device o CIE usano funzioni tint sampled, exponential, stitching o calculator limitate
Le sorgenti di colore alternativo ICCBased Lab/XYZ e CalGray/CalRGB/Lab conservano le coordinate fisiche attraverso la tint transform prima della conversione in un gruppo di trasparenza supportato
Le funzioni tint multidimensionali campionate supportano interpolazione lineare e cubica, Domain, Encode, Decode, Range di output e profondità di campioni packed fino a 32 bit; la valutazione cubica estende la convenzione scalare a quattro nodi esistente con prodotti tensoriali, fallback lineare per dimensioni corte e lavoro e cancellazione limitati
Vedere Native sampled color functions per le convenzioni di interpolazione e le prove separate su formule e reader
Separation None e gli spazi DeviceN contenenti solo coloranti None non contribuiscono né colore né forma knockout; le componenti None miste raggiungono comunque la tint transform alternativa
Separation All applica il proprio tint a ogni colorante di output disponibile, usando output pagina RGB neutro e conservando ogni componente di processo nei gruppi CMYK
I gruppi CMYK ricevono i valori tint alternativi originali a quattro componenti prima del blending; le lastre spot separation, la selezione process/colorant NChannel e la simulazione dei mixing hint restano estensioni separate
Il callback immagine terminale preserva la decifratura del documento e i filtri stream precedenti prima della decodifica nativa JPEG, JPEG 2000, CCITT o JBIG2; JBIG2 supporta testo aritmetico e Huffman, MMR e dizionari globali condivisi
JPEG 2000 supporta componenti subsampled e con segno, dichiarazioni di colore e campioni inferite, profili ICC incorporati, override espliciti di spazio colore e opacità separata o associata tramite SMaskInData; i valori delle componenti vengono normalizzati a otto o sedici bit e l'array Decode dell'immagine viene ignorato
I profili ICC Lab/XYZ incorporati o espliciti usano range fisici delle componenti; l'opacità associata viene rimossa dai campioni memorizzati normalizzati prima di applicare la mappatura fisica delle coordinate, preservando i canali offset Lab
Il SMask del graphics state supporta gruppi Alpha e Luminosity, colori backdrop, matrici Form, ripristino dello stato salvato e funzioni di trasferimento sampled, exponential, stitching e calculator limitate; la soft mask propria di un'immagine sovrascrive quella del graphics state
Tutti i sedici blend mode standard PDF sono supportati; i gruppi Form e pagina supportano composizione isolated e nonisolated, object knockout e spazi di blending DeviceGray, DeviceRGB, DeviceCMYK, CalGray, CalRGB o ICCBased a una, tre e quattro componenti
I gruppi calibrati conservano i valori nativi delle componenti fino a un confine di gruppo e accettano colori sorgente device o Lab tramite trasformazioni calibrate inverse; Lab in sé non è uno spazio di blending valido
Le mask Luminosity calibrate conservano le coordinate del gruppo e valutano CIE XYZ-Y, incluse opacità del gruppo e colori backdrop, prima di applicare la funzione di trasferimento
Il compositing knockout tiene la forma geometrica dell'oggetto separata dall'opacità della soft mask; i buchi stencil preservano gli oggetti precedenti mentre un path con mask li sostituisce su tutta la sua geometria dipinta
I gruppi knockout annidati conservano l'unione delle forme geometriche dei figli, inclusi gli oggetti a opacità zero; i gruppi figli nonisolated usano il backdrop iniziale del gruppo knockout che li contiene
I gruppi CMYK preservano le componenti CMY complementari e il nero in piani immagine separati e limitati e convertono il risultato combinato ai confini del gruppo; i blend mode non separabili conservano o sostituiscono il nero secondo la modalità selezionata
I gruppi nonisolated eseguono un passaggio di opacità aggiuntivo e limitato, rimuovono il contributo del backdrop iniziale e applicano una sola volta l'alpha e il blend mode del gruppo in arrivo; i gruppi di trasparenza di pagina usano una superficie isolated prima del compositing sullo sfondo pagina
Un Form nonisolated eredita lo spazio di blending che lo contiene; una entry CS esplicita del gruppo non cambia lo spazio del backdrop iniziale
Gli appearance normali esistenti delle annotazioni vengono adattati dal loro BBox trasformato al Rect; RenderAnnotations=false omette gli appearance in entrambi gli usi
Usage ha default hruView, che salta le annotazioni Hidden e NoView e i tipi di annotazione sconosciuti con Invisible impostato; i tipi di annotazione standard ISO 32000, inclusi RichMedia e Projection del PDF 2.0, con appearance normali supportati restano visibili quando è impostato solo Invisible
L'accettazione di RichMedia e Projection copre gli appearance normali statici esistenti con asset multimediali validi o una vista 3D default associata; la riproduzione multimediale e l'attivazione 3D interattiva restano fuori da questo percorso raster
hruPrint dipinge solo le annotazioni con Print impostato e Hidden assente; Invisible sopprime i tipi di annotazione sconosciuti in entrambi gli usi, NoView non sopprime la stampa e NoZoom non cambia la dimensione dell'appearance stampato
Quando manca un appearance normale, i metadati supportati dell'annotazione vengono renderizzati tramite un appearance temporaneo; vedere native annotation fallback per geometria, FreeText Unicode, icone statiche e limiti rimanenti
Nell'output di vista, il flag NoZoom dell'annotazione rimuove la scala di rendering dalla dimensione dell'appearance preservando UserUnit; NoRotate mantiene l'appearance adattato dritto attraverso la rotazione di pagina in entrambi gli usi, e entrambi preservano l'ancora Rect trasformata in alto a sinistra e il clip di pagina
Le annotazioni di testo con appearance normali esistenti si comportano come NoZoom e NoRotate nell'output di vista indipendentemente dai flag espliciti; l'output di stampa conserva il loro comportamento NoRotate ignorando NoZoom
Usage controlla la visibilità raster statica e la geometria delle annotazioni; i flag di sola interazione non creano comportamenti hover o di editing, e l'esistente callback di permesso di estrazione resta richiesto senza concedere il permesso di stampa
Optional content nell'output statico
Il rendering consuma la configurazione default OCProperties/D del catalogo, inizializza gli stati dei gruppi da BaseState, applica gli override ON e OFF e usa i valori Intent corrispondenti nel determinare la visibilità
I dizionari di membership supportano AnyOn, AllOn, AnyOff e AllOff; le espressioni VE ricorsive supportano And, Or e Not a operando singolo, con VE che ha precedenza sulla policy più semplice
I riferimenti a gruppi null, non disponibili o stantii non hanno effetto sulla membership; i gruppi fuori dagli intent della configurazione non controllano la visibilità, e una membership o espressione senza gruppi applicabili lascia il contenuto visibile
Il marked content /OC annidato, gli XObjects immagine e Form e le annotazioni rispettano lo stato risultante; le sezioni marcate nascoste aggiornano comunque colori, matrici, clipping e posizione del testo, mentre XObjects interi nascosti e annotazioni possono essere saltati
I dizionari di proprietà marked-content ordinari restano utilizzabili, inclusi i valori inline annidati; gli array di contenuto preservano lo stato marked-content attraverso i propri stream componenti, e gli stream figli mantengono il proprio nesting marked-content
La rasterizzazione finale standalone usa la configurazione default sia in modalità vista che stampa senza applicare automaticamente le raccomandazioni d'uso interattive AS, come specificato dalla sezione 8.11.4.5 di ISO 32000-1:2008; un ViewerState esplicito abilita le raccomandazioni View, Print, Export, Zoom, Language e User con selezione manuale persistente e stato evento temporaneo
Proprietà optional-content mancanti o un catalogo borrowed nil lasciano le strutture optional-content senza effetto sulla visibilità; membership live malformate, cicli di espressione e limiti configurati di lavoro, memoria o ricorsione falliscono prima della pubblicazione PNG
Le matrici appearance affini e le origini BBox non nulle conservano il loro adattamento normale sotto questi flag; una scala di rendering estremamente piccola può comunque rendere numericamente non invertibile la matrice pagina iniziale di Cairo
La pagina renderizzata usa l'intersezione MediaBox/CropBox, i page box ereditati e il Rotate a quarti di giro, oltre allo UserUnit della pagina; scala 1 produce un pixel per punto pagina effettivo, con dimensioni della superficie arrotondate per eccesso
L'operatore sh dipinge shading function-based, assiali e radiali (ShadingTypes 1–3), con domini a due ingressi, matrici shading, selezione del cerchio radiale, endpoint Extend, BBox e clip di path esistenti
Le funzioni colore supportate e gli array di funzioni scalari convertono attraverso colori sorgente device, calibrati, ICC Lab/XYZ e Separation/DeviceN; l'opacità di fill corrente, i blend mode, le soft mask del graphics state e il knockout del gruppo trasparenza si applicano allo shading risultante
Il path e il colore correnti sono preservati; lo shading Background viene ignorato da sh, e AntiAlias è un hint per il device con sampling del colore al centro del pixel
Le entry ExtGState non supportate e gli operatori di contenuto non supportati restano fuori da questo profilo
Shading a mesh triangolare
ShadingTypes 4 e 5 dipingono mesh triangolari Gouraud free-form e lattice con riutilizzo dei lati, geometria lattice arbitraria, record di vertici byte-aligned, precisione delle coordinate fino a 32 bit e precisione delle componenti fino a 16 bit
Le componenti dei vertici interpolano ai centri dei pixel device prima della conversione colore; una funzione opzionale a un ingresso o un array di funzioni per componente valuta il parametro interpolato, inclusi spazi colore calibrati, ICC e speciali
Le sorgenti Indexed arrotondano gli indici interpolati all'entry di palette più vicina; le stringhe di lookup esadecimali decodificano una volta con whitespace, cifre a maiuscole miste e padding dell'ultimo nibble dispari, mentre le stringhe di lookup literal conservano i propri byte decodificati
Trasformazioni correnti, clipping, BBox, opacità di fill, blend mode, soft mask, coloranti non marcanti e knockout di gruppo si applicano alla mesh completata; i byte di stream trattenuti, la superficie pagina temporanea e due righe lattice entrano nel budget della memoria di lavoro
Il parsing dei vertici, la rasterizzazione dei triangoli e le funzioni condividono limiti operativi aggregati e polling di cancellazione; i record malformati o troncati e le righe lattice incomplete falliscono prima della pubblicazione dell'output
L'accettazione mirata verifica equazioni baricentriche chiuse e output separato MuPDF e Poppler; i record di prova tengono distinti i fallimenti sorgente-reader per padding dei vertici, bit di flag inutilizzati e trasparenza della mesh, e usano equazioni reader alternative esplicite per colori non marcanti e valori Indexed normalizzati
Mesh a patch Coons e tensor
ShadingTypes 6 e 7 dipingono bordi Coons cubici e control net tensoriali, con riutilizzo del lato precedente, record byte-aligned, semantica dei flag sui due bit bassi e le stesse precisioni di coordinate e componenti delle mesh triangolari
Le componenti degli angoli interpolano bilinearmente nei parametri del patch prima delle funzioni opzionali e della conversione colore; i bordi Coons vengono elevati a una rete Bernstein bicubica equivalente, i cui limiti delle derivate seconde selezionano le suddivisioni con errore geometrico di al massimo 0.125 pixel di output
L'inversione polinomiale raffina i parametri pixel; la copertura folded sceglie il parametro v maggiore e poi il parametro u maggiore a parità di v, mentre i patch successivi sostituiscono i colori precedenti prima che lo shading completato riceva la trasparenza dell'oggetto
Il compositor di mesh condiviso applica clipping, BBox, shading patterns, coloranti non marcanti, opacità, blending, soft mask e knockout di gruppo; due righe di suddivisione e gli array per-pixel di parametro e ordine entrano nell'ammissione attiva dei working byte
Il parsing dei control point, la suddivisione, la rasterizzazione e le funzioni colore condividono limiti operativi e cancellazione; l'accettazione mirata usa equazioni Coons e tensor indipendenti e radici cubiche per i patch folded, con i fallimenti sorgente-reader registrati separatamente dalla verifica RGB ordinaria a pagine di equazioni
Stato del testo ereditato
Gli stream figli Form, Type3 e pattern ereditano dal proprio graphics state iniziale l'oggetto font applicabile, la dimensione font, la spaziatura caratteri e parole, la scala orizzontale, il leading, la modalità di rendering e il rise; una risorsa figlia con lo stesso nome font non sostituisce un font ereditato finché un Tf locale non lo seleziona
Il graphics state salvato ripristina i parametri del testo, e gli operatori TD e virgolette doppie conservano le proprie modifiche di leading e spaziatura per gli stream figli successivi; ogni figlio parte con le proprie matrici testo
Gli appearance indipendenti delle annotazioni partono dai parametri testo default senza conservare lo stato finale del testo del contenuto di pagina
Il testo Type3 in modalità di rendering 3 non contribuisce grafica di glifi visibile; la prova mirata Type3 su testo annidato conserva la deviazione dei parametri default di MuPDF separatamente dalle equazioni dello stato ereditato, mentre Poppler segue i parametri ereditati in quei fixture
Pattern tiling e shading
Gli spazi colore pattern supportano tiling patterns colored e uncolored, TilingType 1–3, shading patterns, PatternMatrix, BBox della cella, spaziatura positiva o negativa, selezione pattern, ripristino dello stato salvato e paint di fill o stroke
I pattern uncolored ottengono le proprie componenti da uno spazio colore base supportato e possono dipingere stencil di immagine; cambi colore espliciti, immagini a colori e shading diretti dentro una definizione uncolored sono contenuto PDF non valido e vengono rifiutati anche attraverso Form annidati e procedure Type3
I pattern selezionati conservano lo spazio coordinate default dello stream di contenuto che ha risolto la loro definizione; operazioni cm successive e un pattern ereditato usato dentro un Form non sostituiscono quell'origine
Le definizioni partono dal graphics state iniziale supportato del genitore e dai parametri trasparenza default; le definizioni tiling formano un gruppo nonisolated non knockout, mentre le definizioni shading usano object knockout
Le celle tiling trasparenti e sovrapposte vengono valutate contro il backdrop corrente; l'alpha e il blend mode dell'oggetto in arrivo si applicano una volta quando si dipinge il pattern completato, inclusi pattern annidati, testo, stroke e image mask
L'ExtGState dello shading pattern arricchisce i parametri shading supportati, inclusi opacità e soft mask; Background viene dipinto prima dello shading, il BBox clippa entrambi i contributi, e i colori None non marcanti non contribuiscono né colore né forma
La valutazione dei pattern ammette due superfici pagina e contenuto di celle decodificato, vincola l'enumerazione delle celle visibili al clip corrente e fa polling della cancellazione mentre renderizza le celle e rimuove il contributo del backdrop
I fixture mirati confrontano equazioni chiuse di coordinate, colore e compositing con pixel nativi e output reader indipendente; i file di prova conservano le differenze reader per le origini dei pattern Form ereditati, l'opacità ExtGState degli shading pattern e i colori None non marcanti, con pagine di equazioni vettoriali ordinarie separate per quei casi
Font CFF CID-keyed
I font CIDFontType0 incorporati risolvono CID CFF reali in contenitori standalone e OpenType, incluse mappature non identità, CID 65535, CMaps di Encoding incorporati, origini W2 verticali, outline trasformate e clipping del testo
Le face CFF standalone caricano per CID e le face incapsulate in SFNT caricano per indice di glifo compatto; il bridge usa il layout FreeType face corretto per Linux LP64 e Windows LLP64
Un codice carattere non mappato o un CID richiesto assente consulta notdefchar e notdefrange per il codice originale, poi usa il glifo CID 0 obbligatorio se il rimpiazzo è assente; i range hanno target CID costanti e le entry per carattere hanno precedenza, mentre i glifi presenti conservano il CID richiesto
L'accettazione mirata usa contorni poligonali dichiarati ed equazioni delle origini per 28 sorgenti valide, con confronti MuPDF e Poppler separati e pagine di equazioni RGB ordinarie
I file di prova conservano le differenze sorgente-reader per la selezione dei glifi OpenType CID-keyed e le sostituzioni notdef omesse; l'alternativa di omissione viene misurata separatamente e non sostituisce l'equazione sorgente nativa richiesta
Limiti e cancellazione
Gli encoding Type0 integrati esatti coprono tutti i 200 nomi di encoding in bundle: Identity-H e Identity-V, sedici mappature UCS2 e UTF16 e 182 mappe legacy e Unicode aggiuntive con override di caratteri verticali appiattiti
Gli operandi misti da uno a quattro byte usano limiti codespace per byte e recupero longest-prefix dei codici non validi; la decodifica UTF8 e UTF32 e l'encoding inverso preservano gli scalari supplementari e i byte zero iniziali significativi
Gli stream Encoding e ToUnicode risolvono usecmap del body e nomi o stream UseCMap del dizionario, con precedenza del dizionario e override locali di carattere, range, sequenze Unicode e notdef
Ogni CMap figlio mantiene la propria modalità di scrittura, con default orizzontale quando WMode è omesso; la modalità verticale esplicita seleziona le mappature ereditate e i metrici verticali del font
L'ereditarietà dei CMap usa limiti di profondità annidati thread-local senza cambiare il layout di THPDFCMapBounds; cicli, genitori malformati e profondità eccessiva falliscono prima della pubblicazione dell'output, e i blocchi finally ripristinano i limiti dopo cancellazione o eccezioni
La prova mirata conserva i fallimenti sorgente UTF8 e UTF32 denominati in un reader indipendente privo di quelle tabelle integrate, verifica companion di mappe incorporate separati e registra le differenze del testo sorgente quando più codici selezionano lo stesso CID
Tests/Linux/Run-HeadlessLegacyCMapAcceptance.sh compila e testa intervalli di encoding esatti, PDF sorgente a larghezza mista, rendering annidato, isolamento thread e recupero della cancellazione su Linux nativo
Tests/Linux/Run-HeadlessLegacyCMapWindowsAcceptance.py esegue gli eseguibili nativi Windows corrispondenti, registra gli hash di sorgente, binario, PNG e diagnostica, poi trasferisce le capture fisse allo storage Linux nativo per verifiche MuPDF e Poppler separate
Le mappe packed conservano i propri hash di risorsa e gli avvisi completi di redistribuzione; mantenete la CMap data license insieme alle distribuzioni sorgente e binarie
Gli escape esadecimali nei valori dei name PDF e negli operandi name del contenuto decodificano una volta prima di risolvere font, spazi colore, blend mode e risorse; un hash literal prodotto dalla decodifica resta parte del nome semantico
Il decoder font condiviso applica questa semantica ai valori del dizionario font, agli encoding denominati, ai nomi glifo di Differences e al CIDToGIDMap, senza modificare oggetti borrowed né decodificare i valori stringa
I nomi renderer con escape usano decodifica lineare, ammissione temporanea di working byte, limiti operativi aggregati e polling di cancellazione; l'accettazione mirata confronta byte PNG nativi equivalenti e testo, più output indipendente MuPDF e Poppler
Il lavoro raster dello shading e le funzioni colore condividono limiti operativi aggregati e polling di cancellazione; la superficie temporanea e una cache a coordinate esatte di al massimo 8.192 colori convertiti entrano nell'ammissione attiva dei working byte
L'accettazione shading mirata usa equazioni chiuse geometria/funzione/colore e pagine di equazioni vettoriali separate, conservando le differenze sorgente-reader per clipping BBox, geometria degenere, conversione colore, nomi coloranti speciali e tassellazione knockout
Le Options limitano i pixel della superficie, i buffer gestiti attivi, i byte decodificati cumulativi, i byte PNG codificati, il lavoro di token e operatori e la profondità ricorsiva o del graphics state
La decodifica font usa tolleranze di ammissione conservative: 32 MiB di capacità transitoria, 64 volte la dimensione dello stream font decodificato, 128 volte gli slot di array verificati ricorsivamente e due volte la stima del decoder trattenuta nell'aggregato attivo
Le tabelle CID ammettono 65.536 entry trattenute; l'enumerazione limita i charstring reali, e gli array notdef entrano nel deep-copy del decoder e nel computo dei byte trattenuti
Il parsing dei CMap e il lookup notdef condividono limiti di entry thread-local e annidati e polling di lavoro; gli scope del renderer condividono limiti aggregati di token e operazioni, e le scansioni lessicali lunghe fanno polling al massimo ogni 256 byte
L'interprete riserva anche capacità per sequenze Unicode per glifo dai byte degli operandi in input e dalla mappatura ToUnicode più lunga prima di creare i record dei glifi, così mappature lunghe ripetute non possono bypassare l'ammissione della memoria di lavoro
Un budget di memoria di lavoro piccolo può rifiutare un font semplice anche se la sua allocazione finale ci starebbe; questi controlli coprono i buffer gestiti e le superfici immagine CPU, mentre le cache di Cairo, Fontconfig, FreeType e il RSS totale del processo sono fuori dal computo
Le superfici di trasparenza, soft mask, backdrop, opacità e object knockout entrano nel budget attivo delle superfici; le funzioni di trasferimento condividono il budget operativo aggregato, i codec ICC e immagine usano ammissione conservativa, e il decoder JBIG2 nativo limita cumulativamente l'allocazione bitmap/context e fa polling della cancellazione durante la decodifica
Le traversal CMY complementari, del nero e di forme geometriche condividono i limiti aggregati operativi, di decodifica e di cancellazione; i profili che usano lo stesso stream risolto condividono una trasformazione validata e una prenotazione di ammissione attiva finché il rendering della pagina non finisce
Gli stream funzione trattenuti, la valutazione delle funzioni e i record del graphics state entrano nell'ammissione dei working byte; le funzioni tint ricorsive, l'interpolazione multidimensionale e le istruzioni calculator condividono limiti operativi e di cancellazione
Il token di cancellazione borrowed viene interrogato durante la decodifica limitata, la tokenization, gli operatori, le chiamate al glyph resolver, le righe immagine, la ricorsione, la codifica PNG e prima della pubblicazione; il chiamante ne possiede il ciclo di vita
Il renderer verifica il permesso di estrazione attraverso la policy del documento borrowed e conserva i valori degli oggetti sorgente e i byte sorgente
Proprietà dell'output
HPDFRenderHeadlessPagePNG completa privatamente rendering e codifica PNG prima di scrivere su uno stream di proprietà del chiamante; un fallimento I/O finale sullo stream può trattenere byte già accettati
HPDFRenderHeadlessPagePNGFile verifica l'identità della sorgente, crea in modo esclusivo uno staging file nella directory di destinazione, ne fa il flush, riverifica identità e cancellazione e sostituisce atomicamente la destinazione
La pubblicazione Windows usa al massimo otto tentativi di sostituzione atomica e sette attese di 1, 2, 4, 8, 16, 16 e 16 millisecondi, ritentando solo errori di accesso negato, sharing violation e lock violation; la cancellazione viene verificata prima di ogni tentativo e su entrambi i lati di ogni attesa
La pubblicazione Windows fallita riporta l'ultimo codice errore Windows catturato tramite EHPDFHeadlessRenderError; la cancellazione conserva la diagnostica di cancellazione del renderer, e nessuno dei due percorsi elimina la destinazione esistente né ricade su copia non atomica
I fallimenti di rendering, budget, cancellazione e staging preservano una destinazione esistente e rimuovono gli staging file non pubblicati di proprietà; gli alias di percorso sorgente e hardlink vengono rifiutati
Accettazione
L'accettazione runtime Windows usa eseguibili console nativi corrispondenti e una closure di import DLL portatile isolata e bloccata via SHA256; un processo WSL separato esegue verifiche indipendenti MuPDF e Poppler su pixel, equazioni e geometria dei PNG prodotti su Windows
I sostituti dei font standard su Windows usano face Cairo GDI esplicite per testo Unicode e outline reali, inclusi clipping e modalità fill-and-stroke; i font incorporati conservano la propria mappatura glifi FreeType
Le chiamate OpenJPEG usano l'ABI stdcall Windows e le export Win32 decorate, mentre i callback di stream e messaggio conservano la convenzione C dei callback
Tests/Linux/Run-HeadlessCairoAcceptance.sh esegue build ELF native fresche, azzera DISPLAY e WAYLAND_DISPLAY, rifiuta librerie desktop linkate direttamente e fa girare oracoli indipendenti pypdf/MuPDF
I fixture esercitano font standard, TrueType Unicode, Type3, tutte le modalità di rendering del testo e blend mode, alpha e knockout, gruppi trasparenza RGB, profondità di campioni e Decode, image mask e Matte, colori Indexed e ICC, codec terminali, catene di filtri cifrati AES, geometria di pagina, trasformazioni delle annotazioni, budget, cancellazione, preservazione della sorgente e output atomico
Vedere THPDFHeadlessRenderResult per i contatori e EHPDFHeadlessRenderError per la gestione degli errori