Backends de rendu de page enfichables
HotPDF peut router le rendu bitmap de page chargée via un backend défini par l'application tout en conservant le moteur de rendu existant comme valeur par défaut sans configuration et repli facultatif
Backend natif intégré
PDF.UseNativeGDIRenderBackend;
Bitmap := PDF.RenderLoadedPageToBitmap(0, 144);
THPDFNativeGDIRenderBackend expose le moteur de rendu natif Windows GDI établi via le même contrat de backend publique utilisé par les implémentations externes
Ses capacités déclarent prbcNative, prbcDeterministic, prbcTransparency, prbcColourManagement et prbcThreadSafe sans revendiquer prbcDeviceAcceleration
Contrat de backend personnalisé
var
Backend: IHPDFPageRenderBackend;
begin
Backend := THPDFSIMDScanlineRenderBackend.Create;
PDF.PageRenderBackend := Backend;
Bitmap := PDF.RenderLoadedPageToBitmap(0, 144);
end;
THPDFSIMDScanlineRenderBackend pré-vérifie la display list compilée complète, puis écrit directement dans la surface bitmap 32 bits finale les remplissages de rectangles DeviceRGB ou DeviceGray pris en charge, par lots de 64 octets et queues vectorielles de 16 octets
Les chemins de rectangles composés suivent la règle de remplissage nonzero ou even-odd comme une seule opération de peinture, en préservant les trous, la direction des sous-chemins transformés et le contenu déjà peint ; la rastérisation vérifie les annulations par lots bornés et abandonne les surfaces partielles
Le backend accepte les sauvegardes et restaurations d’état graphique, les matrices d’échelle orthogonale, de translation et de rotation à angle droit, les changements de couleur de remplissage, les rectangles, les opérateurs de remplissage et la réinitialisation de chemin ; le texte, les chemins arbitraires, les traits, les images, la transparence, le rognage, les motifs, les shadings, les espaces colorimétriques non pris en charge et les transformations non orthogonales déclinent avant l’allocation du bitmap
Ses capacités déclarent prbcSIMD, prbcThreadSafe et prbcDeterministic sans prétendre à une accélération périphérique, à la transparence ou à la gestion des couleurs
THPDFSIMDRenderBackendStatistics rapporte les surfaces directes, rectangles rendus, blocs vectoriels, pixels de queue scalaires et l’opérateur rejeté exact lorsqu’un repli est nécessaire
Contrat de backend personnalisé
Implémentez IHPDFPageRenderBackend et affectez-le à THotPDF.PageRenderBackend
THPDFPageRenderBackendRequest fournit l'index de page et la DPI demandés, la THPDFPageDisplayList compilée et un résolveur THPDFRenderDocAccess pour les flux, images, polices, contenus optionnels, gestion des couleurs et annulation
Un backend peut inspecter chaque opérateur compilé via THPDFPageDisplayList.GetToken sans réanalyser le contenu de page
Retournez True avec un TBitmap nouvellement alloué pour transférer la propriété du bitmap à HotPDF ; retournez False sans bitmap pour refuser la demande
Concurrence et repli
Les backends déclarant prbcThreadSafe peuvent s'exécuter en parallèle via les deux pipelines de rendu de page parallèles
Les backends sans cette capacité sont sérialisés via un verrou d'appel dédié tandis que la compilation de la liste d'affichage reste concurrente
rbfpSoftwareFallback réessaie une demande de backend indisponible, refusée ou en échec avec le moteur de rendu existant, tandis que rbfpFail déclenche EHPDFRenderBackend
Un backend peut optionnellement implémenter IHPDFPageRenderBackendFailureInfo ou renvoyer un motif de diagnostic par requête afin que les refus concurrents conservent le motif de la tentative de rendu exacte
Changer le backend invalide les entrées de cache de pages rendues en mémoire et persistantes afin que les images de différents moteurs de rendu ne soient jamais mélangées
Diagnostics et portail visuel
THPDFRenderBackendStatistics signale les tentatives, succès, échecs, replis logiciels, appels sérialisés, temps écoulé, nom du backend et la dernière raison d'échec
La fixture de parité intégrée utilise une transparence qui se chevauche et déclare un Delta E maximal de 0, une erreur RVB de composition alpha de 0 et un nombre de pixels différents de 0 par rapport au moteur de rendu par défaut sur Win32 et Win64