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