Pluggable Page Render Backends

Aplikace HotPDF může směrovat rastrové vykreslování načtených stránek přes backend definovaný aplikací, přičemž stávající renderer zůstává výchozí bez konfigurace a volitelným fallbackem

Built-in native backend

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

THPDFNativeGDIRenderBackend vystavuje zavedený nativní renderer Windows GDI přes stejnou veřejnou smlouvu backendu, kterou používají externí implementace

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

Backend vykreslování po řádcích s SIMD

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

THPDFSIMDScanlineRenderBackend nejprve v preflightu projde celý zkompilovaný display list a poté zapisuje podporované obdélníkové výplně DeviceRGB nebo DeviceGray přímo do výsledné 32bitové bitmapové plochy přes 64bajtové dávky a 16bajtové vektorové ocasy

Složené obdélníkové cesty sledují při jedné malovací operaci pravidlo výplně nonzero nebo even-odd a zachovávají díry, směr transformovaných podcest a dříve namalovaný obsah; rasterizace v ohraničených dávkách kontroluje zrušení a zahazuje neúplné bitmapové plochy

Backend přijímá uložení a obnovu grafického stavu, ortogonální měřítko, matice posunu a rotace o pravý úhel, změny barvy výplně, obdélníky, operátory výplně a reset cesty; text, libovolné cesty, tahy, obrázky, průhlednost, ořez, vzory, shadings, nepodporované barevné prostory a neortogonální transformace se odmítnou dřív, než se alokuje bitmapa

Jeho schopnosti deklarují prbcSIMD, prbcThreadSafe a prbcDeterministic bez nároku na hardwarovou akceleraci, průhlednost ani správu barev

Stejně jako nativní backend ani tento backend nenárokujeprbcDeviceAcceleration

Custom backend contract

Implementujte IHPDFPageRenderBackend a přiřaďte jej k THotPDF.PageRenderBackend

THPDFPageRenderBackendRequest dodává požadovaný index stránky a DPI, zkompilovaný THPDFPageDisplayList a řešitel THPDFRenderDocAccess pro streamy, obrázky, fonty, volitelný obsah, správu barev a zrušení

Backend může prozkoumat každý zkompilovaný operátor pomocí THPDFPageDisplayList.GetToken bez opětovné analýzy obsahu stránky

Vraťte True s nově alokovaným TBitmap, abyste přenesli vlastnictví bitmapy na aplikaci HotPDF; vraťte False bez bitmapy, abyste požadavek odmítli

Concurrency and fallback

Backendy deklarující prbcThreadSafe mohou běžet souběžně prostřednictvím obou paralelních pipeline vykreslování stránek

Backendy bez této schopnosti jsou serializovány prostřednictvím vyhrazeného zámku volání, zatímco kompilace display listů zůstává souběžná

rbfpSoftwareFallback opakuje nedostupný, odmítnutý nebo neúspěšný požadavek backendu stávajícím rendererem, zatímco rbfpFail vyvolává EHPDFRenderBackend

Změna backendu zneplatní položky cache vykreslených stránek v paměti i trvale, takže obrázky z různých rendererů se nikdy nemíchají Odmítnutý požadavek může hlásit typovanou chybu přes IHPDFPageRenderBackendFailureInfo nebo vrátit diagnostický důvod pro daný požadavek, takže souběžná odmítnutí si ponechají důvod přesného pokusu o vykreslení

Diagnostics and visual gate

THPDFRenderBackendStatistics hlásí pokusy, úspěchy, selhání, softwarové fallbacky, serializovaná volání, uplynulý čas, název backendu a důvod posledního selhání

Vestavěná testovací sestava parity používá překrývající se průhlednost a deklaruje maximální Delta E 0, chybu RGB alfa kompozitingu 0 a počet rozdílných pixelů 0 oproti výchozímu rendereru na Win32 a Win64

Související API