Anzeigelisten und Druckproduktion
HotPDF kompiliert geladene Seitenstreams in wiederverwendbare Instanzen von THPDFPageDisplayList mit Metriken von THPDFDisplayListInfo und Begrenzungsrahmen für Inhaltsobjekte
Das Dokumentrendering cached kompilierte Listen, während Aufrufer eine unabhängig besessene Liste für wiederholte Ausführung oder regionale Objektabfragen anfordern können
Gemeinsamer Produktions-Interpreter
Nicht-progressives Bitmap, Direct-DC, Form- und Display-List-Wiedergabe geben vor-tokenisierten Inhalt alle durch HPDFInterpretContentTokensDevice, das Operator-Traversierung und Abbruchgrenzen besitzt
THPDFPageRenderer implementiert IHPDFContentOperatorDevice, sodass die gemeinsame Traversierung seine vollständige Zustandsmaschine für Grafik, Text, Ressourcen, Clipping, Patterns, Transparenz, markierte Inhalte und Bilder aufruft, ohne das Produktions-Rendering auf die kleinere semantische Callback-Oberfläche zu reduzieren
Display-Listen cachen Operator-Token-Indizes, während Streams kompiliert werden, und spielen nur diese Indizes wieder ab, was wiederholte Operand-Scans vermeidet; THPDFPageDisplayList.OperatorCount und THPDFDisplayListInfo.OperatorCount legen die zwischengespeicherte Befehlszahl offen
Semantische Devices, die nur IHPDFContentDevice implementieren, behalten kapazitätsgefilterte Callbacks, während vollständige Operator-Devices jeweils einen validierten Operator mit einem Abbruch-Checkpoint pro Operator erhalten
Begrenzte und parallele Wiedergabe
THPDFRenderTileEvent erhält jeweils eine vom Aufrufer dimensionierte Kachel oder ein horizontales Band, sodass der Spitzenbedarf an Rasterspeicher von der vollständigen Seitengröße unabhängig bleibt
RenderLoadedPagesParallel überlappt Display-List-Kompilierung mit Wiedergabe, startet die erste fertige Seite, ohne auf eine vollständige Kompilierungsbarriere zu warten, balanciert beide Stufen dynamisch über begrenzte Worker aus und liefert ein THPDFBitmapArray in Eingabereihenfolge
Die Kompilierung läuft außerhalb der Display-List-Cache-Sperre; doppelt geprüfte Aufnahme und geschützte Nutzungszähler erlauben es, unabhängige Seiten gleichzeitig zu kompilieren, ohne veröffentlichte Einträge zu duplizieren oder eine Liste während der Wiedergabe zu verdrängen
THPDFParallelRenderPipelineInfo legt Cache-Treffer, Kompilierungen, Abschlüsse, spitze Kompilier- und Render-Parallelität, beim ersten Ergebnis kompilierte Seiten, Latenz bis zum ersten Ergebnis und Gesamtlaufzeit offen
THPDFRenderTileEvent erhält jeweils eine vom Aufrufer dimensionierte Kachel oder ein horizontales Band, sodass der Spitzenbedarf an Rasterspeicher von der vollständigen Seitengröße unabhängig bleibt
Die Wiedergabe kann in deterministischer Reihenfolge arbeiten und mit Abbruch-, Zeit-, Pixel- und Speichervorgaben kooperieren
Farbseparationen, Überdruckprüfung und Ausgabediagnosen machen Druckmerkmale sichtbar, ohne das geladene Dokument zu verändern
Der prozessweite Peak-Memory-Scheduler begrenzt jetzt beide parallelen APIs: die größte Seitenschätzung reduziert die anfängliche Worker-Anzahl, jede beanspruchte Seite reserviert ihren vollständigen geschätzten Arbeitssatz, und geordnete Ausgabe behält diese Reservierung bis zur Callback-Übergabe bei
Scheduler-Abbruch weckt Budget-Wartende bei Callback-Abbruch oder Worker-Fehler, während die Telemetrie angeforderte gegenüber effektiven Workern, spitze Reservierungslast, verzögerte Seiten und Gesamtwartedauer offenlegt
RenderLoadedPageTilesParallel und RenderLoadedPageBandsParallel liefern geliehene zeilenweise Kacheln oder Bänder von oben nach unten über isolierte Worker, wobei jeder Worker höchstens eine Kachel besitzt und eine vom Aufrufer vorgegebene Arbeitsspeichergrenze die Parallelität bereits vor der ersten Beanspruchung senkt
Parallele Render-Kontexte kopieren unveränderliche Type-3-Glyph-Token-Folgen und Rasterzellen-Schwellwertmasken aus einem begrenzten LRU-Cache und behalten die Renderer-lokale Zuständigkeit für veränderlichen Grafikzustand und GDI-Ressourcen
SaveLoadedPageToPng, SaveLoadedPageToPngStream, SaveLoadedPagesToTiffBanded und SaveLoadedPagesToTiffStreamBanded nutzen denselben Band-Renderer über Streaming-PNG- oder TIFF-Encoder, sodass sehr große Seiten komprimierte Ausgabe Zeile für Zeile ausgeben, ohne einen vollständigen Framebuffer zu halten; THPDFBandImageExportInfo meldet gerenderte Bänder, kodierte Zeilen, Worker, spitze Reservierungsbytes, Ausgabebytes, Laufzeit und Abbruch
Die gemeinsame Bilddekodierung wird separat koordiniert, damit Vektorseitenarbeit parallel bleibt, ohne Einträge des Dekodier-Cache zu korrumpieren
PrefetchLoadedPages wärmt Raster-Einträge mit einem eigenen Abbruch-Token, während außerhalb der Cache-Sperre kompiliert und gerendert wird, und Seitenrendering im Vordergrund verdrängt den Worker, bevor latenzsensible Arbeit beginnt
THPDFLoadedPagePrefetchInfo meldet geplante, gestartete, abgeschlossene, gecachte, gerenderte, fehlgeschlagene, abgebrochene und im Vordergrund verdrängte Arbeiten samt letzter und maximaler Abbruchlatenz
Transparenz- und Drucksteuerung
Das Transparenz-Flattening prüft zuerst die Transparenzanzahl der Display-Liste und eine vom Aufrufer definierte Pixel-Obergrenze, ersetzt dann den Seitenauftrag durch ein verlustfreies, Flate-komprimiertes kalibriertes RGB-Bild
Seiten mit Separation- oder DeviceN-Farben bleiben Vektorinhalt, wobei erkannte Farben und Erhaltungsstatus dem Aufrufer offengelegt werden
Der Renderer führt Transferfunktionen und Rasterzellenwörterbücher der Typen 1, 5, 6, 10 oder 16 aus ExtGState aus und bewahrt dabei unabhängige RGB-Screens samt ihrer Transfer-Overrides über q und Q
THPDFInkCoverageInfo meldet die durchschnittliche CMYK-Deckung, die maximale Gesamtflächendeckung und die Anzahl der Pixel oberhalb des gewählten Schwellwerts
Die Ausgabe von Prozess- und Sonderfarb-Auszügen unterstützt DeviceCMYK-, Separation- und DeviceN-Farben
Farbumschreibung geladener Seiten nutzt denselben vollständigen Renderer, um komplexe Seiten nach Gray, RGB oder CMYK umzusetzen, einfachen gerätefarbigen Seiteninhalt als Vektoren zu behalten und eine explizite Sonderfarbauszugs-Politik anzuwenden
THPDFTrappingInfo vereint Trapping-Deklarationen des Dokuments, Seitenmetadaten und strukturelle TrapNet-Diagnostik
ICC-Workflow
Die Rendering-Transformation kann ein PDF-Quellprofil, einen Mischfarbraum, ein Proof-Profil, ein Ausgabeprofil und ein sRGB-Rasterziel kombinieren
Alle vier ICC-Rendering-Intents und echte Schwarzpunktkompensation werden durchgehend konsistent auf Vektorfarben und Bildsamples angewendet
Vollständige Transformationen werden über Vektor-, Bild-, Seiten- und parallele Renderpfade hinweg in einem thread-sicheren 64-MiB-LRU-Cache geteilt, dessen Schlüssel aus Quell-, Proof- und Ausgabeprofilinhalten, effektivem Rendering-Intent und Schwarzpunktkompensation gebildet wird
Das Transparenz-Flattening nutzt dieselbe Transformations-Pipeline wieder und gibt dann nahtlose D65-CalRGB-Kacheln unter vom Aufrufer gesteuerten Budgets für Gesamtraster und Pixel pro Kachel aus
Primäre APIs
- Austauschbare Wiedergabe-Backends
IHPDFContentOperatorDeviceHPDFInterpretContentTokensDeviceTHotPDF.CompileLoadedPageDisplayListTHPDFPageDisplayList.GetTokenTHPDFPageDisplayList.GetObjectTHPDFPageDisplayList.QueryObjectIndexesTHPDFPageDisplayList.PageObjectTHPDFPageDisplayList.ResourcesTHPDFPageDisplayList.MediaBoxTHotPDF.RenderLoadedPageTilesandRenderLoadedPageBandsTHotPDF.RenderLoadedPageTilesParallelandRenderLoadedPageBandsParallelTHPDFParallelTileRenderInfoTHotPDF.SaveLoadedPageToPngTHotPDF.SaveLoadedPageToPngStreamTHotPDF.SaveLoadedPagesToTiffBandedTHotPDF.SaveLoadedPagesToTiffStreamBandedTHPDFBandImageExportInfoTHotPDF.RendererSharedCacheMaxBytesTHotPDF.RenderLoadedPagesParallelTHotPDF.RenderLoadedPagesParallelOrderedTHPDFParallelRenderPipelineInfoTHotPDF.PrefetchLoadedPagesTHotPDF.GetLoadedPagePrefetchInfoTHPDFLoadedPagePrefetchInfoTHotPDF.FlattenLoadedPageTransparencyTHotPDF.FlattenLoadedPageComplexGraphicsTHotPDF.RenderLoadedPageSeparationPlateTHotPDF.GetLoadedPageSpotColorantsTHotPDF.RewriteLoadedPageColorsTHotPDF.AnalyzeLoadedPageInkCoverageTHotPDF.InspectLoadedPageTrappingTHotPDF.ConfigureRenderICCWorkflow