Pipeline de rendu

Du document aux images de page

Entre OpenDocumentAsync et le PNG qui atteint le navigateur, il y a deux étapes distinctes : résolution du visualiseur (quel moteur charge le document, décidé une fois par ouverture) et traitement de la page (ce qui arrive à chaque image de page à chaque requête). Connaître les deux explique pourquoi un format s'affiche de telle manière — et ce que DefaultRender change réellement.

Étape 1 — Résolution du visualiseur de format

La fabrique associe l'extension de fichier à un visualiseur via le catalogue de formats, avec trois niveaux de priorité :

  1. Les visualiseurs personnalisés d'abord. Tout ce que vous avez enregistré avec DoconutOptions.RegisterViewer(extension, factory, defaultConfig?) l'emporte sur tous les visualiseurs intégrés.
  2. Visualiseurs de famille intégrés. Le catalogue associe chaque extension affichable à une famille de visualiseur — Word, Excel, PowerPoint, Pdf, Cad, Dgn, Image, Tiff, Psd, Email, Visio, Project, Xps, Epub, Txt, Html, Mht, Dcn — chacune avec son propre adaptateur de moteur. Si un plugin sous licence fournit un visualiseur pour la même extension, le visualiseur du plugin remplace celui intégré. AddDoconut() valide les droits des plugins enregistrés au démarrage ; le recours du fabrique au visualiseur intégré est une règle défensive d'exécution.
  3. Formats uniquement via plugin. Certaines extensions n'ont aucun visualiseur intégré — DICOM (.dcm) n'existe que via le plugin DICOM. En ouvrir un sans la capacité requise génère :
text
LicenseException: This document type requires the 'Dicom' plugin license.

Une extension pour laquelle aucun visualiseur ne se revendique lève :

text
FormatNotSupportedException: Document format '<extension>' is not supported.

Après la résolution, la configuration est définie : votre objet de configuration explicite si vous en avez fourni un, sinon la configuration par défaut du format provenant du catalogue. DocOptions.Password est copié dans la configuration pour les documents protégés.

Étape 1b — Mode de redirection (DefaultRender = false)

La plupart des configurations par format exposent un drapeau DefaultRender. Il sélectionne entre deux chemins fondamentalement différents :

  • DefaultRender = true — le document se rend nativement, directement en images de page.
  • DefaultRender = false — le document est d'abord converti en PDF en mémoire, le moteur source est libéré, et un visualiseur PDF prend le relais. Le PDF généré intègre le texte réel, ainsi la recherche en texte intégral obtient des surlignages natifs précis au pixel ; le pipeline force AllowSearch et AllowCopy activés pour le PDF redirigé puisque la conversion est invisible pour l'utilisateur.

XPS et le paramètre par défaut du catalogue pour MHT utilisent le chemin de redirection. Une projection PDF peut fournir une recherche native pour des formats tels que HTML et Microsoft Project. Si le PDF résultant contient des images sans couche de texte, le visualiseur standard ne peut pas rechercher ces pixels.

Utilisez le mode de redirection lorsque vous avez besoin d'une projection PDF contenant du texte — au prix d'une conversion initiale lors de l'ouverture du document.

Étape 2 — Le pipeline d'images de page

Les pages rendues sont traitées à chaque requête selon une séquence fixe :

text
raw page PNG → watermark → rotate/flip → scale → annotation burn → PNG to the response
  • Filigrane — appliqué à partir de l'état de licence (licence manquante, temporaire ou d'abonnement expirée, domaine invalide, mauvaise version) et depuis DocOptions.Watermark pour votre texte personnalisé. Une application correctement licenciée — ou une licence Temporaire active — sans filigrane personnalisé saute cette étape.
  • Rotation/retournement — l'état par page que l'utilisateur définit dans le widget (90°/180°/270°, retournements horizontaux/verticaux) est stocké dans la session et appliqué à chaque rendu ultérieur de cette page.
  • Échelle — les miniatures et niveaux de zoom sont produits en redimensionnant la page rendue à la taille cible demandée ; 0 signifie servir à la taille originale.
  • Gravure d'annotation — les annotations enregistrées sont dessinées sur le bitmap afin que les exportations et images de page les affichent.
  • Encodage — le résultat est encodé en PNG en utilisant des flux mémoire mis en pool et écrit directement dans la réponse HTTP.

Les erreurs à l'intérieur du middleware sont renvoyées sous forme d'images d'erreur PNG (texte rouge sur fond blanc) plutôt que de pages d'erreur HTTP, afin que le widget puisse les afficher dans la zone de la page.

Mise en cache des pages

BaseConfig.CachePages (par défaut true) conserve les images de pages rendues en mémoire pendant la durée de la session du document, ainsi revisiter une page ne la rend pas à nouveau. BaseConfig.ImageResolution (25–300 DPI, 0 = défaut du format) est le principal réglage qualité/mémoire ; le défaut de chaque format est documenté sur sa page de configuration.

DocOptions.ImageResolution est obsolète et ne contrôle pas la qualité du rendu. Si vous migrez une application depuis la bibliothèque précédente, déplacez cette valeur vers la configuration du format — le compilateur indiquera chaque site d'appel.

Rendu sur un nœud vs. plusieurs

Tout ce qui précède décrit un rendu sur un seul nœud à la demande pour la session qui a ouvert le document. Un déploiement où un nœud rend et publie l'ensemble complet des artefacts, et d'autres nœuds servent ces pages depuis un stockage partagé, utilise un chemin de lecture différent — voir Déploiements distribués.

Où ajuster quoi

Ce que vous voulezAjustement
Pages plus nettesImageResolution sur la configuration du format
Recherche de texte précise sur HTML/EPUB/email/MHT/MPPDefaultRender = false sur la configuration du format
Moins de mémoire sur les documents volumineuxCachePages = false, fermer les sessions explicitement
Votre propre tampon sur chaque pageDocOptions.Watermark

Cette page était-elle utile ?