Display Lists and Print Production

HotPDF compile les flux de pages chargés en instances THPDFPageDisplayList réutilisables avec les métriques THPDFDisplayListInfo et les boîtes englobantes d'objets de contenu

Le rendu de document met en cache les listes compilées, tandis que les appelants peuvent demander une liste possédée indépendamment pour une exécution répétée ou des requêtes régionales d'objets

Rendu borné et concurrent

THPDFRenderTileEvent reçoit une tuile ou une bande horizontale de la taille de l'appelant à la fois, ce qui maintient la mémoire matricielle de pointe indépendante de la taille complète de la page

RenderLoadedPagesParallel chevauche la compilation de listes d'affichage avec la lecture, démarre la première page prête sans attendre une barrière de compilation complète, équilibre dynamiquement les deux étapes sur des travailleurs bornés, et renvoie un THPDFBitmapArray dans l'ordre d'entrée

Les display lists mettent en cache les index de tokens d’opérateurs pendant la compilation des flux et ne rejouent que ces index, évitant les scans répétés d’opérandes ; THPDFPageDisplayList.OperatorCount et THPDFDisplayListInfo.OperatorCount exposent le nombre de commandes en cache

Les périphériques sémantiques qui n’implémentent que IHPDFContentDevice conservent des callbacks filtrés par capacité, tandis que les périphériques d’opérateurs complets reçoivent un opérateur validé à la fois avec un point de contrôle d’annulation par opérateur

Rendu borné et concurrent

THPDFRenderTileEvent reçoit une tuile ou une bande horizontale dimensionnée par l’appelant à la fois, maintenant la mémoire raster au pic indépendante de la taille complète de la page

RenderLoadedPagesParallel chevauche la compilation de display lists et le replay, démarre la première page prête sans attendre une barrière de compilation complète, équilibre dynamiquement les deux étapes entre des workers bornés, et renvoie un THPDFBitmapArray dans l’ordre d’entrée

La compilation s'exécute hors du verrou du cache de listes d'affichage, tandis que l'admission à double vérification et les compteurs d'utilisation protégés permettent aux pages non associées de compiler en parallèle sans dupliquer les entrées publiées ni expulser une liste pendant la lecture

THPDFParallelRenderPipelineInfo expose les succès de cache, les compilations, les achèvements, la concurrence de compilation et de rendu de pointe, les pages compilées au premier résultat, la latence du premier résultat et le temps écoulé total

RenderLoadedPagesParallelOrdered livre les rappels dans l'ordre d'entrée sur le thread appelant et libère chaque bitmap emprunté après le retour du rappel, tandis qu'une profondeur de sortie choisie par l'appelant applique une contre-pression de producteur et réserve un emplacement pour la page requise suivante de sorte qu'une page précoce lente ne puisse pas bloquer derrière des résultats ultérieurs

La diffusion ordonnée conserve au plus une liste d'affichage et un rendu actif par travailleur plus la file bornée de bitmaps achevés au lieu de garder la sortie complète du travail résidente

Les backends de rendu enfichables consomment les mêmes listes compilées via une vue de ressources de document non propriétaire, de sorte que les chemins synchrones et parallèles évitent de réanalyser le contenu de page tandis que les capacités du backend déterminent si les appels peuvent se chevaucher ou nécessitent une répartition en série

Le planificateur de mémoire de pointe à l'échelle du processus limite désormais les deux API parallèles : l'estimation de page la plus grande réduit le nombre de travailleurs initial, chaque page revendiquée réserve son espace de travail estimé complet, et la sortie ordonnée conserve cette réservation jusqu'à la livraison du rappel

L'annulation du planificateur réveille les attenteurs de budget à l'annulation de rappel ou à l'échec de travailleur, tandis que la télémétrie expose les travailleurs demandés par rapport aux travailleurs effectifs, le poids de réservation de pointe, les pages retardées et le temps d'attente agrégé

RenderLoadedPageTilesParallel et RenderLoadedPageBandsParallel livrent des tuiles ligne-major empruntées ou des bandes de haut en bas à travers des workers isolés, chaque worker possédant au plus une tuile, et un plafond de mémoire de travail fourni par l’appelant réduit la concurrence avant la première revendication

Les contextes de rendu parallèle copient les séquences immuables de tokens de glyphes Type 3 et les écrans de seuillage de halftone depuis une seule LRU bornée, en préservant la possession locale au renderer pour l’état graphique mutable et les ressources GDI

SaveLoadedPageToPng, SaveLoadedPageToPngStream, SaveLoadedPagesToTiffBanded et SaveLoadedPagesToTiffStreamBanded consomment le même renderer de bandes via des encodeurs PNG ou TIFF en flux, si bien que les très grandes pages émettent une sortie compressée ligne par ligne sans retenir un framebuffer complet, tandis que THPDFBandImageExportInfo rapporte les bandes rendues, lignes encodées, workers, octets de réservation au pic, octets de sortie, temps écoulé et annulation

Le décodage d'images partagé est coordonné séparément afin que le travail vectoriel de page reste parallèle sans corrompre les entrées de cache d'images décodées

PrefetchLoadedPages réchauffe les entrées matricielles avec un jeton d'annulation dédié tout en compilant et en rendant hors du verrou de cache, et le rendu de page au premier plan préempte le travailleur avant de démarrer le travail sensible à la latence

THPDFLoadedPagePrefetchInfo rapporte les travaux planifiés, démarrés, achevés, mis en cache, rendus, en échec, annulés et préemptés au premier plan ainsi que les latences d'annulation dernières et de pointe

Transparence et contrôles d'impression

L'aplatissement de transparence vérifie d'abord le compteur de transparence de la liste d'affichage et un plafond de pixels défini par l'appelant, puis remplace la peinture de page par une image RGB calibrée compressée Flate sans perte

Les pages avec des colorants Separation ou DeviceN restent en contenu vectoriel, avec les colorants détectés et le statut de préservation exposés à l'appelant

Le rendu exécute les fonctions de transfert et les dictionnaires de demi-teintes de type 1, 5, 6, 10 ou 16 depuis ExtGState tout en préservant les écrans RGB indépendants et leurs remplacements de transfert à travers q et Q

THPDFInkCoverageInfo rapporte la couverture CMYK moyenne, la couverture de zone totale maximale et le nombre de pixels au-dessus du seuil sélectionné

La sortie de plaques de quadri et de couleurs d'accompagnement prend en charge les colorants DeviceCMYK, Separation et DeviceN

La réécriture de couleurs de pages chargées utilise le même rendu complet pour convertir les pages complexes en Gray, RGB ou CMYK tout en conservant le contenu de page à couleur de périphérique simple sous forme vectorielle et en appliquant une politique de plaques d'accompagnement explicite

THPDFTrappingInfo combine les déclarations de trappe du document, les métadonnées de page et les diagnostics structurels TrapNet

Flux de travail ICC

La transformée de rendu peut combiner un profil source PDF, un espace colorimétrique de fusion, un profil d'épreuve, un profil de sortie et une destination matricielle sRGB

Les quatre intentions de rendu ICC et la vraie compensation de point noir sont appliquées de façon cohérente aux couleurs vectorielles et aux échantillons d'images à travers le pipeline

Les transformées complètes sont partagées entre les chemins de rendu vectoriel, image, page et parallèle via un cache LRU de 64 Mio sûr entre threads indexé par le contenu des profils source, d'épreuve et de sortie, l'intention de rendu effective et la compensation de point noir

L'aplatissement de transparence réutilise le même pipeline de transformées, puis émet des tuiles CalRGB D65 sans jointure sous des budgets de pixels matriciels totaux et par tuile contrôlés par l'appelant

API principales