Austauschbare Backends für das Seitenrendering
HotPDF kann das Bitmap-Rendering geladener Seiten über ein anwendungsdefiniertes Backend leiten und behält dabei den bestehenden Renderer als Standard ohne Konfiguration und optionalen Fallback bei
Eingebautes natives Backend
PDF.UseNativeGDIRenderBackend;
Bitmap := PDF.RenderLoadedPageToBitmap(0, 144);
THPDFNativeGDIRenderBackend stellt den etablierten nativen Windows-GDI-Renderer über denselben öffentlichen Backend-Vertrag bereit, den externe Implementierungen verwenden
Seine Fähigkeiten deklarieren prbcNative, prbcDeterministic, prbcTransparency, prbcColourManagement und prbcThreadSafe, ohne prbcDeviceAcceleration zu beanspruchen
SIMD-Scanline-Backend
var
Backend: IHPDFPageRenderBackend;
begin
Backend := THPDFSIMDScanlineRenderBackend.Create;
PDF.PageRenderBackend := Backend;
Bitmap := PDF.RenderLoadedPageToBitmap(0, 144);
end;
THPDFSIMDScanlineRenderBackend nimmt den vollständigen kompilierten Display-List vorab ab, schreibt dann unterstützte DeviceRGB- oder DeviceGray-Rechteckfüllungen direkt in die finale 32-Bit-Bitmap-Oberfläche, in 64-Byte-Chargen und 16-Byte-Vektorresten
Das Backend akzeptiert Grafikzustand sichern/wiederherstellen, orthogonale Skalierung, Translations- und Rechtwinkel-Rotationsmatrizen, Füllfarbwechsel, Rechtecke, Fülloperatoren und Pfad-Reset; Text, beliebige Pfade, Striche, Bilder, Transparenz, Clipping, Muster, Schattierungen, nicht unterstützte Farbräume und nicht orthogonale Transformationen lehnen vor der Bitmap-Allozierung ab
Das Backend akzeptiert Grafikzustand sichern/wiederherstellen, orthogonale Skalierung, Translations- und Rechtwinkel-Rotationsmatrizen, Füllfarbwechsel, Rechtecke, Fülloperatoren und Pfad-Reset; Text, beliebige Pfade, Striche, Bilder, Transparenz, Clipping, Muster, Schattierungen, nicht unterstützte Farbräume und nicht orthogonale Transformationen lehnen vor der Bitmap-Allozierung ab
Seine Capabilities deklarieren prbcSIMD, prbcThreadSafe und prbcDeterministic, ohne Gerätebeschleunigung, Transparenz oder Farbmanagement zu beanspruchen
THPDFSIMDRenderBackendStatistics meldet direkte Oberflächen, gerenderte Rechtecke, Vektorblöcke, skalare Restpixel und den exakt abgelehnten Operator, wenn ein Fallback nötig ist
Vertrag für eigene Backends
Implementieren Sie IHPDFPageRenderBackend und weisen Sie es THotPDF.PageRenderBackend zu
THPDFPageRenderBackendRequest liefert den angeforderten Seitenindex und DPI, die kompilierte THPDFPageDisplayList sowie einen THPDFRenderDocAccess-Resolver für Streams, Bilder, Fonts, optionalen Inhalt, Farbmanagement und Abbruch
Ein Backend kann jeden kompilierten Operator über THPDFPageDisplayList.GetToken prüfen, ohne den Seiteninhalt erneut zu parsen
Geben Sie True mit einem neu allokierten TBitmap zurück, um die Bitmap-Eigentümerschaft an HotPDF zu übertragen; geben Sie False ohne Bitmap zurück, um die Anforderung abzulehnen
Nebenläufigkeit und Fallback
Backends, die prbcThreadSafe deklarieren, können über beide parallelen Seitenrender-Pipelines gleichzeitig ausgeführt werden
Backends ohne diese Fähigkeit werden über eine dedizierte Aufrufsperre serialisiert, während die Kompilierung der Display-List parallel bleibt
rbfpSoftwareFallback wiederholt eine nicht verfügbare, abgelehnte oder fehlgeschlagene Backend-Anforderung mit dem bestehenden Renderer, während rbfpFail EHPDFRenderBackend auslöst
Ein Backend kann optional IHPDFPageRenderBackendFailureInfo implementieren oder einen Diagnosegrund pro Anfrage liefern, damit gleichzeitige Ablehnungen den Grund für den exakten Renderversuch behalten
Das Ändern des Backends invalidiert In-Memory- und persistente Cache-Einträge gerenderter Seiten, sodass Bilder unterschiedlicher Renderer niemals gemischt werden
Diagnose und visueller Check
THPDFRenderBackendStatistics meldet Versuche, Erfolge, Fehler, Software-Fallbacks, serialisierte Aufrufe, Laufzeit, Backendname und den letzten Fehlergrund
Das integrierte Paritätsfixture verwendet überlappende Transparenz und deklariert maximales Delta E 0, RGB-Fehler der Alpha-Komposition 0 und 0 abweichende Pixel gegenüber dem Standardrenderer unter Win32 und Win64