Включваеми backend-и за рендиране на страници
HotPDF може да насочи растерното рендиране на заредени страници към дефиниран от приложението backend, като запази съществуващия рендер като настройка без конфигурация по подразбиране и опционален fallback
Вграден нативен backend
PDF.UseNativeGDIRenderBackend;
Bitmap := PDF.RenderLoadedPageToBitmap(0, 144);
THPDFNativeGDIRenderBackend излага утвърдения Windows нативен GDI рендер чрез същия публичен договор за backend, който използват външните имплементации
Възможностите му декларират prbcNative, prbcDeterministic, prbcTransparency, prbcColourManagement и prbcThreadSafe, без да претендират за prbcDeviceAcceleration
SIMD scanline backend
var
Backend: IHPDFPageRenderBackend;
begin
Backend := THPDFSIMDScanlineRenderBackend.Create;
PDF.PageRenderBackend := Backend;
Bitmap := PDF.RenderLoadedPageToBitmap(0, 144);
end;
THPDFSIMDScanlineRenderBackend прави preflight на целия компилиран display list, след което записва поддържаните правоъгълни запълвания DeviceRGB или DeviceGray директно в финалната 32-битова растерна повърхност чрез партиди от 64 байта и векторни опашки по 16 байта
Съставните пътища от правоъгълници следват правилото за запълване nonzero или even-odd като една операция на рисуване, като запазват дупките, направението на трансформираните подпътища и вече рисуваното съдържание; растеризацията проверява за прекъсване в ограничени по размер партиди и отхвърля частичните повърхности
Backend-ът приема save и restore на graphics state, ортогонален мащаб, матрици за транслация и завъртане на прав ъгъл, смяна на цвета за запълване, правоъгълници, оператори за запълване и нулиране на пътека; текст, произволни пътеки, щрихи, изображения, прозрачност, изрязване, шарки, shadings, неподдръжани цветови пространства и неортогонални трансформации се отказват преди заделянето на битмап
Възможностите му декларират prbcSIMD, prbcThreadSafe и prbcDeterministic, без да претендират за device ускорение, прозрачност или цветово управление
THPDFSIMDRenderBackendStatistics докладва директни повърхности, рендирани правоъгълници, векторни блокове, скаларни опашни пиксели и точния отхвърлен оператор, когато е нужен fallback
Договор за собствен backend
Имплементирайте IHPDFPageRenderBackend и го задайте на THotPDF.PageRenderBackend
THPDFPageRenderBackendRequest доставя исканата страница и DPI, компилирания THPDFPageDisplayList и резолвер THPDFRenderDocAccess за потоци, изображения, шрифтове, optional content, цветово управление и отмяна
Backend може да инспектира всеки компилиран оператор чрез THPDFPageDisplayList.GetToken, без да парсва отново съдържанието на страницата
Върнете True с новозаделен TBitmap, за да прехвърлите собствеността върху битмапа към HotPDF; върнете False без битмап, за да откажете заявката
Конкурентност и fallback
Backend-и, деклариращи prbcThreadSafe, могат да текат конкурентно през и двете паралелни тръбопровода за рендиране на страници
Backend-и без тази възможност се сериализират чрез отделен заключващ lock при извикване, докато компилацията на display list остава конкурентна
rbfpSoftwareFallback повтори недостъпна, отказана или провалена заявка към backend със съществуващия рендер, а rbfpFail хвърля EHPDFRenderBackend
Backend може опционално да имплементира IHPDFPageRenderBackendFailureInfo или да връща причина за диагностика по заявка, така че конкурентните откази да пазят причината за точния опит за рендиране
Смяната на backend инвалидира записите в кеша за рендирани страници в паметта и на диска, така че изображения от различни рендери никога не се смесват
Диагностика и визуална проверка
THPDFRenderBackendStatistics докладва опити, успехи, провали, софтуерни fallback-и, сериализирани извиквания, изминало време, име на backend и последната причина за провал
Вградената паритетна фикстура използва застъпваща се прозрачност и декларира максимум Delta E 0, RGB грешка при alpha композитинг 0 и нула различаващи се пиксела спрямо рендера по подразбиране на Win32 и Win64