Backends de renderização de página plugáveis

O HotPDF pode encaminhar a renderização bitmap de páginas carregadas através de um backend definido pela aplicação, mantendo o renderer existente como predefinição de configuração zero e fallback opcional

Backend nativo integrado

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

THPDFNativeGDIRenderBackend expõe o consolidado renderer GDI nativo Windows através do mesmo contrato público de backend usado por implementações externas

As suas capacidades declaram prbcNative, prbcDeterministic, prbcTransparency, prbcColourManagement e prbcThreadSafe, sem reivindicar prbcDeviceAcceleration

Backend SIMD por linhas

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

THPDFSIMDScanlineRenderBackend faz o preflight da display list compilada completa e depois escreve preenchimentos retangulares DeviceRGB ou DeviceGray suportados diretamente na superfície bitmap final de 32 bits, através de lotes de 64 bytes e caudas vetoriais de 16 bytes

Os paths retangulares compostos seguem a regra de fill nonzero ou even-odd como uma única operação de pintura, preservando buracos, a direção transformada de subpaths e o conteúdo previamente pintado; a rasterização verifica o cancelamento em lotes limitados e descarta superfícies parciais

O backend aceita save e restore de estado gráfico, matrizes de escala ortogonal, translação e rotação de ângulos retos, mudanças de cor de fill, retângulos, operadores de fill e reset de path; texto, paths arbitrários, strokes, imagens, transparência, clipping, padrões, shadings, espaços de cor não suportados e transformações não ortogonais declinam antes da alocação do bitmap

As suas capacidades declaram prbcSIMD, prbcThreadSafe e prbcDeterministic, sem reivindicar aceleração por dispositivo, transparência ou gestão de cor

THPDFSIMDRenderBackendStatistics informa superfícies diretas, retângulos renderizados, blocos vetoriais, píxeis de cauda escalares e o operador exato rejeitado quando é preciso fallback

Contrato de backend personalizado

Implemente IHPDFPageRenderBackend e atribua-o a THotPDF.PageRenderBackend

THPDFPageRenderBackendRequest fornece o índice de página e o DPI pedidos, a THPDFPageDisplayList compilada e um resolvedor THPDFRenderDocAccess para streams, imagens, fontes, conteúdo opcional, gestão de cor e cancelamento

Um backend pode inspecionar cada operador compilado através de THPDFPageDisplayList.GetToken sem reanalisar o conteúdo da página

Devolva True com um TBitmap recentemente alocado para transferir a propriedade do bitmap para o HotPDF; devolva False sem bitmap para declinar o pedido

Concorrência e fallback

Backends que declarem prbcThreadSafe podem correr em concorrência através de ambos os pipelines paralelos de renderização de páginas

Backends sem essa capacidade são serializados através de um lock de chamadas dedicado, enquanto a compilação da display list permanece concorrente

rbfpSoftwareFallback repete com o renderer existente um pedido de backend indisponível, declinado ou falhado, enquanto rbfpFail gera EHPDFRenderBackend

Um backend pode opcionalmente implementar IHPDFPageRenderBackendFailureInfo ou devolver um motivo de diagnóstico por pedido, para que declinações concorrentes retenham o motivo da tentativa exata de renderização

Mudar de backend invalida as entradas de cache de páginas renderizadas em memória e persistentes, para que imagens de renderers diferentes nunca se misturem

Diagnósticos e gate visual

THPDFRenderBackendStatistics informa tentativas, sucessos, falhas, fallbacks de software, chamadas serializadas, tempo decorrido, nome do backend e o último motivo de falha

O fixture de paridade integrado usa transparência sobreposta e declara Delta E máximo 0, erro RGB de alpha-compositing 0 e contagem de píxeis diferentes 0 face ao renderer predefinido, em Win32 e Win64

APIs relacionadas