Renderer Cairo Linux natif

HPDFHeadlessCairoDevice rend une page PDF chargée en PNG RGB via des surfaces image Cairo et FreeType, sans serveur d’affichage ni lecteur PDF

Fournissez une vue empruntée série issue de THPDFHeadlessDocument.GetRenderAccess(PageIndex) et gardez ce document chargé et inchangé jusqu’à la fin du rendu

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

Dépendances runtime

Le Linux natif utilise libcairo.so.2, libfreetype.so.6 et la dépendance Fontconfig du fournisseur de polices standard ; installez des polices appropriées pour la substitution d’Helvetica, Times et Courier

HOTPDF_CAIRO_LIBRARY et HOTPDF_FREETYPE_LIBRARY permettent de choisir des chemins de bibliothèques compatibles explicites avant le premier rendu ; les modules chargés avec succès restent en mémoire car les caches de polices natifs peuvent conserver des callbacks de destruction

L’hôte doit garder son exécutable, sa DLL ou le code de son paquet HotPDF chargé tant que ces caches natifs peuvent conserver des callbacks de destruction de polices HotPDF ; décharger un module hôte indépendamment de la durée de vie du cache sort du cadre de ce profil

Windows utilise des libcairo-2.dll et libfreetype-6.dll compatibles via le même pont ; les binaires runtime et leur licence sont fournis par l’application

Les couleurs ICCBased chargent en plus liblcms2.so.2 ; le JPEG utilise libturbojpeg.so.0 et le JPEG 2000 une libopenjp2.so.7 compatible OpenJPEG 2.5 ; ces dépendances ne sont chargées que pour les entrées correspondantes

HOTPDF_LCMS_LIBRARY, HOTPDF_TURBOJPEG_LIBRARY et HOTPDF_OPENJPEG_LIBRARY remplacent ces chemins ; les défauts Windows sont lcms2.dll, turbojpeg.dll et openjp2.dll

Profil de rendu

Le contenu pris en charge inclut la construction et la peinture de chemins, les règles de remplissage nonzero et even-odd, le clipping, l’état graphique imbriqué, les transformations CTM, le style de trait, les couleurs DeviceGray/RGB/CMYK, l’alpha normal et les Form XObjects répétés avec leurs propres ressources, Matrix et BBox

Les largeurs de trait peuvent être nulles : les hairlines PDF demandées par 0 w ou ExtGState LW=0 utilisent un trait d’un pixel en espace périphérique ; les largeurs négatives sont rejetées

Le D ExtGState et l’opérateur d du flux de contenu partagent une validation de tirets bornée : motifs vides pleins, répétition de longueur impaire, entrées de longueur nulle, longueurs fractionnaires et phases signées sont pris en charge

Un motif de tirets admet au plus 256 longueurs finies non négatives jusqu’à 1e9, avec au moins une longueur positive s’il n’est pas vide et une phase finie de valeur absolue au plus 1e9 ; chaque élément consomme du travail d’opération et le stockage temporaire participe à l’admission d’octets de travail

Les tableaux d’opérandes acceptent les commentaires PDF, y compris les tableaux de tirets numériques et les tableaux de texte TJ ; les valeurs lexicales mal formées et les crochets fermants manquants sont conservés par le scanner partagé et rejetés par le renderer au lieu de disparaître silencieusement

Le texte horizontal utilise l’interpréteur de glyphes partagé pour les matrices de texte, les largeurs PDF explicites, les avances canoniques Helvetica/Times/Courier, l’espacement des caractères et des mots, l’échelle horizontale et les ajustements TJ

Les programmes de polices embarqués pris en charge utilisent FreeType avec des glyph IDs résolus ; les mappings Unicode ToUnicode restent accessibles via l’API de texte du document, tandis que les formes raster des polices standard dépendent des substituts installés

Le texte composite prend en charge Identity-H, Identity-V, les flux CMap d’encodage embarqués explicites et les mappings UCS2/UTF16 horizontaux et verticaux UniJIS, UniGB, UniCNS et UniKS intégrés ; les ressources CMap installées séparément ne sont pas requises

La peinture verticale de glyphes honore les vecteurs de positionnement DW2/W2 par défaut et explicites, l’élévation du texte, l’échelle horizontale, les matrices de texte et graphiques et le déplacement TJ ; les mappings UTF-16 acceptent les codes de caractères supplémentaires

Les huit modes de rendu du texte sont pris en charge, y compris les contours verticaux fill/stroke/invisible accumulés dans le clip au ET ; les flux CMap d’encodage embarqués conservent leur WMode et leurs mappings CID non identité

Les opérations combinées fill-and-stroke transparentes utilisent une composition knockout par objet afin que le remplissage qui se chevauche ne fuite pas à travers le trait ; les procédures de glyphes Type3 exécutent leurs propres ressources bornées et matrices de police

Les images acceptent des échantillons 1/2/4/8/16 bits et des tableaux Decode, masques stencil, explicites, color-key et doux, des masques de tailles différentes et la récupération Matte ; un Interpolate absent utilise un échantillonnage au plus proche voisin et true sélectionne l’échantillonnage bilinéaire

Les codestreams JPX acceptent des composants sources signés ou non signés jusqu’à 26 bits, y compris précision mixte, subsampling et opacité explicite, et se normalisent en échantillons bornés de 8 ou 16 bits ; le BitsPerComponent du dictionnaire d’image et les entrées Decode non stencil sont ignorés pour les images JPX comme l’exige le profil d’image PDF

Les palettes Indexed et les transformations profil-vers-sRGB ICCBased validées sont prises en charge pour les images et les couleurs de chemins ; un DeviceCMYK sans profil conserve la simple conversion périphérique

Les transformations ICCBased acceptent les signatures de profils Gray, RGB, CMYK, Lab et XYZ et valident strictement le nombre de composants déclaré et les plages de composants

Les opérandes de profils Lab utilisent des coordonnées physiques L a b avec les plages par défaut [0 100 -128 127 -128 127] ; les opérandes XYZ utilisent des coordonnées physiques X Y Z avec une plage 1.15 non signée par défaut de [0 65535/32768] par composant

Les entrées de profils XYZ sont une extension de compatibilité native et n’impliquent pas une conformité PDF d’archivage ; les profils sources Lab et XYZ ne sélectionnent pas un espace de fusion de transparence pris en charge

Le Range d’un flux ICC exige deux valeurs finies ordonnées par composant et borne les opérandes de couleur ; les défauts Decode des images brutes et les valeurs de recherche Indexed utilisent ces plages de composants

CalGray, CalRGB et Lab prennent en charge chemins, texte, images et bases de palettes Indexed ; les paramètres sont validés strictement, les entrées Matrix CalRGB suivent l’ordre des colonnes PDF, et les composants Lab et les défauts Decode d’images utilisent les plages déclarées

Les couleurs CIE utilisent l’adaptation chromatique de Bradford et une sortie sRGB relative ; les métadonnées BlackPoint sont validées, tandis que la compensation de point noir supplémentaire et les politiques d’état d’intention de rendu restent des extensions séparées

Les couleurs composites Separation et DeviceN conservent un à trente-deux composants de teinte pour les chemins, le texte, les bases Indexed et les images empaquetées ; les couleurs alternatives périphériques ou CIE utilisent des fonctions de teinte échantillonnées, exponentielles, d’assemblage ou calculatrices bornées

Les sources de couleurs alternatives ICCBased Lab/XYZ et CalGray/CalRGB/Lab conservent leurs coordonnées physiques à travers la transformation de teinte avant conversion dans un groupe de transparence pris en charge

Les fonctions de teinte échantillonnées multidimensionnelles prennent en charge l’interpolation linéaire et cubique, Domain, Encode, Decode, le Range de sortie et des profondeurs d’échantillons empaquetées jusqu’à 32 bits ; l’évaluation cubique étend la convention scalaire existante à quatre nœuds par produits tensoriels, avec repli linéaire pour les dimensions courtes et travail et annulation bornés

Voir Fonctions de couleurs échantillonnées natives pour les conventions d’interpolation et les preuves séparées de formules et de lecteurs

Les espaces Separation None et DeviceN ne contenant que des colorants None ne contribuent ni couleur ni forme knockout ; les composants None mixtes atteignent quand même la transformation de teinte alternative

Separation All applique sa teinte à chaque colorant de sortie disponible, avec une sortie de page RGB neutre et en préservant chaque composant procédé dans les groupes CMYK

Les groupes CMYK reçoivent les valeurs de teinte alternatives originales à quatre composants avant la fusion ; les plaques Separation spot, la sélection NChannel procédé/colorant et la simulation de mixing hints restent des extensions séparées

Le callback d’image terminal préserve le déchiffrement du document et les filtres de flux précédents avant le décodage natif JPEG, JPEG 2000, CCITT ou JBIG2 ; JBIG2 prend en charge le texte arithmétique et Huffman, MMR et les dictionnaires globaux partagés

Le JPEG 2000 prend en charge les composants subsamplés et signés, les déclarations de couleur et d’échantillons déduites, les profils ICC embarqués, les remplacements explicites d’espaces colorimétriques et l’opacité séparée ou associée via SMaskInData ; ses valeurs de composants sont normalisées sur huit ou seize bits et son tableau Decode d’image est ignoré

Les profils ICC Lab/XYZ embarqués ou explicites utilisent les plages physiques de composants ; l’opacité associée est retirée des échantillons stockés normalisés avant d’appliquer le mapping de coordonnées physiques, en préservant les canaux de décalage Lab

Le SMask d’état graphique prend en charge les groupes Alpha et Luminosity, les couleurs d’arrière-plan, les matrices Form, la restauration d’états sauvegardés et des fonctions de transfert échantillonnées, exponentielles, d’assemblage et calculatrices bornées ; le masque doux propre à une image prime sur le masque doux de l’état graphique

Les seize modes de fusion PDF standard sont pris en charge ; les groupes Form et page prennent en charge la composition isolée et non isolée, le knockout par objet et des espaces de fusion DeviceGray, DeviceRGB, DeviceCMYK, CalGray, CalRGB ou ICCBased à un, trois et quatre composants

Les groupes calibrés conservent les valeurs natives de composants jusqu’à une frontière de groupe et acceptent des couleurs sources périphériques ou Lab via des transformations calibrées inverses ; Lab lui-même n’est pas un espace de fusion valide

Les masques Luminosity calibrés conservent leurs coordonnées de groupe et évaluent le CIE XYZ-Y, y compris l’opacité du groupe et les couleurs d’arrière-plan, avant d’appliquer la fonction de transfert

La composition knockout garde la forme géométrique de l’objet séparée de l’opacité du masque doux ; les trous de stencil préservent les objets précédents tandis qu’un chemin masqué les remplace sur toute sa géométrie peinte

Les groupes knockout imbriqués conservent l’union des formes géométriques de leurs enfants, y compris les objets d’opacité nulle ; les groupes enfants non isolés utilisent l’arrière-plan initial du groupe knockout englobant

Les groupes CMYK préservent les composants CMY complémentaires et le noir dans des plans d’image bornés séparés et convertissent le résultat combiné aux frontières de groupe ; les modes de fusion non séparables conservent ou remplacent le noir selon le mode choisi

Les groupes non isolés effectuent une passe d’opacité bornée supplémentaire, retirent la contribution d’arrière-plan initiale et appliquent une seule fois l’alpha du groupe entrant et son mode de fusion ; les groupes de transparence de page utilisent une surface isolée avant d’être composés sur l’arrière-plan de la page

Un Form non isolé hérite de son espace de fusion englobant ; une entrée CS de groupe explicite ne bascule pas l’arrière-plan initial vers un autre espace

Les apparences normales d’annotations existantes sont ajustées de leur BBox transformée vers le Rect ; RenderAnnotations=false omet les apparences dans les deux usages

L’Usage vaut par défaut hruView, qui ignore les annotations Hidden et NoView et les types d’annotations inconnus avec Invisible positionné ; les types d’annotations standard ISO 32000, y compris RichMedia et Projection de PDF 2.0, avec des apparences normales prises en charge restent visibles quand seul Invisible est positionné

L’acceptation RichMedia et Projection couvre les apparences normales statiques existantes avec des médias valides ou une vue 3D par défaut associée ; la lecture de médias et l’activation 3D interactive sortent de ce chemin raster

hruPrint ne peint que les annotations avec Print positionné et Hidden effacé ; Invisible supprime les types d’annotations inconnus dans les deux usages, NoView ne supprime pas l’impression et NoZoom ne change pas la taille d’apparence imprimée

Les annotations visibles exigent un flux d’apparence normale existant pris en charge ; le renderer ne synthétise pas d’apparences à partir des métadonnées d’annotation ni des valeurs de champs

Pour la sortie vue, le NoZoom d’annotation retire l’échelle de rendu de la taille d’apparence tout en préservant UserUnit ; NoRotate garde l’apparence ajustée droite lors de la rotation de page dans les deux usages, et tous deux préservent l’ancre Rect supérieure gauche transformée et le clip de page

Les annotations de texte avec apparences normales existantes se comportent comme NoZoom et NoRotate en sortie vue quels que soient leurs drapeaux explicites ; la sortie impression conserve leur comportement NoRotate tout en ignorant NoZoom

L’usage contrôle la visibilité raster statique et la géométrie des annotations ; les drapeaux d’interaction seule ne créent pas de comportement de survol ni d’édition, et le callback existant de permission d’extraction reste requis sans accorder la permission d’impression

Optional content en sortie statique

Le rendu consomme la configuration OCProperties/D par défaut du catalogue, initialise les états de groupes depuis BaseState, applique les remplacements ON et OFF et utilise les valeurs Intent correspondantes pour déterminer la visibilité

Les dictionnaires d’appartenance prennent en charge AnyOn, AllOn, AnyOff et AllOff ; les expressions VE récursives prennent en charge And, Or et Not à un opérande, VE ayant priorité sur la politique plus simple

Les références de groupes nulles, indisponibles ou périmées n’ont aucun effet d’appartenance ; les groupes hors des intents de la configuration ne contrôlent pas la visibilité, et une appartenance ou expression sans groupes applicables laisse le contenu visible

Le contenu marqué /OC imbriqué, les XObjects d’image et Form, et les annotations respectent l’état résultant ; les sections marquées cachées mettent toujours à jour couleurs, matrices, clipping et position de texte, tandis que les XObjects entiers et annotations cachés peuvent être ignorés

Les dictionnaires de propriétés de marked-content ordinaires restent utilisables, y compris les valeurs inline imbriquées ; les tableaux de contenu préservent l’état de marked-content à travers leurs flux de composants, et les flux enfants gardent leur propre imbrication de marked-content

La rasterisation finale autonome utilise la configuration par défaut dans les modes vue et impression sans appliquer automatiquement les recommandations d’usage AS interactives, comme spécifié par la section 8.11.4.5 de l’ISO 32000-1:2008 ; un ViewerState explicite active les recommandations View, Print, Export, Zoom, Language et User avec une sélection manuelle persistante et un état d’événements temporaire

Des propriétés optional-content absentes ou un catalogue emprunté nil laissent les structures optional-content sans effet de visibilité ; les appartenances actives mal formées, les cycles d’expressions et les limites configurées de travail, mémoire ou récursion échouent avant la publication PNG

Les matrices d’apparences affines et les origines BBox non nulles conservent leur ajustement normal sous ces drapeaux ; une échelle de rendu extrêmement petite peut toujours rendre la matrice de page initiale de Cairo numériquement non inversible

La page rendue utilise l’intersection MediaBox/CropBox, les boîtes de page héritées et le Rotate par quarts de tour, ainsi que le UserUnit de la page ; une échelle 1 produit un pixel par point de page effectif, avec des dimensions de surface arrondies vers le haut

L’opérateur sh peint les ombrages function-based, axiaux et radiaux (ShadingTypes 1–3), avec domaines à deux entrées, matrices d’ombrage, sélection de cercle radial, extrémités Extend, BBox et clips de chemins existants

Les fonctions de couleurs prises en charge et les tableaux de fonctions scalaires convertissent via des couleurs sources périphériques, calibrées, ICC Lab/XYZ et Separation/DeviceN ; l’opacité de remplissage courante, les modes de fusion, les masques doux d’état graphique et le knockout de groupe de transparence s’appliquent à l’ombrage résultant

Le chemin et la couleur courants sont préservés ; le Background d’ombrage est ignoré par sh, et AntiAlias est un indice au périphérique avec échantillonnage de couleur aux centres de pixels

Les entrées ExtGState et les opérateurs de contenu non pris en charge restent hors de ce profil

Ombrages maillés triangulaires

Les ShadingTypes 4 et 5 peignent des maillages triangulaires Gouraud free-form et lattice avec réutilisation d’arêtes, géométrie lattice arbitraire, enregistrements de sommets alignés sur les octets, précision de coordonnées jusqu’à 32 bits et précision de composants jusqu’à 16 bits

Les composants de sommets s’interpolent aux centres de pixels du périphérique avant conversion de couleur ; une fonction à une entrée optionnelle ou un tableau de fonctions de composants évalue le paramètre interpolé, y compris les espaces colorimétriques calibrés, ICC et spéciaux

Les sources Indexed arrondissent les indices interpolés à l’entrée de palette la plus proche ; les chaînes de recherche hexadécimales se décodent une fois avec espaces, chiffres de casse mixte et bourrage de quartet final impair, tandis que les chaînes de recherche littérales conservent leurs octets décodés

Les transformations courantes, le clipping, le BBox, l’opacité de remplissage, le mode de fusion, les masques doux, les colorants non marquants et le knockout de groupe s’appliquent au maillage achevé ; les octets de flux retenus, la surface de page temporaire et deux rangées de lattice rejoignent l’admission de mémoire de travail

L’analyse de sommets, la rasterisation de triangles et les fonctions partagent des opérations agrégées et un polling d’annulation ; les enregistrements mal formés ou tronqués et les rangées de lattice incomplètes échouent avant la publication de sortie

L’acceptation ciblée vérifie des équations barycentriques fermées et des sorties MuPDF et Poppler séparées ; les enregistrements de preuve gardent séparés les échecs source-lecteur pour le bourrage de sommets, les bits de drapeaux inutilisés et la transparence de maillage, et utilisent des équations de lecteur alternatives explicites pour les couleurs non marquantes et les valeurs Indexed normalisées

Maillages à patchs Coons et tensor

Les ShadingTypes 6 et 7 peignent des frontières Coons cubiques et des réseaux de contrôle tensor, avec réutilisation de l’arête précédente, enregistrements alignés sur les octets, sémantique de drapeaux à deux bits bas et les mêmes précisions de coordonnées et de composants que les maillages triangulaires

Les composants de coins s’interpolent bilinéairement dans les paramètres de patch avant fonctions optionnelles et conversion de couleur ; les frontières Coons s’élèvent en un réseau de Bernstein bicubique équivalent, dont les bornes de dérivées secondes sélectionnent des subdivisions avec au plus 0,125 pixel de sortie d’erreur de géométrie

L’inversion polynomiale raffine les paramètres de pixels ; la couverture pliée choisit le plus grand paramètre v puis, à v égal, le plus grand u, tandis que les patchs ultérieurs remplacent les couleurs antérieures avant que l’ombrage achevé ne reçoive la transparence de l’objet

Le compositeur de maillage partagé applique clipping, BBox, shading patterns, colorants non marquants, opacité, fusion, masques doux et knockout de groupe ; deux rangées de subdivision et les tableaux de paramètres et d’ordres par pixel rejoignent l’admission active d’octets de travail

L’analyse de points de contrôle, la subdivision, la rasterisation et les fonctions de couleurs partagent des limites d’opérations et l’annulation ; l’acceptation ciblée utilise des équations Coons et tensor indépendantes et des racines cubiques pour les patchs pliés, avec échecs source-lecteur enregistrés séparément de la vérification ordinaire des pages d’équations RGB

État de texte hérité

Les flux enfants Form, Type3 et pattern héritent de leur état graphique initial de l’objet de police applicable, de la taille de police, de l’espacement des caractères et des mots, de l’échelle horizontale, de l’interlignage, du mode de rendu et de l’élévation ; une ressource enfant portant le même nom de police ne remplace pas une police héritée tant qu’un Tf local ne la sélectionne pas

L’état graphique sauvegardé restaure les paramètres de texte, et les opérateurs TD et guillemet double conservent leurs changements d’interlignage et d’espacement pour les flux enfants suivants ; chaque enfant démarre avec ses propres matrices de texte

Les apparences d’annotations indépendantes démarrent avec les paramètres de texte par défaut sans conserver l’état de texte final du contenu de page

Le texte Type3 en mode de rendu 3 ne contribue aucun graphique de glyphe visible ; la preuve ciblée de texte Type3 imbriqué conserve l’écart de paramètres par défaut de MuPDF séparément des équations d’état hérité, tandis que Poppler suit les paramètres hérités dans ces fixtures

Patterns de tiling et d’ombrage

Les espaces colorimétriques Pattern prennent en charge les tiling patterns colored et uncolored, TilingType 1–3, les shading patterns, PatternMatrix, le BBox de cellule, l’espacement positif ou négatif, la sélection de pattern, la restauration d’états sauvegardés et la peinture en remplissage ou en trait

Les patterns uncolored obtiennent leurs composants d’un espace colorimétrique de base pris en charge et peuvent peindre des stencils d’images ; les changements de couleur explicites, les images colored et les ombrages directs dans une définition uncolored sont du contenu PDF invalide et sont rejetés, y compris via des Forms imbriqués et des procédures Type3

Les patterns sélectionnés conservent l’espace de coordonnées par défaut du flux de contenu qui a résolu leur définition ; des opérations cm ultérieures et un pattern hérité utilisé dans un Form ne remplacent pas cette origine

Les définitions démarrent avec l’état graphique initial pris en charge du parent et les paramètres de transparence par défaut ; les définitions de tiling forment un groupe non isolé sans knockout, tandis que les définitions d’ombrage utilisent le knockout par objet

Les cellules de tiling transparentes et qui se chevauchent s’évaluent contre l’arrière-plan courant ; l’alpha d’objet entrant et le mode de fusion s’appliquent une fois à la peinture du pattern achevé, y compris patterns imbriqués, texte, traits et masques d’image

L’ExtGState de shading pattern augmente les paramètres d’ombrage pris en charge, y compris opacité et masques doux ; le Background est peint avant l’ombrage, le BBox clippe les deux contributions, et les couleurs None non marquantes ne contribuent ni couleur ni forme

L’évaluation de patterns admet deux surfaces de page et le contenu de cellules décodé, borne l’énumération des cellules visibles au clip courant et sonde l’annulation pendant le rendu des cellules et le retrait de la contribution d’arrière-plan

Les fixtures ciblées comparent des équations fermées de coordonnées, de couleurs et de composition avec des pixels natifs et une sortie de lecteurs indépendante ; les fichiers de preuve conservent les différences de lecteurs pour les origines de patterns Form héritées, l’opacité ExtGState des shading patterns et les couleurs None non marquantes, avec des pages d’équations vectorielles ordinaires séparées pour ces cas

Polices CFF à clés CID

Les polices CIDFontType0 embarquées résolvent de vrais CIDs CFF dans des conteneurs standalone et OpenType, y compris mappings non identité, CID 65535, CMaps Encoding embarquées, origines W2 verticales, contours transformés et clipping de texte

Les faces CFF standalone se chargent par CID et les faces encapsulées SFNT par index de glyphes compact ; le pont utilise la disposition de faces FreeType correcte pour Linux LP64 et Windows LLP64

Un code de caractère non mappé ou un CID demandé absent consulte notdefchar et notdefrange pour le code original, puis utilise le glyphe CID 0 obligatoire si le remplacement est absent ; les plages ont des CID cibles constants et les entrées de caractères ont priorité, tandis que les glyphes présents conservent leur CID demandé

L’acceptation ciblée utilise des contours de polygones déclarés et des équations d’origines pour 28 sources valides, avec comparaisons MuPDF et Poppler séparées et pages d’équations RGB ordinaires

Les fichiers de preuve conservent les différences source-lecteur pour la sélection de glyphes OpenType à clés CID et les substitutions notdef omises ; l’alternative d’omission est mesurée séparément et ne remplace pas l’équation source native requise

Bornes et annulation

Les encodages Type0 intégrés exacts couvrent les 200 noms d’encodage livrés : Identity-H et Identity-V, seize mappings UCS2 et UTF16, et 182 maps legacy et Unicode supplémentaires avec remplacements de caractères verticaux aplatis

Les opérandes mixtes d’un à quatre octets utilisent des bornes de codespace par octet et une récupération de codes invalides par plus long préfixe ; le décodage UTF8 et UTF32 et l’encodage inverse préservent les scalaires supplémentaires et les octets nuls de tête significatifs

Les flux Encoding et ToUnicode résolvent les noms ou flux usecmap de corps et UseCMap de dictionnaire, avec priorité au dictionnaire et remplacements locaux de caractères, plages, séquences Unicode et notdef

Chaque CMap enfant garde son propre mode d’écriture, horizontal par défaut quand WMode est omis ; le mode vertical explicite sélectionne les mappings hérités et les métriques verticales de la police

L’héritage de CMaps utilise des limites de profondeur imbriquée thread-local sans changer la disposition de THPDFCMapBounds ; les cycles, parents mal formés et profondeurs excessives échouent avant la publication de sortie, et les blocs finally restaurent les limites après annulation ou exceptions

La preuve ciblée conserve les échecs sources UTF8 et UTF32 nommés dans un lecteur indépendant dépourvu de ces tables intégrées, vérifie des compagnons de maps embarquées séparés et enregistre les différences de texte source quand plusieurs codes sélectionnent le même CID

Tests/Linux/Run-HeadlessLegacyCMapAcceptance.sh construit et teste des intervalles d’encodage exacts, des PDF sources à largeurs mixtes, le rendu imbriqué, l’isolation de threads et la récupération d’annulation sur Linux natif

Tests/Linux/Run-HeadlessLegacyCMapWindowsAcceptance.py exécute des exécutables Windows natifs correspondants, enregistre les empreintes sources, binaires, PNG et diagnostics, puis transfère des captures figées vers le stockage Linux natif pour des vérifications MuPDF et Poppler séparées

Les maps empaquetées conservent leurs empreintes de ressources et leurs notices complètes de redistribution ; gardez la licence des données CMap avec les distributions sources et binaires

Les échappements hexadécimaux dans les valeurs de noms PDF et les opérandes de noms de contenu se décodent une fois avant de résoudre polices, espaces colorimétriques, modes de fusion et ressources ; un dièse littéral produit par le décodage reste partie du nom sémantique

Le décodeur de polices partagé applique ces sémantiques aux valeurs de dictionnaires de polices, encodages nommés, noms de glyphes Differences et CIDToGIDMap, sans modifier les objets empruntés ni décoder les valeurs de chaînes

Les noms de renderers échappés utilisent un décodage linéaire, une admission temporaire d’octets de travail, des limites d’opérations agrégées et un polling d’annulation ; l’acceptation ciblée compare des octets PNG natifs et du texte équivalents plus une sortie MuPDF et Poppler indépendante

Le travail raster d’ombrage et les fonctions de couleurs partagent des limites d’opérations agrégées et un polling d’annulation ; la surface temporaire et un cache de coordonnées exactes d’au plus 8 192 couleurs converties rejoignent l’admission active d’octets de travail

L’acceptation d’ombrage ciblée utilise des équations fermées géométrie/fonction/couleur et des pages d’équations vectorielles séparées, en conservant les différences source-lecteur pour le clipping BBox, la géométrie dégénérée, la conversion de couleurs, les noms de colorants spéciaux et la tessellation knockout

Les Options bornent les pixels de surface, les buffers managés actifs, les octets décodés cumulés, les octets PNG encodés, le travail de tokens et d’opérateurs et la profondeur de récursion ou d’état graphique

Le décodage de polices utilise des quotas d’admission conservateurs : 32 Mio de capacité transitoire, 64 fois la taille décodée du flux de police, 128 fois les emplacements de tableaux vérifiés récursivement et le double de l’estimation retenue du décodeur dans l’agrégat actif

Les tables CID admettent 65 536 entrées retenues ; l’énumération borne les vrais charstrings, et les tableaux notdef rejoignent la copie profonde du décodeur et la comptabilité d’octets retenus

L’analyse de CMaps et la recherche notdef partagent des bornes d’entrées imbriquées thread-local et un polling de travail ; les portées de renderer partagent des limites agrégées de tokens et d’opérations, et les scans lexicaux longs sondent au plus tous les 256 octets

L’interpréteur réserve aussi une capacité de séquences Unicode par glyphe à partir des octets d’opérandes d’entrée et du plus long mapping ToUnicode avant de créer les enregistrements de glyphes, si bien que des mappings longs répétés ne peuvent contourner l’admission de mémoire de travail

Un petit budget de mémoire de travail peut rejeter une police simple même si son allocation finale tiendrait ; ces vérifications couvrent les buffers managés et les surfaces d’images CPU, tandis que Cairo, Fontconfig, les caches FreeType et le RSS total du processus restent hors comptabilité

Les surfaces de transparence, masque doux, arrière-plan, opacité et knockout par objet rejoignent le budget de surfaces actif ; les fonctions de transfert partagent le budget d’opérations agrégé, les codecs ICC et d’images utilisent une admission conservatrice, et le décodeur JBIG2 natif borne l’allocation bitmap/contexte de façon cumulative et sonde l’annulation pendant le décodage

Les parcours CMY complémentaires, noir et formes géométriques partagent les limites agrégées d’opérations, de décodage et d’annulation ; les profils utilisant le même flux résolu partagent une transformation validée et une réservation d’admission active jusqu’à la fin du rendu de la page

Les flux de fonctions retenus, l’évaluation de fonctions et les enregistrements d’état graphique rejoignent l’admission d’octets de travail ; les fonctions de teinte récursives, l’interpolation multidimensionnelle et les instructions calculatrices partagent des limites d’opérations et d’annulation

Le token d’annulation emprunté est sondé pendant le décodage borné, la tokenisation, les opérateurs, les appels de résolveurs de glyphes, les rangées d’images, la récursion, l’encodage PNG et avant la publication ; l’appelant possède sa durée de vie

Le renderer vérifie la permission d’extraction via la politique du document emprunté et conserve les valeurs d’objets sources et les octets sources

Propriété de la sortie

HPDFRenderHeadlessPagePNG achève le rendu et l’encodage PNG en privé avant d’écrire dans un flux possédé par l’appelant ; un échec d’E/S final du flux peut retenir des octets déjà acceptés

HPDFRenderHeadlessPagePNGFile vérifie l’identité de la source, crée exclusivement un fichier de staging dans le répertoire cible, le flush, revérifie identité et annulation, puis remplace atomiquement la destination

La publication Windows utilise au plus huit tentatives de remplacement atomique et sept attentes de 1, 2, 4, 8, 16, 16 et 16 millisecondes, en ne réessayant que les erreurs d’accès refusé, de violation de partage et de violation de verrou ; l’annulation est vérifiée avant chaque tentative et de part et d’autre de chaque attente

Une publication Windows échouée rapporte le code d’erreur Windows final capturé via EHPDFHeadlessRenderError ; l’annulation conserve le diagnostic d’annulation du renderer, et aucun des deux chemins ne supprime la destination existante ni ne retombe sur une copie non atomique

Les échecs de rendu, de budget, d’annulation et de staging préservent une destination existante et suppriment les fichiers de staging non publiés possédés ; les alias de chemins sources et de hardlinks sont rejetés

Acceptation

L’acceptation runtime Windows utilise des exécutables console natifs correspondants et une fermeture d’imports DLL portables isolée et épinglée en SHA256 ; un processus WSL séparé exécute des vérifications indépendantes de pixels, d’équations et de géométrie MuPDF et Poppler sur les fichiers PNG produits sous Windows

Les substituts de polices standard Windows utilisent des faces GDI Cairo explicites pour le texte Unicode et de vrais contours, y compris modes de clipping et fill-and-stroke ; les polices embarquées conservent leur mapping de glyphes FreeType

Les appels OpenJPEG utilisent l’ABI stdcall Windows et des exports décorés Win32, tandis que les callbacks de flux et de messages conservent la convention de callbacks C

Tests/Linux/Run-HeadlessCairoAcceptance.sh effectue des builds ELF natifs à neuf, vide DISPLAY et WAYLAND_DISPLAY, rejette les bibliothèques de bureau liées directement et exécute des oracles pypdf/MuPDF indépendants

Les fixtures exercent les polices standard, TrueType Unicode, Type3, tous les modes de rendu de texte et de fusion, alpha et knockout, groupes de transparence RGB, profondeurs d’échantillons et Decode, masques d’images et Matte, couleurs Indexed et ICC, codecs terminaux, chaînes de filtres chiffrées AES, géométrie de page, transformations d’annotations, budgets, annulation, préservation de sources et sortie atomique

Voir THPDFHeadlessRenderResult pour les compteurs et EHPDFHeadlessRenderError pour la gestion d’erreurs