Wtykowe backendy renderowania stron

HotPDF może kierować renderowanie bitmapowe załadowanych stron przez backend zdefiniowany w aplikacji, zachowując istniejący renderer jako domyślny bez konfiguracji i opcjonalny fallback

Wbudowany backend natywny

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

THPDFNativeGDIRenderBackend wystawia sprawdzone natywne renderowanie GDI Windows przez ten sam publiczny kontrakt backendu, którego używają implementacje zewnętrzne

Jego możliwości deklarują prbcNative, prbcDeterministic, prbcTransparency, prbcColourManagement i prbcThreadSafe bez zgłaszania prbcDeviceAcceleration

Backend SIMD scanline

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

THPDFSIMDScanlineRenderBackend robi preflight kompletnej skompilowanej display listy, a potem zapisuje obsługiwane wypełnienia prostokątów DeviceRGB lub DeviceGray bezpośrednio do końcowej powierzchni bitmapy 32-bit przez paczki 64-bajtowe i wektorowe ogony 16-bajtowe

Złożone ścieżki prostokątów są malowane zgodnie z regułą wypełnienia nonzero albo even-odd jako jedna operacja, z zachowaniem dziur, kierunku przekształconych podścieżek i uprzednio namalowanej zawartości; rasteryzacja sprawdza anulowanie w ograniczonych paczkach i odrzuca częściowe powierzchnie

Backend akceptuje zapis i odtworzenie stanu grafiki, ortogonalne skalowanie, macierze translacji i obrotów o kąty proste, zmiany koloru wypełnienia, prostokąty, operatory fill i reset ścieżki; tekst, dowolne ścieżki, stroke'y, obrazy, przezroczystość, przycinanie, wzory, shadingi, nieobsługiwane przestrzenie kolorów i transformacje nieortogonalne są odmawiane przed alokacją bitmapy

Jego możliwości deklarują prbcSIMD, prbcThreadSafe i prbcDeterministic bez zgłaszania akceleracji urządzenia, przezroczystości ani zarządzania kolorem

THPDFSIMDRenderBackendStatistics raportuje bezpośrednie powierzchnie, wyrenderowane prostokąty, bloki wektorowe, skalarne piksele ogonowe oraz dokładnie odrzucony operator, gdy wymagany jest fallback

Kontrakt backendu własnego

Zaimplementuj IHPDFPageRenderBackend i przypisz go do THotPDF.PageRenderBackend

THPDFPageRenderBackendRequest dostarcza żądany indeks strony i DPI, skompilowaną THPDFPageDisplayList oraz resolver THPDFRenderDocAccess dla strumieni, obrazów, fontów, zawartości opcjonalnej, zarządzania kolorem i anulowania

Backend może oglądać każdy skompilowany operator przez THPDFPageDisplayList.GetToken bez ponownego parsowania treści strony

Zwróć True z nowo zaalokowanym TBitmap, aby przekazać własność bitmapy HotPDF; zwróć False bez bitmapy, aby odmówić żądania

Współbieżność i fallback

Backendy deklarujące prbcThreadSafe mogą działać współbieżnie przez oba równoległe pipeline'y renderowania stron

Backendy bez tej możliwości są szeregowane przez dedykowaną blokadę wywołań, podczas gdy kompilacja display listy pozostaje współbieżna

rbfpSoftwareFallback ponawia niedostępne, odmówione lub nieudane żądanie backendu istniejącym rendererem, a rbfpFail podnosi EHPDFRenderBackend

Backend może opcjonalnie zaimplementować IHPDFPageRenderBackendFailureInfo albo zwracać powód diagnostyczny per żądanie, żeby współbieżne odmowy zachowały powód dokładnej próby renderowania

Zmiana backendu unieważnia wpisy pamięci podręcznej wyrenderowanych stron w pamięci i trwałe, więc obrazy z różnych rendererów nigdy się nie mieszają

Diagnostyka i bramka wizualna

THPDFRenderBackendStatistics raportuje próby, sukcesy, porażki, fallbacki programowe, uszeregowane wywołania, czas, nazwę backendu i ostatni powód porażki

Wbudowany fixture parzystości używa nakładającej się przezroczystości i deklaruje maksymalne Delta E 0, błąd RGB kompozycji alpha 0 i liczbę różniących się pikseli 0 względem renderera domyślnego na Win32 i Win64

Powiązane API