Pluggable Page Render Backends

HotPDF dokáže smerovať bitmapové renderovanie načítaných strán cez backend definovaný aplikáciou a pritom ponechať existujúci renderer ako predvolený bez konfigurácie a ako voliteľný fallback

Vstavaný natívny backend

PDF.UseNativeGDIRenderBackend;
Bitmap := PDF.RenderLoadedPageToBitmap(0, 144);

THPDFNativeGDIRenderBackend sprístupňuje etablovaný natívny GDI renderer Windows cez tú istú verejnú backend zmluvu, ktorú používajú externé implementácie

Jeho schopnosti deklarujú prbcNative, prbcDeterministic, prbcTransparency, prbcColourManagement a prbcThreadSafe bez nároku na prbcDeviceAcceleration

SIMD backend skenovania riadkov

var
  Backend: IHPDFPageRenderBackend;
begin
  Backend := THPDFSIMDScanlineRenderBackend.Create;
  PDF.PageRenderBackend := Backend;
  Bitmap := PDF.RenderLoadedPageToBitmap(0, 144);
end;

THPDFSIMDScanlineRenderBackend urobí preflight kompletného zostaveného display listu a potom zapisuje podporované výplne obdĺžnikov DeviceRGB alebo DeviceGray priamo do finálnej 32-bitovej bitmapovej plochy cez dávky po 64 bajtoch a vektorové chvosty po 16 bajtoch

Zložené obdĺžnikové cesty nasledujú pravidlo výplne nonzero alebo even-odd ako jedna paint operácia a zachovávajú diery, smer transformovaných subpath a predtým nakreslený obsah; rasterizácia kontroluje zrušenie v ohraničených dávkach a zahodí čiastočné plochy

Backend prijíma uloženie a obnovu grafického stavu, ortogonálne mierky, translácie a matice pravouhlých rotácií, zmeny farby výplne, obdĺžniky, operátory výplne a reset cesty; text, ľubovoľné cesty, ťahy, obrázky, priehľadnosť, orezávanie, vzorky, shadingy, nepodporované farebné priestory a neortogonálne transformácie sa odmietnu skôr, než sa alokuje bitmap

Jeho schopnosti deklarujú prbcSIMD, prbcThreadSafe a prbcDeterministic bez nároku na akceleráciu zariadením, priehľadnosť alebo správu farieb

THPDFSIMDRenderBackendStatistics hlási priame plochy, vyrenderované obdĺžniky, vektorové bloky, skalárne koncové pixely a presný zamietnutý operátor, keď je potrebný fallback

Vlastná backend zmluva

Implementujte IHPDFPageRenderBackend a priraďte ho do THotPDF.PageRenderBackend

THPDFPageRenderBackendRequest dodáva požadovaný index stránky a DPI, skompilovaný THPDFPageDisplayList a resolver THPDFRenderDocAccess pre streamy, obrázky, fonty, optional content, správu farieb a rušenie

Backend môže skúmať každý skompilovaný operátor cez THPDFPageDisplayList.GetToken bez opätovného parsovania obsahu stránky

Vráťte True s novo alokovaným TBitmap na prevod vlastníctva bitmapu na HotPDF; vráťte False bez bitmapu na zamietnutie požiadavky

Súbežnosť a fallback

Backendy deklarujúce prbcThreadSafe môžu bežať súbežne cez obe paralelné pipeline renderovania stránok

Backendy bez tejto schopnosti sa serializujú cez vyhradený zámok volania, zatiaľ čo kompilácia display listov zostáva súbežná

rbfpSoftwareFallback opakuje nedostupnú, zamietnutú alebo zlyhavšiu požiadavku backendu s existujúcim rendererom, zatiaľ čo rbfpFail vyvolá EHPDFRenderBackend

Backend môže voliteľne implementovať IHPDFPageRenderBackendFailureInfo alebo vrátiť diagnostický dôvod na požiadavku, takže súbežné zamietnutia si uchovajú dôvod presného pokusu o render

Zmena backendu zneplatní položky cache vyrenderovaných stránok v pamäti aj perzistentné, takže sa obrázky z rôznych rendererov nikdy nezmiešajú

Diagnostika a vizuálna brána

THPDFRenderBackendStatistics hlási pokusy, úspechy, zlyhania, softvérové fallbacky, serializované volania, uplynulý čas, názov backendu a dôvod posledného zlyhania

Vstavaná testovacia zostáva parity používa prekrývajúcu sa priehľadnosť a deklaruje maximálne Delta E 0, chybu RGB alfa kompozície 0 a počet odlišných pixelov 0 voči predvolenému rendereru na Win32 a Win64

Súvisiace API