Display Lists and Print Production
HotPDF sukompiliuoja įkeltus puslapių srautus į pakartotinai naudojamus THPDFPageDisplayList egzempliorius su THPDFDisplayListInfo metrikomis ir turinio objektų ribiniais stačiakampiais
Dokumento atvaizdavimas podėliuoja sukompiliuotus sąrašus, o kvietėjai gali prašyti nepriklausomai valdomą sąrašą kartotiniam vykdymui arba sritiniams objektų užklausimams
Bendrasis gamybos interpretatorius
Nežingsninis taškų atvaizdas, tiesioginis DC, Form ir display-list atkūrimas visi perduoda prieš tai suskaidytąjį turinį per HPDFInterpretContentTokensDevice, kuris valdo operatorių apėjimą ir atšaukimo ribas
THPDFPageRenderer įgyvendina IHPDFContentOperatorDevice, todėl bendrasis apėjimas kviečia visą jo grafikos, teksto, išteklių, apkarpytimo, raštų, permatomumo, pažymėtojo turinio ir vaizdų būsenos mašiną, nesumažindamas gamybinio atvaizdavimo iki mažesniojo semantinio atgalinių kvietimų paviršiaus
Display list'ai, kol srautai kompiliuojami, podėliuoja operatorių žetonų indeksus ir atkuria tik tuos indeksus, išvengdami kartotinių operandų apėjimų; THPDFPageDisplayList.OperatorCount ir THPDFDisplayListInfo.OperatorCount atskleidžia podėliuotąjį komandų skaičių
Semantiniai įrenginiai, įgyvendinantys tik IHPDFContentDevice, išlaiko gebėjimais filtruotus atgalinius kvietimus, o pilnieji operatorių įrenginiai vienu metu gauna po vieną patvirtintą operatorių su po vieną atšaukimo kontrolės tašką operatoriui
Apribotas ir lygiagretus atvaizdavimas
THPDFRenderTileEvent vienu metu gauna po vieną kvietėjo dydžio plytelę arba horizontaliąją juostą, tad didžiausioji rastrinė atmintis nepriklauso nuo viso puslapio dydžio
RenderLoadedPagesParallel display-list kompiliavimą persidengia su atkūrimu, pirmąjį paruoštą puslapį pradeda nelaukdamas pilnos kompiliavimo kliūties, dinamiškai subalansuoja abu etapus tarp apribotų darbuotojų ir grąžina THPDFBitmapArray įvesties tvarka
Kompiliavimas vyksta už display-list podėlio rakto ribų, o dvigubai tikrintas priėmimas ir saugomieji naudojimo skaitikliai leidžia nesusijusius puslapius kompiliuoti lygiagrečiai, nedubliuojant išduotų įrašų ar neišrodant sąrašo atkūrimo metu
THPDFParallelRenderPipelineInfo atskleidžia podėlio atitikimus, kompiliacijas, užbaigimus, didžiausiąjį kompiliavimo ir atvaizdavimo lygiagretumą, prie pirmojo rezultato sukompiliuotus puslapius, pirmojo rezultato delsą ir visą praėjusį laiką
RenderLoadedPagesParallelOrdered atgalinius kvietimus įvesties tvarka išdala kviečiančiojoje gijoje ir atlaisvina kiekvieną paskolintąją bitmap grįžus kvietimui, o kvietėjo pasirinktoji išvesties gylio riba gamintojui taiko atgalinį spaudimą ir rezervuoja vietą kitam reikalingam puslapiui, tad lėtas ankstesnysis puslapis negali užstrigti už vėlesnių rezultatų
Surikiuotasis srautinimas laiko ne daugiau kaip po vieną display list ir aktyvų atvaizdavimą darbuotojui bei apribotą užbaigtų bitmap eilę, vietoj to, kad visa užduoties išvestis liktų rezidentinė
Keičiamosios atvaizdavimo posistemės tuos pačius sukompiliuotus sąrašus vartoja per nevaldantį dokumento išteklių rodinį, tad sinchroninis ir lygiagretusis keliai vengia pakartotinės puslapio turinio analizės, o posistemės gebėjimai lemia, ar kvietimai gali persidengti, ar reikia nuoseklaus išsiuntimo
Viso proceso didžiausios atminties planuotojas dabar riboja abi lygiagretąsias API: didžiausias puslapio įvertinimas sumažina pradinį darbuotojų skaičių, kiekvienas pasisavintas puslapis rezervuoja visą savo numatytąjį darbo rinkinį, o surikiuotoji išvestis išlaiko tą rezervavimą iki atgalinių kvietimų išdavimo
Planuotojo atšaukimas pažadina biudžeto laukiančiuosius atšaukus atgalinį kvietimą arba nesėkus darbuotojui, o telemetrija atskleidžia pageidautinus ir faktinius darbuotojus, didžiausiąjį rezervavimo svorį, atidėtuosius puslapius ir bendrąjį laukimo laiką
RenderLoadedPageTilesParallel ir RenderLoadedPageBandsParallel paskolintąsias eiliškumu pagrįstas plyteles arba iš viršaus į apačią einančias juostas išdala atskirtiems darbuotojams, kiekvienam valdant ne daugiau kaip po vieną plytelę, o kvietėjo nustatytoji darbo atminties riba sumažina lygiagretumą dar prieš pirmąjį pasisavinimą
Lygiagretieji atvaizdavimo kontekstai nekeičiamąsias Type 3 glifų žetonų sekas ir rastro slenksčių rasteres kopijuoja iš vieno apriboto LRU podėlio, išlaikydami atvaizduoklės lokalų keičiamosios grafikos būsenos ir GDI išteklių valdymą
SaveLoadedPageToPng, SaveLoadedPageToPngStream, SaveLoadedPagesToTiffBanded ir SaveLoadedPagesToTiffStreamBanded tą pačią juostinę atvaizduoklę vartoja per srautinius PNG arba TIFF koduotojus, tad labai dideli puslapia suspaustą išvestį išveda eilute po eilutės, nelikdami laikyti pilno kadro buferio, o THPDFBandImageExportInfo praneša atvaizduotąsias juostas, užkoduotąsias eilutes, darbuotojus, didžiausiuosius rezervavimo baitus, išvesties baitus, praėjusį laiką ir atšaukimą
Bendrasis vaizdų iškodavimas koordinuojamas atskirai, tad vektorinis puslapių darbas lieka lygiagretus, nepažeisdamas iškoduotų vaizdų podėlio įrašų
PrefetchLoadedPages šildo rastrinius įrašus su atskiruoju atšaukimo žetonu, kompiliuodamas ir atvaizduodamas už podėlio rakto ribų, o priekio plano puslapių atvaizdavimas pakeičia darbuotoją dar prieš pradedant delsai jautrų darbą
THPDFLoadedPagePrefetchInfo praneša suplanuotą, pradėtą, užbaigtą, podėliuotą, atvaizduotą, nesėkmingą, atšauktą ir priekio plano pakeistą darbą, be to, paskutinę ir didžiausiąją atšaukimo delsą
Permatomumo ir spausdinimo valdikliai
Permatomumo suplotinimas pirmiausiai patikrina display-list permatomumo skaičių ir kvietėjo nustatytąją taškų lubą, paskui puslapio piešinį pakeičia bedakiu Flate suspaustu sukalibruotu RGB vaizdu
Puslapiai su Separation arba DeviceN dažikliais lieka vektoriniu turiniu, o aptikti dažikliai ir išlaikymo būsena atskleidžiami kvietėjui
Atvaizduoklė vykdo perdavimo funkcijas ir Type 1, 5, 6, 10 arba 16 rastro (halftone) žodynus iš ExtGState, išlaikydama nepriklausomąsias RGB rasteres ir jų perdavimo perrašymus per q ir Q
THPDFInkCoverageInfo praneša vidutinę CMYK dangą, didžiausiąją visuminę plotų dangą ir taškų, viršijančių pasirinktąją ribą, skaičių
Procesinių ir papildomųjų (spot) plokštelių išvestis palaiko DeviceCMYK, Separation ir DeviceN dažiklius
Įkeltų puslapių spalvų perrašymas ta pačia pilna atvaizduokle sudėtingus puslapius konvertuoja į Gray, RGB arba CMYK, paprastąjį įrengininės spalvos puslapio turinį laikydamas vektoriais ir taikydamas aiškią papildomųjų (spot) plokštelių politiką
THPDFTrappingInfo sujungia dokumento trapping deklaracijas, puslapio metaduomenis ir TrapNet struktūrinę diagnostiką
ICC darbo eiga
Atvaizdavimo transformacija gali sujungti PDF šaltinio profilį, maišymo spalvų erdvę, spaudinio (proof) profilį, išvesties profilį ir sRGB rastrinę paskirtį
Visos keturios ICC atvaizdavimo intencijos ir tikroji juodojo taško kompensacija nuosekliai taikomos vektorinėms spalvoms ir vaizdų ėminiams per visą konvejerį
Visos transformacijos dalijamos tarp vektorinio, vaizdų, puslapių ir lygiagretaus atvaizdavimo kelių per gijoms saugų 64 MiB LRU podėlį, kurio raktas — šaltinio, spaudinio ir išvesties profilių turinys, faktinė atvaizdavimo intencija ir juodojo taško kompensacija
Permatomumo suplotinimas naudoja tą patį transformacijų konvejerį, paskui išveda be siūlių D65 CalRGB plyteles, kvietėjo valdomomis visuminių rastrų ir atskiroms plytelėms skirtomis taškų lubomis
Pagrindinės API
- Pluggable render backends
IHPDFContentOperatorDeviceHPDFInterpretContentTokensDeviceTHotPDF.CompileLoadedPageDisplayListTHPDFPageDisplayList.GetTokenTHPDFPageDisplayList.GetObjectTHPDFPageDisplayList.QueryObjectIndexesTHPDFPageDisplayList.PageObjectTHPDFPageDisplayList.ResourcesTHPDFPageDisplayList.MediaBoxTHotPDF.RenderLoadedPageTilesirRenderLoadedPageBandsTHotPDF.RenderLoadedPageTilesParallelirRenderLoadedPageBandsParallelTHPDFParallelTileRenderInfoTHotPDF.SaveLoadedPageToPngTHotPDF.SaveLoadedPageToPngStreamTHotPDF.SaveLoadedPagesToTiffBandedTHotPDF.SaveLoadedPagesToTiffStreamBandedTHPDFBandImageExportInfoTHotPDF.RendererSharedCacheMaxBytesTHotPDF.RenderLoadedPagesParallelTHotPDF.RenderLoadedPagesParallelOrderedTHPDFParallelRenderPipelineInfoTHotPDF.PrefetchLoadedPagesTHotPDF.GetLoadedPagePrefetchInfoTHPDFLoadedPagePrefetchInfoTHotPDF.FlattenLoadedPageTransparencyTHotPDF.FlattenLoadedPageComplexGraphicsTHotPDF.RenderLoadedPageSeparationPlateTHotPDF.GetLoadedPageSpotColorantsTHotPDF.RewriteLoadedPageColorsTHotPDF.AnalyzeLoadedPageInkCoverageTHotPDF.InspectLoadedPageTrappingTHotPDF.ConfigureRenderICCWorkflow