Display Lists and Print Production

HotPDF kompiluje streamy načtených stránek do opakovaně použitelných instancí THPDFPageDisplayList s metrikami THPDFDisplayListInfo a ohraničujícími boxy obsahových objektů

Vykreslování dokumentu cacheuje zkompilované seznamy, zatímco volající si mohou vyžádat nezávisle vlastněný seznam pro opakované vykonání nebo regionální dotazy na objekty

Sdílený produkční interpret

bitmapa bez progresivity, přímé DC, replay Form a replay display listů všechny vedou předtokenizovaný obsah přes HPDFInterpretContentTokensDevice, které vlastní průchod operátory a hranice zrušení

THPDFPageRenderer implementuje IHPDFContentOperatorDevice, takže sdílený průchod volá jeho kompletní stavový automat grafiky, textu, prostředků, ořezu, patternů, průhlednosti, marked-content a obrázků, místo aby redukoval produkční vykreslování na menší sémantickou callback plochu

Display listy cacheují indexy tokenů operátorů už při kompilaci streamů a přehrávají jen tyto indexy, čímž se vyhýbají opakovaným skenům operandů; THPDFPageDisplayList.OperatorCount a THPDFDisplayListInfo.OperatorCount zpřístupňují cacheovaný počet příkazů

Sémantická zařízení implementující jen IHPDFContentDevice si ponechávají callbacky filtrované podle schopností, zatímco kompletní operátorová zařízení dostávají vždy jeden validovaný operátor s jedním kontrolním bodem zrušení na operátor

Ohraničené a souběžné vykreslování

THPDFRenderTileEvent přijímá vždy jednu dlaždici nebo horizontální pás velikosti zvolené volajícím, takže špičková paměť rastru nezávisí na velikosti celé stránky

RenderLoadedPagesParallel překrývá kompilaci display listů s přehráváním, spustí první připravenou stránku bez čekání na kompletní kompilační bariéru, dynamicky vyvažuje obě stupně napříč ohraničenými workery a vrací THPDFBitmapArray ve vstupním pořadí

Kompilace běží mimo zámek cache display listů a dvojoverené připuštění a chráněné počty použítí dovolují nesouvisejícím stránkám kompilovat souběžně, aniž by se duplikovaly publikované položky nebo vyhazovaly seznamy během přehrávání

THPDFParallelRenderPipelineInfo zpřístupňuje zásahy cache, kompilace, dokončení, špičkovou souběžnost kompilace a vykreslování, stránky zkompilované do prvního výsledku, latenci prvního výsledku a celkový uplynulý čas

RenderLoadedPagesParallelOrdered doručuje callbacky ve vstupním pořadí na volajícím vlákně a uvolňuje každou vypůjčenou bitmapu po návratu callbacku, zatímco volajícím zvolená hloubka výstupu aplikuje zpětný tlak na producenta a rezervuje jeden slot pro další potřebnou stránku, takže pomalá raná stránka nemůže uvíznout za pozdějšími výsledky

Řazené streamování uchovává nejvýše jeden display list a jednu aktivní renderovací práci na worker plus ohraničenou frontu dokončených bitmap, místo aby drželo kompletní výstup úlohy rezidentní

Zapojitelné renderovací backendy konzumují stejné zkompilované seznamy přes nevlastnící pohled na prostředky dokumentu, takže synchronní i paralelní cesty se vyhýbají opakovanému parsování obsahu stránek, přičemž schopnosti backendu určují, zda se volání mohou překrývat, nebo vyžadují sériové fronty

Plánovač špičkové paměti procesu nyní omezuje obě paralelní API: největší odhad stránky snižuje počáteční počet workerů, každá přiznaná stránka rezervuje svou kompletní odhadovanou pracovní sadu a řazený výstup si tu rezervaci drží až po doručení callbacků

Zrušení v plánovači probudí čekatele na rozpočet při zrušení callbacku nebo selhání workeru, zatímco telemetrie zpřístupňuje požadované a efektivní workery, špičkovou váhu rezervace, zdržené stránky a souhrnný čas čekání

RenderLoadedPageTilesParallel a RenderLoadedPageBandsParallel doručují vypůjčené dlaždice v pořadí řádků nebo pásy shora dolů napříč izolovanými workery, přičemž každý worker vlastní nejvýše jednu dlaždici a cap pracovní paměti od volajícího snižuje souběžnost před prvním přiznáním

Paralelní renderovací kontexty kopírují neměnné sekvence tokenů glyphů Type 3 a rastry prahů rastrování z jedné ohraničené LRU cache a zachovávají vlastnictví měnitelného grafického stavu a GDI prostředků na straně rendereru

SaveLoadedPageToPng, SaveLoadedPageToPngStream, SaveLoadedPagesToTiffBanded a SaveLoadedPagesToTiffStreamBanded konzumují stejný pásový renderer přes streamovací enkodéry PNG nebo TIFF, takže velmi velké stránky emitují komprimovaný výstup řádek po řádku bez držení kompletního framebufferu, zatímco THPDFBandImageExportInfo hlásí vykreslené pásy, kódované řádky, workery, špičkové rezervované bajty, výstupní bajty, uplynulý čas a zrušení

Sdílené dekódování obrázků se koordinuje odděleně, takže vektorová práce na stránkách zůstává paralelní, aniž by se poškodily položky cache dekódovaných obrázků

PrefetchLoadedPages zahřívá rasterové položky s dedikovaným tokenem zrušení, přičemž kompiluje a vykresluje mimo zámek cache, a vykreslování stránky v popředí worker přeruší, než spustí práci citlivou na latenci

THPDFLoadedPagePrefetchInfo hlásí naplánovanou, zahájenou, dokončenou, cacheovanou, vykreslenou, selhavší, zrušenou a popředím přerušenou práci spolu s poslední a špičkovou latencí zrušení

Průhlednost a tiskové ovladače

Zploštění průhlednosti nejprve zkontroluje počet průhledností v display listu a volajícím definovaný strop pixelů, poté nahradí malování stránky bezztrátovým Flate komprimovaným kalibrovaným RGB obrázkem

Stránky s barvivy Separation nebo DeviceN zůstávají jako vektorový obsah, přičemž rozpoznaná barviva a stav zachování se zpřístupní volajícímu

Renderer vykonává přenosové funkce a rastrové slovníky Type 1, 5, 6, 10 nebo 16 z ExtGState a přes q a Q zachovává nezávislé RGB rastry a jejich přepsání přenosu

THPDFInkCoverageInfo hlásí průměrné pokrytí CMYK, maximální celkové pokrytí plochy a počet pixelů nad zvoleným prahem

Výstup procesních a spot desek podporuje barviva DeviceCMYK, Separation a DeviceN

Přepis barev načtené stránky používá ke konverzi složitých stránek na Gray, RGB nebo CMYK stejný kompletní renderer, přičemž jednoduchý obsah stránek v device barvách ponechává jako vektory a aplikuje explicitní politiku spot desek

THPDFTrappingInfo kombinuje deklarace trappingu dokumentu, metadata stránky a strukturální diagnostiku TrapNet

Workflow ICC

Renderovací transformace může kombinovat zdrojový profil PDF, blend barevný prostor, proof profil, výstupní profil a rasterový cíl sRGB

Všechny čtyři rendering intenty ICC a skutečná kompenzace černého bodu se aplikují konzistentně na vektorové barvy i vzorky obrázků napříč pipeline

Kompletní transformace se sdílejí napříč vektorovými, obrazovými, stránkovými i paralelními cestami vykreslování přes vláknově bezpečnou LRU cache 64 MiB klíčovanou obsahem zdrojového, proof a výstupního profilu, efektivním rendering intentem a kompenzací černého bodu

Zploštění průhlednosti znovu používá stejnou transformovanou pipeline a poté emituje pásy D65 CalRGB bez švů pod volajícím řízenými rozpočty celého rastru a pixelů na dlaždici

Primary APIs