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
- Backends de rendu enfichables
IHPDFContentOperatorDeviceHPDFInterpretContentTokensDeviceTHotPDF.CompileLoadedPageDisplayListTHPDFPageDisplayList.GetTokenTHPDFPageDisplayList.GetObjectTHPDFPageDisplayList.QueryObjectIndexesTHPDFPageDisplayList.PageObjectTHPDFPageDisplayList.ResourcesTHPDFPageDisplayList.MediaBoxTHotPDF.RenderLoadedPageTilesetRenderLoadedPageBandsTHotPDF.RenderLoadedPageTilesParalleletRenderLoadedPageBandsParallelTHPDFParallelTileRenderInfoTHotPDF.SaveLoadedPageToPngTHotPDF.SaveLoadedPageToPngStreamTHotPDF.SaveLoadedPagesToTiffBandedTHotPDF.SaveLoadedPagesToTiffStreamBandedTHPDFBandImageExportInfoTHotPDF.RendererSharedCacheMaxBytesTHotPDF.RenderLoadedPagesParallelTHotPDF.RenderLoadedPagesParallelOrderedTHPDFParallelRenderPipelineInfoTHotPDF.PrefetchLoadedPagesTHotPDF.GetLoadedPagePrefetchInfoTHPDFLoadedPagePrefetchInfoTHotPDF.FlattenLoadedPageTransparencyTHotPDF.FlattenLoadedPageComplexGraphicsTHotPDF.RenderLoadedPageSeparationPlateTHotPDF.GetLoadedPageSpotColorantsTHotPDF.RewriteLoadedPageColorsTHotPDF.AnalyzeLoadedPageInkCoverageTHotPDF.InspectLoadedPageTrappingTHotPDF.ConfigureRenderICCWorkflow