Display Lists and Print Production

HotPDF kompiluje streamy načítaných strán do opakovane použiteľných inštancií THPDFPageDisplayList s metrikami THPDFDisplayListInfo a ohraničujúcimi obdĺžnikmi obsahových objektov

Renderovanie dokumentu cacheuje zostavené zoznamy, pričom volajúci si môžu vyžiadať nezávisle vlastnený zoznam pre opakované vykonávanie alebo regionálne dotazy na objekty

Zdieľaný produkčný interpret

Neprogresívny bitmap, direct-DC, Form aj prehrávanie display listu všetky posielajú pred-tokenizovaný obsah cez HPDFInterpretContentTokensDevice, ktorý vlastní prechod operátorov a hranice rušenia

THPDFPageRenderer implementuje IHPDFContentOperatorDevice, takže zdieľaný prechod volá jeho kompletný stavový automat grafiky, textu, zdrojov, orezávania, vzoriek, priehľadnosti, marked-content a obrázkov bez redukovania produkčného renderovania na menší sémantický povrch spätných volaní

Display listy cacheujú tokenové indexy operátorov počas kompilácie streamov a prehrávajú len tie indexy, čím sa vyhýbajú opakovaným skenom operandov; THPDFPageDisplayList.OperatorCount a THPDFDisplayListInfo.OperatorCount sprístupňujú počet cacheovaných príkazov

Sémantické zariadenia, ktoré implementujú len IHPDFContentDevice, si nechávajú spätné volania filtrované podľa schopností, zatiaľ čo kompletné operátorové zariadenia prijímajú vždy jeden validovaný operátor s jedným kontrolným bodom rušenia na operátor

Ohraničené a súbežné vykresľovanie

THPDFRenderTileEvent prijíma vždy jednu kachličku alebo horizontálny pás veľkosti určenej volajúcim, takže špičková pamäť rastra zostáva nezávislá od veľkosti celej stránky

RenderLoadedPagesParallel prekrýva kompiláciu display listu s prehrávaním, spustí prvú pripravenú stránku bez čakania na úplnú komplicačnú bariéru, dynamicky vyvažuje obe etapy cez ohraničených workerov a vracia THPDFBitmapArray v poradí vstupu

Kompilácia beží mimo zámku cache display listov, zatiaľ čo prijímanie s dvojitou kontrolou a chránené počty použitia dovoľujú nesúvisiacim stránkam kompilovať súbežne bez duplikovania publikovaných položiek alebo evikcie zoznamu počas prehrávania

THPDFParallelRenderPipelineInfo sprístupňuje zásahy cache, kompilácie, dokončenia, špičkovú súbežnosť kompilácie a renderovania, stránky skompilované pri prvom výsledku, latenciu prvého výsledku a celkový uplynulý čas

RenderLoadedPagesParallelOrdered dodáva spätné volania v poradí vstupu na volajúcom vlákne a uvoľní každý požičaný bitmap po vrátení spätného volania, zatiaľ čo výstupná hĺbka zvolená volajúcim aplikuje spätný tlak producenta a rezervuje jeden slot pre ďalšiu požadovanú stránku, takže pomalá skorá stránka nemôže uväzniť neskoršie výsledky

Usporiadané streamovanie drží najviac jeden display list a aktívny render na workera plus ohraničený front dokončených bitmapov namiesto držania kompletného výstupu úlohy rezidentne

Pluggable render backends konzumujú tie isté skompilované zoznamy cez nevlastniaci pohľad na zdroje dokumentu, takže synchronné aj paralelné cesty sa vyhýbajú opätovnému parsovaniu obsahu stránok, zatiaľ čo schopnosti backendu určujú, či sa volania môžu prekrývať, alebo vyžadujú sériový dispatch

Plánovač špičkovej pamäti celej procesu teraz obmedzuje obe paralelné API: najväčší odhad stránky znižuje počiatočný počet workerov, každá rezervovaná stránka si rezervuje kompletný odhadovaný pracovný set a usporiadaný výstup si zachováva túto rezerváciu až po dodanie spätných volaní

Zrušenie plánovača zobudí čakajúcich na rozpočet pri zrušení spätného volania alebo zlyhaní workera, zatiaľ čo telemetria sprístupňuje požadovaných oproti efektívnym workerom, špičkovú váhu rezervácií, odložené stránky a agregovaný čas čakania

RenderLoadedPageTilesParallel a RenderLoadedPageBandsParallel dodávajú požičané kachličky v poradí po riadkoch alebo pásy zhora nadol cez izolované workery, pričom každý worker vlastní najviac jeden diel a cap pracovnej pamäti od volajúceho znižuje súbežnosť ešte pred prvou rezerváciou

Súbežné renderovacie kontexty kopírujú nemenné tokenové sekvencie glyfov Type 3 a poltónové prahové obrazovky z jednej ohraničenej LRU cache a pritom zachovávajú vlastníctvo lokálne pre renderer pre meniteľný grafický stav a GDI zdroje

SaveLoadedPageToPng, SaveLoadedPageToPngStream, SaveLoadedPagesToTiffBanded a SaveLoadedPagesToTiffStreamBanded konzumujú ten istý band renderer cez streamovacie enkodéry PNG alebo TIFF, takže veľmi veľké stránky zapisujú komprimovaný výstup po riadkoch bez držania kompletného framebufferu, zatiaľ čo THPDFBandImageExportInfo hlási vyrenderované pásy, zakódované riadky, workerov, špičkové rezervované bajty, výstupné bajty, uplynulý čas a rušenie

Zdieľané dekódovanie obrázkov sa koordinuje samostatne, takže vektorová práca so stránkami zostáva paralelná bez poškodenia položiek cache dekódovaných obrázkov

PrefetchLoadedPages predhrieva rastrové položky s vyhradeným tokenom rušenia pri kompilácii a renderovaní mimo zámku cache a renderovanie stránky na popredí preemptuje workera skôr, než začne prácu citlivú na latenciu

THPDFLoadedPagePrefetchInfo hlási naplánovanú, začatú, dokončenú, cacheovanú, vyrenderovanú, zlyhavšiu, zrušenú a na popredí preemptovanú prácu spolu s poslednou a špičkovou latenciou rušenia

Priehľadnosť a tlačové ovládanie

Sploštenie priehľadnosti najprv skontroluje počet priehľadností display listu a strop pixelov definovaný volajúcim a potom nahrádza kreslenie stránky bezstratovým obrázkom kalibrovaného RGB komprimovaným Flate

Stránky s farbivami Separation alebo DeviceN zostávajú ako vektorový obsah, pričom zistené farbivá a stav zachovania sa sprístupnia volajúcemu

Renderer vykonáva prenosové funkcie a poltónové slovníky Type 1, 5, 6, 10 alebo 16 z ExtGState a pritom cez q a Q zachováva nezávislé RGB obrazovky a ich prepísania prenosov

THPDFInkCoverageInfo hlási priemerné pokrytie CMYK, maximálne celkové pokrytie plochy a počet pixelov nad zvoleným prahom

Výstup procesných a spot dosiek podporuje farbivá DeviceCMYK, Separation a DeviceN

Loaded-page colour rewrite používa rovnaký kompletný renderer na konverziu zložitých stránok na Gray, RGB alebo CMYK a pritom ponecháva jednoduchý obsah stránok v zariadených farbách ako vektory a aplikuje explicitnú politiku spot dosiek

THPDFTrappingInfo spája deklarácie trapping dokumentu, metaúdaje stránok a štrukturálnu diagnostiku TrapNet

Pracovný postup ICC

Renderovacia transformácia môže kombinovať zdrojový profil PDF, miešací farebný priestor, proof profil, výstupný profil a rastrový cieľ sRGB

Všetky štyri rendering intenty ICC a skutočná kompenzácia čierneho bodu sa konzistentne aplikujú na vektorové farby a vzorky obrázkov naprieč pipeline

Kompletné transformácie sa zdieľajú naprieč vektorovými, obrazovými, stránkovými a paralelnými renderovacími cestami cez bezpečnú pre vlákna LRU cache 64 MiB kľúčovanú obsahom zdrojového, proof a výstupného profilu, efektívnym rendering intentom a kompenzáciou čierneho bodu

Splošťovanie priehľadnosti znovu používa tú istú transformnú pipeline a potom zapisuje bezšvové dlaždice D65 CalRGB pod volajúcim riadenými rozpočtami celého rastra a pixelov na dlaždicu

Primárne API