Pluggable Page Render Backends

O HotPDF pode encaminhar a renderização de bitmap de páginas carregadas por um backend definido pelo aplicativo, mantendo o renderizador existente como padrão sem configuração e fallback opcional

Backend nativo embutido

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

THPDFNativeGDIRenderBackend expõe o renderizador GDI nativo do Windows, já consolidado, por meio do mesmo contrato público de backend usado por implementações externas

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

Backend SIMD de scanlines

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 grava preenchimentos de retângulos DeviceRGB ou DeviceGray suportados diretamente na superfície final de bitmap de 32 bits, por meio de lotes de 64 bytes e caudas vetoriais de 16 bytes

Paths compostos de retângulos seguem a regra de preenchimento nonzero ou even-odd como uma única operação de pintura, preservando buracos, direção de subpaths transformados e conteúdo pintado anteriormente; a rasterização checa cancelamento em lotes limitados e descarta superfícies parciais

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

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

THPDFSIMDRenderBackendStatistics reporta superfícies diretas, retângulos renderizados, blocos vetoriais, pixels de cauda escalares e o operador exato rejeitado quando o fallback é necessário

Contrato de backend customizado

Implemente IHPDFPageRenderBackend e atribua-o a THotPDF.PageRenderBackend

THPDFPageRenderBackendRequest fornece o índice de página e o DPI solicitados, o THPDFPageDisplayList compilado e um resolver THPDFRenderDocAccess para streams, imagens, fontes, optional content, gestão de cores e cancelamento

Um backend pode inspecionar cada operador compilado por meio de THPDFPageDisplayList.GetToken sem reparsear o conteúdo da página

Retorne True com um TBitmap recém-alocado para transferir a posse do bitmap ao HotPDF; retorne False sem bitmap para declinar da requisição

Concorrência e fallback

Backends que declaram prbcThreadSafe podem rodar concorrentemente pelos dois pipelines paralelos de renderização de páginas

Backends sem essa capacidade são serializados por meio de um lock dedicado de chamadas, enquanto a compilação de display lists permanece concorrente

rbfpSoftwareFallback repete com o renderizador existente uma requisição de backend indisponível, declinada ou falha, enquanto rbfpFail dispara EHPDFRenderBackend

Um backend pode opcionalmente implementar IHPDFPageRenderBackendFailureInfo ou retornar um motivo de diagnóstico por requisição, para que declínios concorrentes retenham o motivo da tentativa exata de renderização

Trocar o backend invalida as entradas em memória e persistentes do cache de páginas renderizadas, para que imagens de renderizadores diferentes nunca sejam misturadas

Diagnósticos e gate visual

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

O fixture de paridade embutido usa transparência sobreposta e declara Delta E máximo 0, erro RGB de alpha compositing 0 e contagem de pixels diferentes 0 contra o renderizador padrão no Win32 e no Win64

APIs relacionadas