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
- Zapojitelné renderovací backendy
IHPDFContentOperatorDeviceHPDFInterpretContentTokensDeviceTHotPDF.CompileLoadedPageDisplayListTHPDFPageDisplayList.GetTokenTHPDFPageDisplayList.GetObjectTHPDFPageDisplayList.QueryObjectIndexesTHPDFPageDisplayList.PageObjectTHPDFPageDisplayList.ResourcesTHPDFPageDisplayList.MediaBoxTHotPDF.RenderLoadedPageTilesaRenderLoadedPageBandsTHotPDF.RenderLoadedPageTilesParallelaRenderLoadedPageBandsParallelTHPDFParallelTileRenderInfoTHotPDF.SaveLoadedPageToPngTHotPDF.SaveLoadedPageToPngStreamTHotPDF.SaveLoadedPagesToTiffBandedTHotPDF.SaveLoadedPagesToTiffStreamBandedTHPDFBandImageExportInfoTHotPDF.RendererSharedCacheMaxBytesTHotPDF.RenderLoadedPagesParallelTHotPDF.RenderLoadedPagesParallelOrderedTHPDFParallelRenderPipelineInfoTHotPDF.PrefetchLoadedPagesTHotPDF.GetLoadedPagePrefetchInfoTHPDFLoadedPagePrefetchInfoTHotPDF.FlattenLoadedPageTransparencyTHotPDF.FlattenLoadedPageComplexGraphicsTHotPDF.RenderLoadedPageSeparationPlateTHotPDF.GetLoadedPageSpotColorantsTHotPDF.RewriteLoadedPageColorsTHotPDF.AnalyzeLoadedPageInkCoverageTHotPDF.InspectLoadedPageTrappingTHotPDF.ConfigureRenderICCWorkflow