Display lists en printproductie
HotPDF compileert geladen paginastreams naar herbruikbare THPDFPageDisplayList-instanties met THPDFDisplayListInfo-metrieken en bounding boxes van contentobjecten
Documentrendering cachet gecompileerde lijsten, terwijl aanroepers een lijst in eigen beheer kunnen vragen voor herhaalde uitvoering of regionale objectquery's
Gedeelde productie-interpreter
Niet-progressieve bitmap-, direct-DC-, Form- en display-list-replay voeren voorgetokeniseerde content allemaal door HPDFInterpretContentTokensDevice, dat de operatortraversering en annuleringsgrenzen beheert
THPDFPageRenderer implementeert IHPDFContentOperatorDevice, dus de gedeelde traversering roept de volledige graphics-, tekst-, resource-, clipping-, patroon-, transparantie-, marked-content- en afbeeldingsstatemachine aan zonder productierendering te reduceren tot het kleinere semantische callbackoppervlak
Display lists cachen operatortoken-indexen terwijl streams worden gecompileerd en spelen alleen die indexen af, zodat herhaalde operandscans vervallen; THPDFPageDisplayList.OperatorCount en THPDFDisplayListInfo.OperatorCount stellen het gecachte aantal commando's beschikbaar
Semantische devices die alleen IHPDFContentDevice implementeren behouden capabilitygefilterde callbacks, terwijl volledige operatordevices telkens één gevalideerde operator ontvangen met per operator één annuleringscontrolepunt
Begrensde en gelijktijdige rendering
THPDFRenderTileEvent ontvangt telkens één tile of horizontale band op aanroepersgrootte, zodat het piekrastergeheugen onafhankelijk is van de volledige paginagrootte
RenderLoadedPagesParallel laat display-listcompilatie en afspelen overlappen, start de eerste kant-en-klare pagina zonder op een volledige compilebarrière te wachten, balanceert beide stadia dynamisch over begrensde workers en geeft een THPDFBitmapArray in invoervolgorde terug
Compilatie draait buiten de display-listcachelock, terwijl dubbel gecontroleerde toelating en beschermde use counts ongerelateerde pagina's gelijktijdig laten compileren zonder gepubliceerde invoeren te dupliceren of een lijst te verdrijven tijdens het afspelen
THPDFParallelRenderPipelineInfo stelt cachehits, compilaties, voltooiingen, piekcompile- en renderconcurrentie, pagina's gecompileerd bij het eerste resultaat, first-result-latentie en totale verstreken tijd beschikbaar
RenderLoadedPagesParallelOrdered levert callbacks in invoervolgorde op de aanroepende thread en geeft elke uitgeleende bitmap vrij nadat de callback terugkeert, terwijl een door de aanroeper gekozen uitvoerdiepte producerbackpressure toepast en één sleuf reserveert voor de volgende vereiste pagina, zodat een trage vroege pagina niet vast kan lopen achter latere resultaten
Geordend streamen houdt per worker hoogstens één display list en actieve render vast plus de begrensde wachtrij met voltooide bitmaps, in plaats van de volledige jobuitvoer resident te houden
Pluggable render backends verbruiken dezelfde gecompileerde lijsten via een niet-bezittelijke documentresourceview, zodat synchrone en parallelle paden herparsen van pagina-inhoud vermijden, terwijl backendcapabilities bepalen of aanroepen mogen overlappen of serieel moeten worden verstuurd
De procesbrede piekgeheugenscheduler begrenst nu beide parallelle API's: de grootste paginaschatting verlaagt het initiële aantal workers, elke geclaimde pagina reserveert zijn volledige geschatte working set en geordende uitvoer houdt die reservering vast tot de callback is afgeleverd
Schedulerannulering wekt budgetwachters bij callbackannulering of workerfalen, terwijl telemetrie aangevraagde versus effectieve workers, piekreserveringsgewicht, vertraagde pagina's en cumulatieve wachttijd blootgeeft
RenderLoadedPageTilesParallel en RenderLoadedPageBandsParallel leveren uitgeleende row-major-tiles of boven-naar-onder-banden over geïsoleerde workers af, waarbij elke worker hoogstens één tile bezit en een door de aanroeper opgegeven cap op het werkgeheugen de gelijktijdigheid verlaagt vóór de eerste claim
Parallelle rendercontexten kopiëren immutable Type 3-glyph-tokensequenties en halftone-thresholdscreens uit één begrensde LRU-cache en houden rendererlokaal eigendom van mutable graphics state en GDI-resources
SaveLoadedPageToPng, SaveLoadedPageToPngStream, SaveLoadedPagesToTiffBanded en SaveLoadedPagesToTiffStreamBanded verbruiken dezelfde bandrenderer via streaming-PNG- of TIFF-encoders, zodat zeer grote pagina's gecomprimeerde uitvoer rij voor rij uitgeven zonder een volledige framebuffer vast te houden, terwijl THPDFBandImageExportInfo gerenderde banden, gecodeerde rijen, workers, piekreserveringsbytes, uitvoerbytes, verstreken tijd en annulering rapporteert
Gedeelde afbeeldingsdecodering wordt apart gecoördineerd, zodat vectorpaginawerk parallel blijft zonder gecachte gedecodeerde-afbeeldingsinvoeren te beschadigen
PrefetchLoadedPages warmt rasterinvoeren voor met een eigen cancellation token, compileert en rendert buiten de cachelock, en voorgrondpaginarendering verdringt de worker vóór latentiegevoelig werk start
THPDFLoadedPagePrefetchInfo rapporteert gepland, gestart, voltooid, gecached, gerenderd, mislukt, geannuleerd en door voorgrond verdrongen werk, samen met de laatste en de piekannuleringslatentie
Transparantie- en afdrukregeling
Transparantieflattening controleert eerst de transparantieteller van de display list en een door de aanroeper bepaald pixelpakaf, en vervangt daarna paginaverf door een verliesvrije, Flate-gecomprimeerde gekalibreerde RGB-afbeelding
Pagina's met Separation- of DeviceN-colourants blijven vectorcontent, met de gedetecteerde colourants en de behoudstatus beschikbaar voor de aanroeper
De renderer voert transferfuncties en Type 1-, 5-, 6-, 10- of 16-halftonewoordenboeken uit ExtGState uit en bewaart onafhankelijke RGB-screens en hun transferoverrides via q en Q
THPDFInkCoverageInfo rapporteert de gemiddelde CMYK-dekking, de maximale totale vlakdekking en het aantal pixels boven de gekozen drempel
Proces- en spotplate-uitvoer ondersteunt DeviceCMYK-, Separation- en DeviceN-colourants
Loaded-page colour rewrite gebruikt dezelfde volledige renderer om complexe pagina's naar Gray, RGB of CMYK te converteren, houdt eenvoudige device-colour-pagina-inhoud als vectors vast en past een expliciet spotplate-beleid toe
THPDFTrappingInfo combineert trappingdeclaraties van het document, pagemetadata en structurele TrapNet-diagnostiek
ICC workflow
De renderingtransformatie kan een PDF-bronprofiel, blendkleurruimte, proofprofiel, uitvoerprofiel en een sRGB-rasterdoel combineren
Alle vier de ICC-renderingintents en echte black-point-compensatie worden consistent toegepast op vectorkleuren en afbeeldingssamples in de hele pijplijn
Volledige transformaties worden gedeeld over vector-, afbeeldings-, pagina- en parallelle renderingpaden via een thread-safe LRU-cache van 64 MiB, gesleuteld op de inhoud van bron-, proof- en uitvoerprofielen, de effectieve rendering intent en black-point-compensatie
Transparantieflattening hergebruikt dezelfde transformatiepijplijn en geeft daarna naadloze D65 CalRGB-tiles uit onder door de aanroeper beheerste total-raster- en per-tile-pixelbudgetten
Primaire API's
- Pluggbare backends voor paginarendering
IHPDFContentOperatorDeviceHPDFInterpretContentTokensDeviceTHotPDF.CompileLoadedPageDisplayListTHPDFPageDisplayList.GetTokenTHPDFPageDisplayList.GetObjectTHPDFPageDisplayList.QueryObjectIndexesTHPDFPageDisplayList.PageObjectTHPDFPageDisplayList.ResourcesTHPDFPageDisplayList.MediaBoxTHotPDF.RenderLoadedPageTilesenRenderLoadedPageBandsTHotPDF.RenderLoadedPageTilesParallelenRenderLoadedPageBandsParallelTHPDFParallelTileRenderInfoTHotPDF.SaveLoadedPageToPngTHotPDF.SaveLoadedPageToPngStreamTHotPDF.SaveLoadedPagesToTiffBandedTHotPDF.SaveLoadedPagesToTiffStreamBandedTHPDFBandImageExportInfoTHotPDF.RendererSharedCacheMaxBytesTHotPDF.RenderLoadedPagesParallelTHotPDF.RenderLoadedPagesParallelOrderedTHPDFParallelRenderPipelineInfoTHotPDF.PrefetchLoadedPagesTHotPDF.GetLoadedPagePrefetchInfoTHPDFLoadedPagePrefetchInfoTHotPDF.FlattenLoadedPageTransparencyTHotPDF.FlattenLoadedPageComplexGraphicsTHotPDF.RenderLoadedPageSeparationPlateTHotPDF.GetLoadedPageSpotColorantsTHotPDF.RewriteLoadedPageColorsTHotPDF.AnalyzeLoadedPageInkCoverageTHotPDF.InspectLoadedPageTrappingTHotPDF.ConfigureRenderICCWorkflow