Display Lists and Print Production
HotPDF kompilerar laddade sidströmmar till återanvändbara THPDFPageDisplayList instanser med THPDFDisplayListInfo mätetal och begränsningsrutor för innehållsobjekt
Dokumentrenderingen cachar kompilerade listor, medan anropare kan begära en självägd lista för upprepad körning eller regionala objektsökningar
Gemensam produktionsinterpretator
Icke-progressiv bitmapp, direkt-DC, Form och display-list-uppspelning passerar alla förtokeniserat innehåll genom HPDFInterpretContentTokensDevice, som äger operatorgenomgången och avbrytsgränserna
THPDFPageRenderer implementerar IHPDFContentOperatorDevice, så den gemensamma genomgången anropar dess fullständiga tillståndsmaskin för grafik, text, resurser, klippning, mönster, transparens, markerat innehåll och bilder utan att reducera produktionsrendering till den mindre semantiska callback-ytan
Display lists cachar operatörstokenindex medan strömmar kompileras och spelar bara upp de indexen, vilket undviker upprepade operandsökningar; THPDFPageDisplayList.OperatorCount och THPDFDisplayListInfo.OperatorCount exponerar det cachade kommandoantonet
Semantiska enheter som bara implementerar IHPDFContentDevice behåller kapabilitetsfiltrerade callbacks, medan fullständiga operatörsenheter tar emot en validerad operatör åt gången med en avbrytskontrollpunkt per operatör
Avgränsad och samtidig rendering
THPDFRenderTileEvent tar emot en anroparstor tile eller ett horisontellt band åt gången, vilket håller topplinnetminnet oberoende av hela sidstorleken
RenderLoadedPagesParallel överlappar display-list-kompilering med uppspelning, startar den första färdiga sidan utan att vänta på en fullständig kompilerbarriär, balanserar dynamiskt båda stegen över avgränsade workers och returnerar en THPDFBitmapArray i indataordning
Kompilering körs utanför display-list-cache-låset, medan dubbelkontrollerad antagning och skyddade användningsräkare låter orelaterade sidor kompilera samtidigt utan att duplicera publicerade poster eller kasta ut en lista under uppspelning
THPDFParallelRenderPipelineInfo exponerar cacheträffar, kompileringar, fullföljningar, toppkonkurrens vid kompilering och rendering, sidor kompilerade vid första resultat, svarstid till första resultat och total förfluten tid
RenderLoadedPagesParallelOrdered lämnar callbacks i indataordning på anropstråden och släpper varje lånad bitmapp efter att callbacken returnerat, medan ett anroparvalt utdatadjup tillämpar producentbackpressure och reserverar en plats för nästa begärda sida så att en långsam tidig sida inte kan gå i lås bakom senare resultat
Ordnad strömning behåller som mest en display list och en aktiv rendering per worker plus den avgränsade kön av färdiga bitmappar i stället för att hålla hela jobbutdata resident
Pluggable render backends konsumerar samma kompilerade listor via en icke-ägande vy av dokumentresurser, så synkrona och parallella vägar slipper reparsa sidinnehåll medan backend-kapabiliteterna avgör om anrop får överlappa eller kräver serieutsändning
Den processvida topplinnesschemaläggaren begränsar nu båda parallella API:erna: den största siduppskattningen reducerar initiala worker-antalet, varje ansökt sida reserverar sin fullständiga uppskattade arbetsmängd, och ordnad utdata behåller den reservationen fram till callback-lämningen
Schemaläggarens avbrott väcker budgetväntare vid callback-avbrott eller worker-fel, medan telemetrin exponerar begärda kontra effektiva workers, topp-reservationsvikt, försenade sidor och sammanlagd väntetid
RenderLoadedPageTilesParallel och RenderLoadedPageBandsParallel lämnar lånda radordnade tiles eller topp-till-botten-band över isolerade workers, medan varje worker äger som mest en tile och en anroparlevererad arbetsminnesgräns reducerar konkurrensen före det första anspråket
Parallella renderingskontexter kopierar oföränderliga Type 3-glyftokensekvenser och rastertröskelskärmar från en gemensam avgränsad LRU-cache och bevarar renderarlokalt ägandeskap för muterbart grafiktillstånd och GDI-resurser
SaveLoadedPageToPng, SaveLoadedPageToPngStream, SaveLoadedPagesToTiffBanded och SaveLoadedPagesToTiffStreamBanded konsumerar samma bandrenderare genom strömmande PNG- eller TIFF-enkodrar, så mycket stora sidor emitterar komprimerad utdata rad för rad utan att hålla en fullständig framebuffer, medan THPDFBandImageExportInfo rapporterar renderade band, enkodade rader, workers, topp-reservationsbyte, utdatabyte, förfluten tid och avbrott
Gemensam bilddekodning samordnas separat så att vektorpagesarbete förblir parallellt utan att skada cacheposter för dekodade bilder
PrefetchLoadedPages värmer rasterposter med en dedikerad avbrytstoken medan kompilering och rendering sker utanför cache-låset, och förgrundssidsrendering preemterar workern innan latenskänsligt arbete påbörjas
THPDFLoadedPagePrefetchInfo rapporterat schemalagt, påbörjat, fullbordat, cachat, renderat, misslyckat, avbrutet och förgrundspreemterat arbete tillsammans med senaste och topp-laten vid avbrott
Transparens och utskriftskontroller
Transparensutplattning kontrollerar först display-list-transparensräknaren och en anropardefinierad pixeltak, och ersätter därefter sidmålningen med en förlustfri Flate-komprimerad kalibrerad RGB-bild
Sidor med Separation- eller DeviceN-färgämnen förblir vektorinnehåll, med de detekterade färgämnena och bevarandestatusen exponerade för anroparen
Renderaren kör transferfunktioner och Type 1-, 5-, 6-, 10- eller 16-rasterordlistor från ExtGState medan den bevarar oberoende RGB-skärmar och deras transfer-överskridanden via q och Q
THPDFInkCoverageInfo rapporterar genomsnittlig CMYK-täckning, maximal total arealetäckning och antalet pixlar över den valda tröskeln
Utskrift på process- och spotplattor stödjer DeviceCMYK, Separation och DeviceN färgämnen
Loaded-page colour rewrite använder samma fullständiga renderare för att konvertera komplexa sidor till Gray, RGB eller CMYK medan enkelt innehåll i enhetsfärger behålls som vektorer och en explicit spotplatt-policy tillämpas
THPDFTrappingInfo kombinerar dokumentets trapping-deklarationer, sidmetadata och TrapNet-strukturdiagnostik
ICC-arbetsflöde
Renderingstransformen kan kombinera en PDF-källprofil, blandningsfärgrymd, korrekturprofil, utdataprofil och sRGB-rastermål
Alla fyra ICC rendering intents och äkta svartpunktskompensering tillämpas konsekvent på vektorfärger och bildsamples i hela pipelinen
Kompletta transform delas över vektor-, bild-, sid- och parallella renderingsvägar via en trådsäker LRU-cache på 64 MiB, nycklad av käll-, korrektur- och utdataprofilinnehåll, effektiv rendering intent och svartpunktskompensering
Transparensutplattning återanvänder samma transformpipeline och emitterar därefter fogfria D65 CalRGB-tiles under anroparstyrda totalraster- och per-tile-pixelbudgetar
Primära API:er
- Pluggable render backends
IHPDFContentOperatorDeviceHPDFInterpretContentTokensDeviceTHotPDF.CompileLoadedPageDisplayListTHPDFPageDisplayList.GetTokenTHPDFPageDisplayList.GetObjectTHPDFPageDisplayList.QueryObjectIndexesTHPDFPageDisplayList.PageObjectTHPDFPageDisplayList.ResourcesTHPDFPageDisplayList.MediaBoxTHotPDF.RenderLoadedPageTilesochRenderLoadedPageBandsTHotPDF.RenderLoadedPageTilesParallelochRenderLoadedPageBandsParallelTHPDFParallelTileRenderInfoTHotPDF.SaveLoadedPageToPngTHotPDF.SaveLoadedPageToPngStreamTHotPDF.SaveLoadedPagesToTiffBandedTHotPDF.SaveLoadedPagesToTiffStreamBandedTHPDFBandImageExportInfoTHotPDF.RendererSharedCacheMaxBytesTHotPDF.RenderLoadedPagesParallelTHotPDF.RenderLoadedPagesParallelOrderedTHPDFParallelRenderPipelineInfoTHotPDF.PrefetchLoadedPagesTHotPDF.GetLoadedPagePrefetchInfoTHPDFLoadedPagePrefetchInfoTHotPDF.FlattenLoadedPageTransparencyTHotPDF.FlattenLoadedPageComplexGraphicsTHotPDF.RenderLoadedPageSeparationPlateTHotPDF.GetLoadedPageSpotColorantsTHotPDF.RewriteLoadedPageColorsTHotPDF.AnalyzeLoadedPageInkCoverageTHotPDF.InspectLoadedPageTrappingTHotPDF.ConfigureRenderICCWorkflow