Liste de afișare și producție tipografică
HotPDF compilează fluxurile de pagină încărcate în instanțe reutilizabile THPDFPageDisplayList, cu metrici THPDFDisplayListInfo și casete de delimitare ale obiectelor de conținut
Randarea documentului pune în cache listele compilate, în timp ce apelanții pot solicita o listă deținută independent pentru execuție repetată sau interogări regionale de obiecte
Interpret de producție partajat
Replay-ul bitmap non-progresiv, direct-DC, Form și display-list treceToate conținutul pre-tokenizat prin HPDFInterpretContentTokensDevice, care deține parcurgerea operatorilor și granițele de anulare
THPDFPageRenderer implementează IHPDFContentOperatorDevice, astfel încât parcurgerea partajată își invocă mașina de stări completă pentru grafică, text, resurse, decupare, pattern-uri, transparență, conținut marcat și imagini, fără a reduce randarea de producție la suprafața mai mică de callback-uri semantice
Display list-urile pun în cache indicii de token-uri de operatori în timp ce fluxurile sunt compilate și redau doar acei indici, evitând scanările repetate de operanzi; THPDFPageDisplayList.OperatorCount și THPDFDisplayListInfo.OperatorCount expun numărul de comenzi din cache
Dispozitivele semantice care implementează doar IHPDFContentDevice păstrează callback-uri filtrate după capabilități, în timp ce dispozitivele complete de operatori primesc câte un operator validat pe rând, cu un punct de control de anulare per operator
Randare mărginită și concurentă
THPDFRenderTileEvent primește câte un tile sau o bandă orizontală de dimensiunea apelantului, menținând memoria raster de vârf independentă de dimensiunea completă a paginii
RenderLoadedPagesParallel suprapune compilarea listelor de afișare cu redarea, pornește prima pagină gata fără a aștepta o barieră completă de compilare, echilibrează dinamic ambele etape între worker-i mărginiți și returnează un THPDFBitmapArray în ordinea intrării
Compilarea rulează în afara blocării cache-ului de liste de afișare, în timp ce admiterea cu verificare dublă și numărătorile protejate de utilizare permit paginilor necorelate să compileze concurent fără a duplica intrările publicate sau a evacua o listă în timpul redării
THPDFParallelRenderPipelineInfo expune lovituri de cache, compilări, finalizări, concurență de vârf de compilare și randare, pagini compilate la primul rezultat, latența primului rezultat și timpul total scurs
RenderLoadedPagesParallelOrdered livrează callback-urile în ordinea intrării pe firul de execuție apelant și eliberează fiecare bitmap împrumutat după ce callback-ul returnează, în timp ce o adâncime de ieșire selectată de apelant aplică contrapresiune producătorului și rezervă un slot pentru pagina următoare necesară, astfel încât o pagină timpurie lentă nu poate bloca în spatele rezultatelor ulterioare
Streaming-ul ordonat reține cel mult o listă de afișare și o randare activă per worker plus coada mărginită de bitmap-uri finalizate, în loc să păstreze rezidentă ieșirea completă a job-ului
Backend-urile de randare plugabile consumă aceleași liste compilate printr-o vizualizare non-proprietară a resurselor documentului, astfel încât căile sincrone și paralele evită reanalizarea conținutului paginii, în timp ce capacitățile backend-ului determină dacă apelurile se pot suprapune sau necesită expediere serială
Planificatorul de memorie de vârf la nivel de proces limitează acum ambele API-uri paralele: cea mai mare estimare de pagină reduce numărul inițial de worker-i, fiecare pagină revendicată își rezervă setul complet estimat de lucru, iar ieșirea ordonată păstrează acea rezervare până la livrarea callback-ului
Anularea planificatorului trezește așteptătorii de buget la anularea callback-ului sau eșecul worker-ului, în timp ce telemetria expune worker-i solicitați versus efectivi, greutatea de vârf a rezervării, paginile întârziate și timpul agregat de așteptare
RenderLoadedPageTilesParallel și RenderLoadedPageBandsParallel livrează dale în ordinea rândurilor sau benzi de sus în jos, împrumutate, peste worker-i izolați, în timp ce fiecare worker deține cel mult o dală, iar un plafon de memorie de lucru furnizat de apelant reduce concurența înainte de prima revendicare
Contextele de randare paralelă copiază secvențe de token-uri de glife Type 3 imutabile și ecrane de praguri halftone dintr-un singur cache LRU limitat, păstrând proprietatea locală renderer-ului pentru starea grafică mutabilă și resursele GDI
SaveLoadedPageToPng, SaveLoadedPageToPngStream, SaveLoadedPagesToTiffBanded și SaveLoadedPagesToTiffStreamBanded consumă același renderer de benzi prin encodoare PNG sau TIFF în flux, astfel încât paginile foarte mari emit output comprimat rând cu rând, fără a reține un framebuffer complet, în timp ce THPDFBandImageExportInfo raportează benzile randate, rândurile codificate, worker-ii, octeții de rezervare de vârf, octeții de output, timpul scurs și anularea
Decodarea partajată a imaginilor este coordonată separat, astfel încât lucrul vectorial pe pagini rămâne paralel fără a corupe intrările de cache ale imaginilor decodate
PrefetchLoadedPages încălzește intrările raster cu un token dedicat de anulare în timp ce compilează și randează în afara blocării cache-ului, iar randarea paginii în prim-plan preemte worker-ul înainte de a începe lucrul sensibil la latență
THPDFLoadedPagePrefetchInfo raportează lucrul planificat, început, finalizat, pus în cache, randat, eșuat, anulat și preemptat în prim-plan, împreună cu latența ultimă și de vârf de anulare
Controale de transparență și imprimare
Aplatizarea transparenței verifică mai întâi numărul de transparență al listei de afișare și un plafon de pixeli definit de apelant, apoi înlocuiește vopseaua paginii cu o imagine RGB calibrată comprimată Flate fără pierderi
Paginile cu coloranți Separation sau DeviceN rămân ca conținut vectorial, cu coloranții detectați și starea de conservare expuse apelantului
Renderer-ul execută funcții de transfer și dicționare de semitonuri de Tip 1, 5, 6, 10 sau 16 din ExtGState, păstrând ecranele RGB independente și suprascrierile lor de transfer prin q și Q
THPDFInkCoverageInfo raportează acoperirea medie CMYK, acoperirea maximă totală a ariei și numărul de pixeli peste pragul selectat
Ieșirea pe plăci de proces și spot suportă coloranții DeviceCMYK, Separation și DeviceN
Rescrierea culorii paginilor încărcate folosește același renderer complet pentru a converti paginile complexe în Gray, RGB sau CMYK, păstrând conținutul simplu de culoare-dispozitiv al paginilor ca vectori și aplicând o politică explicită de plăci spot
THPDFTrappingInfo combină declarațiile de trapping ale documentului, metadatele paginii și diagnosticele structurale TrapNet
Flux de lucru ICC
Transformarea de randare poate combina un profil sursă PDF, un spațiu de culoare de amestec, un profil de probă, un profil de ieșire și o destinație raster sRGB
Toate cele patru intenții de randare ICC și compensarea reală a punctului negru sunt aplicate consecvent culorilor vectoriale și eșantioanelor de imagine în tot pipeline-ul
Transformările complete sunt partajate între căile de randare vectorială, de imagine, de pagină și paralelă printr-un cache LRU thread-safe de 64 MiB, indexat după conținutul profilurilor sursă, de probă și de ieșire, intenția efectivă de randare și compensarea punctului negru
Aplatizarea transparenței reutilizează același pipeline de transformare, apoi emite tile-uri D65 CalRGB fără cusături sub bugete de raster total și de pixeli per tile controlate de apelant
API-uri principale
- Backend-uri de randare plugabile
IHPDFContentOperatorDeviceHPDFInterpretContentTokensDeviceTHotPDF.CompileLoadedPageDisplayListTHPDFPageDisplayList.GetTokenTHPDFPageDisplayList.GetObjectTHPDFPageDisplayList.QueryObjectIndexesTHPDFPageDisplayList.PageObjectTHPDFPageDisplayList.ResourcesTHPDFPageDisplayList.MediaBoxTHotPDF.RenderLoadedPageTilesșiRenderLoadedPageBandsTHotPDF.RenderLoadedPageTilesParallelșiRenderLoadedPageBandsParallelTHPDFParallelTileRenderInfoTHotPDF.SaveLoadedPageToPngTHotPDF.SaveLoadedPageToPngStreamTHotPDF.SaveLoadedPagesToTiffBandedTHotPDF.SaveLoadedPagesToTiffStreamBandedTHPDFBandImageExportInfoTHotPDF.RendererSharedCacheMaxBytesTHotPDF.RenderLoadedPagesParallelTHotPDF.RenderLoadedPagesParallelOrderedTHPDFParallelRenderPipelineInfoTHotPDF.PrefetchLoadedPagesTHotPDF.GetLoadedPagePrefetchInfoTHPDFLoadedPagePrefetchInfoTHotPDF.FlattenLoadedPageTransparencyTHotPDF.FlattenLoadedPageComplexGraphicsTHotPDF.RenderLoadedPageSeparationPlateTHotPDF.GetLoadedPageSpotColorantsTHotPDF.RewriteLoadedPageColorsTHotPDF.AnalyzeLoadedPageInkCoverageTHotPDF.InspectLoadedPageTrappingTHotPDF.ConfigureRenderICCWorkflow