Pluggable Page Render Backends
HotPDF kan route bitmap-rendering af indlæste sider gennem en applikationsdefineret backend, mens den eksisterende renderer beholdes som zero-configuration-standard og valgfri fallback
Indbygget native backend
PDF.UseNativeGDIRenderBackend;
Bitmap := PDF.RenderLoadedPageToBitmap(0, 144);
THPDFNativeGDIRenderBackend eksponerer den etablerede Windows native GDI-renderer gennem den samme offentlige backend-kontrakt, som eksterne implementeringer bruger
Dens kapabiliteter angiver prbcNative, prbcDeterministic, prbcTransparency, prbcColourManagement, og prbcThreadSafe uden at angive prbcDeviceAcceleration
SIMD scanline backend
var
Backend: IHPDFPageRenderBackend;
begin
Backend := THPDFSIMDScanlineRenderBackend.Create;
PDF.PageRenderBackend := Backend;
Bitmap := PDF.RenderLoadedPageToBitmap(0, 144);
end;
THPDFSIMDScanlineRenderBackend foretager preflight på den komplette kompilerede displayliste og skriver derefter understøttede DeviceRGB- eller DeviceGray-rektangel-fyld direkte ind i den endelige 32-bit bitmap-overflade via 64-byte-batches og 16-byte-vektorhaler
Sammensatte rektangelstier følger nonzero- eller even-odd-fyldreglen som én tegneoperation og bevarer huller, transformerede understiers retning og tidligere tegnet indhold; rasteriseringen tjekker annullering i afgrænsede batches og kasserer delvise overflader
Backend'en accepterer gem og gendan af grafiktilstand, ortogonal skalering, translations- og rettvinklede rotationsmatricer, ændringer af fyldfarve, rektangler, fyld-operatorer og stinulstilling; tekst, vilkårlige stier, streger, billeder, transparens, klipning, mønstre, shadings, ikke-understøttede farverum og ikke-ortogonale transformationer afvises, før bitmappen allokeres
Dens kapabiliteter angiver prbcSIMD, prbcThreadSafe, og prbcDeterministic uden at angive enhedsacceleration, transparens eller farvestyring
THPDFSIMDRenderBackendStatistics rapporterer direkte overflader, renderede rektangler, vektorblokke, skalære halepixels og den præcise afviste operator, når fallback er nødvendig
Brugerdefineret backend-kontrakt
Implement IHPDFPageRenderBackend og tildel den til THotPDF.PageRenderBackend
THPDFPageRenderBackendRequest leverer det ønskede sideindeks og DPI, den kompilerede THPDFPageDisplayList og en THPDFRenderDocAccess-resolver til strømme, billeder, skrifttyper, valgfrit indhold, farvestyring og annullering
En backend kan inspicere hver kompileret operator via THPDFPageDisplayList.GetToken uden at fortolke sideindholdet igen
Returnér True med en nyallokeret TBitmap for at overdrage bitmap-ejerskabet til HotPDF; returnér False uden bitmap for at afvise forespørgslen
Samtidighed og fallback
Backends, der angiver prbcThreadSafe, kan køre samtidigt gennem begge parallelle side-render-pipelines
Backends uden den egenskab serialiseres gennem en dedikeret kaldelås, mens kompileringen af displaylisten forbliver samtidig
rbfpSoftwareFallback prøver en utilgængelig, afvist eller fejlslagen backend-forespørgsel igen med den eksisterende renderer, mens rbfpFail udløser EHPDFRenderBackend
En backend kan valgfrit implementere IHPDFPageRenderBackendFailureInfo eller returnere en diagnostisk årsag pr. forespørgsel, så samtidige afvisninger bevarer årsagen til det præcise render-forsøg
Skifter man backend, ugyldiggøres cache-entry'er for renderede sider i hukommelsen og på persistente lager, så billeder fra forskellige renderere aldrig blandes
Diagnostik og visuel gate
THPDFRenderBackendStatistics rapporterer forsøg, successer, fejl, software-fallbacks, serialiserede kald, forløbet tid, backend-navn og den seneste årsag til fejl
Det indbyggede parity-fixture bruger overlappende transparens og erklærer maksimal Delta E 0, RGB-fejl i alpha-compositing 0 og antal afvigende pixels 0 sammenlignet med standardrendereren på Win32 og Win64