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