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

Relaterede API'er