Включваеми 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

Свързани API