Render backends de páginas conectables

HotPDF puede enrutar el renderizado bitmap de páginas cargadas a través de un backend definido por la aplicación, conservando el renderer existente como predeterminado de cero configuración y fallback opcional

Backend nativo integrado

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

THPDFNativeGDIRenderBackend expone el consolidado renderer nativo GDI de Windows a través del mismo contrato público de backend que usan las implementaciones externas

Sus capabilities declaran prbcNative, prbcDeterministic, prbcTransparency, prbcColourManagement y prbcThreadSafe sin reclamar prbcDeviceAcceleration

Backend SIMD de scanline

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

THPDFSIMDScanlineRenderBackend hace preflight del display list compilado completo y luego escribe los rellenos de rectángulos DeviceRGB o DeviceGray soportados directamente en la superficie bitmap final de 32 bits mediante batches de 64 bytes y colas vectoriales de 16 bytes

Los paths de rectángulos compuestos siguen la regla de relleno nonzero o even-odd como una sola operación de pintado, conservando los huecos, la dirección de los subpaths transformados y el contenido ya pintado; la rasterización comprueba la cancelación en lotes acotados y descarta las superficies parciales

El backend acepta save y restore del graphics state, escala ortogonal, matrices de traslación y rotación en ángulo recto, cambios de color de relleno, rectángulos, operadores de fill y reset de paths; el texto, los paths arbitrarios, los strokes, las imágenes, la transparencia, el clipping, los patterns, los shadings, los espacios de color no soportados y las transformadas no ortogonales declinan antes de la asignación del bitmap

Sus capabilities declaran prbcSIMD, prbcThreadSafe y prbcDeterministic sin reclamar aceleración por dispositivo, transparencia ni gestión de color

THPDFSIMDRenderBackendStatistics reporta las superficies directas, los rectángulos renderizados, los bloques vectoriales, los píxeles de cola escalares y el operador rechazado exacto cuando se requiere fallback

Contrato de backend personalizado

Implemente IHPDFPageRenderBackend y asígnelo a THotPDF.PageRenderBackend

THPDFPageRenderBackendRequest proporciona el índice de página y DPI solicitados, el THPDFPageDisplayList compilado y un resolver THPDFRenderDocAccess para streams, imágenes, fuentes, optional content, gestión de color y cancelación

Un backend puede inspeccionar cada operador compilado mediante THPDFPageDisplayList.GetToken sin reparsear el contenido de la página

Devuelva True con un TBitmap recién asignado para transferir la propiedad del bitmap a HotPDF; devuelva False sin bitmap para declinar la solicitud

Concurrencia y fallback

Los backends que declaran prbcThreadSafe pueden ejecutarse concurrentemente a través de ambos pipelines de renderizado paralelo de páginas

Los backends sin esa capability se serializan mediante un call lock dedicado, mientras que la compilación del display list sigue siendo concurrente

rbfpSoftwareFallback reintenta con el renderer existente una solicitud de backend no disponible, declinada o fallida, mientras que rbfpFail lanza EHPDFRenderBackend

Un backend puede opcionalmente implementar IHPDFPageRenderBackendFailureInfo o devolver un motivo de diagnóstico por solicitud, de modo que las declinaciones concurrentes conserven el motivo del intento de renderizado exacto

Cambiar el backend invalida las entradas del cache de páginas renderizadas en memoria y persistente, así que nunca se mezclan imágenes de renderers diferentes

Diagnóstico y puerta visual

THPDFRenderBackendStatistics reporta intentos, éxitos, fallos, software fallbacks, llamadas serializadas, tiempo transcurrido, nombre del backend y el último motivo de fallo

El fixture de paridad integrado usa transparencia superpuesta y declara Delta E máximo 0, error RGB de alpha-compositing 0 y conteo de píxeles diferentes 0 contra el renderer predeterminado en Win32 y Win64

APIs relacionadas