Display List e Print Production
HotPDF compila gli stream delle pagine caricate in istanze THPDFPageDisplayList riutilizzabili con metriche THPDFDisplayListInfo e bounding box degli oggetti di contenuto
Il rendering del documento mette in cache le liste compilate, mentre i chiamanti possono richiedere una lista di proprietà indipendente per esecuzioni ripetute o query per regione sugli oggetti
Interprete di produzione condiviso
Bitmap non progressivo, direct-DC, Form e replay di display-list passano tutti il contenuto pre-tokenizzato attraverso HPDFInterpretContentTokensDevice, che possiede la traversata degli operatori e i confini di cancellazione
THPDFPageRenderer implementa IHPDFContentOperatorDevice, quindi la traversata condivisa invoca la sua macchina a stati completa di grafica, testo, risorse, clipping, pattern, trasparenza, marked-content e immagini senza ridurre il rendering di produzione alla più piccola superficie di callback semantica
Le display list mettono in cache gli indici dei token degli operatori mentre gli stream vengono compilati e rieseguono solo quegli indici, evitando scansioni ripetute degli operandi; THPDFPageDisplayList.OperatorCount e THPDFDisplayListInfo.OperatorCount espongono il numero di comandi in cache
I device semantici che implementano solo IHPDFContentDevice conservano le callback filtrate per capacità, mentre i device a operatori completi ricevono un operatore validato alla volta con un checkpoint di cancellazione per operatore
Rendering limitato e concorrente
THPDFRenderTileEvent riceve un tile o una banda orizzontale alla volta, di dimensione decisa dal chiamante, mantenendo il picco di memoria raster indipendente dalla dimensione dell'intera pagina
RenderLoadedPagesParallel sovrappone la compilazione delle display-list alla riproduzione, avvia la prima pagina pronta senza attendere una barriera di compilazione completa, bilancia dinamicamente le due fasi su worker limitati e restituisce una THPDFBitmapArray in ordine di input
La compilazione gira fuori dal lock della cache delle display-list, mentre l'ammissione double-checked e i conteggi d'uso protetti permettono a pagine non correlate di compilare in concorrenza senza duplicare voci già pubblicate né sfrattare una lista durante la riproduzione
THPDFParallelRenderPipelineInfo espone cache hit, compilazioni, completamenti, concorrenza di picco di compilazione e rendering, pagine compilate al primo risultato, latenza del primo risultato e tempo totale trascorso
RenderLoadedPagesParallelOrdered consegna le callback in ordine di input sul thread chiamante e rilascia ogni bitmap presa in prestito dopo il ritorno della callback, mentre una profondità di output scelta dal chiamante applica backpressure ai produttori e riserva uno slot per la pagina successiva richiesta, così una pagina lenta in anticipo non può andare in deadlock dietro risultati successivi
Lo streaming ordinato conserva al massimo una display list e un rendering attivo per worker più la coda limitata di bitmap completate, invece di tenere residente l'output completo del lavoro
Render backend pluggabili consumano le stesse liste compilate attraverso una vista delle risorse del documento senza proprietà, così i percorsi sincrono e parallelo evitano di riaprire il contenuto delle pagine, mentre le capacità del backend determinano se le chiamate possono sovrapporsi o richiedono dispatch seriale
Lo scheduler process-wide del picco di memoria ora limita entrambe le API parallele: la stima della pagina più grande riduce il numero iniziale di worker, ogni pagina rivendicata riserva il suo intero working set stimato, e l'output ordinato mantiene quella riserva fino alla consegna delle callback
La cancellazione dello scheduler sveglia i waiter del budget alla cancellazione delle callback o al fallimento di un worker, mentre la telemetria espone worker richiesti contro effettivi, peso di picco delle riserve, pagine ritardate e tempo di attesa aggregato
RenderLoadedPageTilesParallel e RenderLoadedPageBandsParallel consegnano tile row-major o bande dall'alto verso il basso prese in prestito attraverso worker isolati, mentre ogni worker possiede al massimo un tile e un tetto di memoria di lavoro fornito dal chiamante riduce la concorrenza prima della prima rivendicazione
I contesti di rendering parallelo copiano le sequenze di token dei glifi Type 3 immutabili e le schermate di soglia halftone da una singola cache LRU limitata, preservando la proprietà locale del renderer per lo stato grafico mutabile e le risorse GDI
SaveLoadedPageToPng, SaveLoadedPageToPngStream, SaveLoadedPagesToTiffBanded e SaveLoadedPagesToTiffStreamBanded consumano lo stesso renderer a bande attraverso encoder PNG o TIFF in streaming, così le pagine molto grandi emettono output compresso riga per riga senza trattenere un framebuffer completo, mentre THPDFBandImageExportInfo riporta bande renderizzate, righe codificate, worker, byte di riserva di picco, byte di output, tempo trascorso e cancellazione
Il decoding condiviso delle immagini è coordinato separatamente, così il lavoro vettoriale sulle pagine resta parallelo senza corrompere le voci della cache delle immagini decodificate
PrefetchLoadedPages scalda le voci raster con un cancellation token dedicato mentre compila e renderizza fuori dal lock della cache, e il rendering in foreground della pagina preempta il worker prima di iniziare il lavoro sensibile alla latenza
THPDFLoadedPagePrefetchInfo riporta il lavoro pianificato, avviato, completato, in cache, renderizzato, fallito, cancellato e preemptato dal foreground, insieme all'ultima e alla massima latenza di cancellazione
Trasparenza e controlli di stampa
Il flattening della trasparenza controlla prima il conteggio di trasparenza della display-list e un tetto di pixel definito dal chiamante, poi sostituisce la pittura della pagina con un'immagine RGB calibrata compressa Flate senza perdita
Le pagine con coloranti Separation o DeviceN restano contenuto vettoriale, con i coloranti rilevati e lo stato di preservazione esposti al chiamante
Il renderer esegue le transfer function e i dizionari halftone Type 1, 5, 6, 10 o 16 da ExtGState preservando le schermate RGB indipendenti e i loro override di transfer attraverso q e Q
THPDFInkCoverageInfo riporta la copertura CMYK media, la massima copertura totale di area e il numero di pixel sopra la soglia selezionata
L'output di lastre process e spot supporta i coloranti DeviceCMYK, Separation e DeviceN
Riscrittura del colore delle pagine caricate usa lo stesso renderer completo per convertire pagine complesse in Gray, RGB o CMYK, mantenendo come vettori il contenuto di pagina a colore device semplice e applicando una politica esplicita per le lastre spot
THPDFTrappingInfo combina le dichiarazioni di trapping del documento, i metadati di pagina e la diagnostica strutturale del TrapNet
Workflow ICC
La trasformazione di rendering può combinare un profilo sorgente PDF, uno spazio colore di blend, un profilo di proof, un profilo di output e una destinazione raster sRGB
Tutti e quattro i rendering intent ICC e la vera compensazione del black point vengono applicati in modo coerente ai colori vettoriali e ai campioni delle immagini lungo tutta la pipeline
Le trasformazioni complete sono condivise tra percorsi vettoriali, immagini, pagine e rendering parallelo attraverso una cache LRU thread-safe da 64 MiB con chiave su contenuti di profilo sorgente, proof e output, rendering intent effettivo e compensazione del black point
Il flattening della trasparenza riusa la stessa pipeline di trasformazione, poi emette tile CalRGB D65 senza cuciture sotto budget di pixel totali e per tile controllati dal chiamante
API principali
- Render backend pluggabili
IHPDFContentOperatorDeviceHPDFInterpretContentTokensDeviceTHotPDF.CompileLoadedPageDisplayListTHPDFPageDisplayList.GetTokenTHPDFPageDisplayList.GetObjectTHPDFPageDisplayList.QueryObjectIndexesTHPDFPageDisplayList.PageObjectTHPDFPageDisplayList.ResourcesTHPDFPageDisplayList.MediaBoxTHotPDF.RenderLoadedPageTileseRenderLoadedPageBandsTHotPDF.RenderLoadedPageTilesParalleleRenderLoadedPageBandsParallelTHPDFParallelTileRenderInfoTHotPDF.SaveLoadedPageToPngTHotPDF.SaveLoadedPageToPngStreamTHotPDF.SaveLoadedPagesToTiffBandedTHotPDF.SaveLoadedPagesToTiffStreamBandedTHPDFBandImageExportInfoTHotPDF.RendererSharedCacheMaxBytesTHotPDF.RenderLoadedPagesParallelTHotPDF.RenderLoadedPagesParallelOrderedTHPDFParallelRenderPipelineInfoTHotPDF.PrefetchLoadedPagesTHotPDF.GetLoadedPagePrefetchInfoTHPDFLoadedPagePrefetchInfoTHotPDF.FlattenLoadedPageTransparencyTHotPDF.FlattenLoadedPageComplexGraphicsTHotPDF.RenderLoadedPageSeparationPlateTHotPDF.GetLoadedPageSpotColorantsTHotPDF.RewriteLoadedPageColorsTHotPDF.AnalyzeLoadedPageInkCoverageTHotPDF.InspectLoadedPageTrappingTHotPDF.ConfigureRenderICCWorkflow