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