Dessiner des formes et des filigranes
Dessiner des formes et des filigranes
Les documents Word conservent AutoShapes, des images, des zones de texte et des objets OLE dans un calque de dessin séparé, distinct du flux de texte du paragraphe/segment. Aspose.Words FOSS pour .NET modélise ce calque avec la classe Shape (objets de dessin concrets) et sa base abstraite ShapeBase, toutes deux faisant partie de l’espace de noms Aspose.Words.Drawing. Ce guide couvre le modèle de forme, l’insertion d’images et de AutoShapes, le positionnement et l’habillage, les remplissages et effets, le groupement et les filigranes.
Le modèle Shape et ShapeBase
Shape — scellée, et le type avec lequel vous travaillez directement — représente un AutoShape, une zone de texte, une forme libre, un objet OLE, un contrôle ActiveX, ou une image dans le calque de dessin. Elle dérive de l’abstrait ShapeBase, qui fournit les propriétés partagées par chaque objet de dessin: position (Left, Top, Width, Height, Rotation), la valeur d’énumération ShapeType, et les sous-objets de formatage tels que Fill, Stroke, ShadowFormat, Glow et Reflection. GroupShape (également un ShapeBase) représente un groupe de formes traité comme une seule unité. Créez une forme autonome directement avec new Shape(doc, shapeType), où shapeType est une valeur ShapeType telle que Rectangle, Ellipse, Star ou TextBox, puis insérez-la dans l’arbre avec DocumentBuilder.InsertNode(node).
Insertion d’images et de AutoShapes avec DocumentBuilder
Pour les images spécifiquement, DocumentBuilder.InsertImage est la voie la plus directe: les surcharges acceptent un Image, un chemin de fichier, un Stream, ou un tableau d’octets brut, avec d’autres surcharges qui définissent des width/height explicites ou un positionnement complet (horzPos, left, vertPos, top, width, height, wrapType). Le Shape résultant expose ses données d’image via la propriété ImageData — ImageData.SetImage(...) pour remplacer l’image, plus CropTop/CropBottom/CropLeft/CropRight, Brightness, Contrast et GrayScale pour des ajustements de base. Les instances GroupShape sont créées avec DocumentBuilder.InsertGroupShape(shapes).
Positionnement et habillage du texte
Le placement d’une forme par rapport à la page est contrôlé par RelativeHorizontalPosition et RelativeVerticalPosition (chacun relatif à Page, Margin, Column, ou des ancres similaires), ainsi que par les propriétés de décalage Left/Top. HorizontalAlignment et VerticalAlignment gèrent l’alignement relatif simple. La façon dont le texte environnant s’écoule autour de la forme est définie avec WrapType et, pour un habillage spécifique à un côté, WrapSide. IsInline indique si la forme s’écoule avec le texte (en ligne) ou flotte de manière indépendante.
Remplissages, contours et effets
Shape.Fill (un objet Fill) contrôle la façon dont l’intérieur de la forme est peint : Fill.Solid(color) pour une couleur unie, Fill.OneColorGradient(...) / Fill.TwoColorGradient(...) pour des dégradés, Fill.Patterned(patternType) pour un motif, et Fill.SetImage(...) pour un remplissage d’image ; FillType indique lequel de ceux-ci est actif. Le contour est contrôlé via la propriété Stroke, et les effets visuels sont exposés comme des objets de mise en forme distincts — ShadowFormat, Glow (GlowFormat), Reflection (ReflectionFormat), et SoftEdge (SoftEdgeFormat) — chacun avec sa propre méthode Remove() pour effacer l’effet.
Regroupement des formes et des zones de texte
Plusieurs formes peuvent être combinées en un GroupShape, qui se comporte lui-même comme un seul ShapeBase avec ses propres Fill, ShadowFormat, Glow et Reflection. Pour une forme contenant du texte, Shape.TextBox (un objet TextBox) expose la mise en page propre au texte : InternalMarginLeft/Right/Top/Bottom pour le remplissage, FitShapeToText pour redimensionner automatiquement la forme, LayoutFlow pour la direction du texte, et VerticalAnchor pour l’alignement vertical du texte à l’intérieur de la forme.
Watermarks
Document.Watermark (un objet Watermark) gère un filigrane couvrant tout le document, indépendant de toute forme unique. Appelez Watermark.SetText(text) ou SetText(text, options) pour un filigrane texte, ou SetImage(...) pour un filigrane image, et Watermark.Remove() pour le supprimer. Watermark.Type indique le WatermarkType actuel (Text, Image ou None). TextWatermarkOptions contrôle FontFamily, FontSize, Color et Layout (WatermarkLayout.Horizontal ou Diagonal) ; ImageWatermarkOptions contrôle Scale et IsWashout.
Conseils et meilleures pratiques
- Utilisez
ShapeBaselors de l’écriture de code qui doit fonctionner à la fois sur des instancesShapeetGroupShape; utilisezShapedirectement lorsque vous avez besoin de membres spécifiques à l’image ou à AutoShape, commeImageDataouChart. - Définissez
RelativeHorizontalPosition/RelativeVerticalPositionconjointement avecWrapTypelorsque vous faites flotter une forme — une forme en ligne (le réglage par défaut pourInsertImage) ignore les propriétés de positionnement tant que vous ne la faites pas flotter. - Privilégiez
Document.Watermarkpour un filigrane unique sur tout le document plutôt que d’insérer et positionner manuellement unShapederrière le texte. - Supprimez un effet avec la méthode
Remove()de son objet (ShadowFormat.Remove(),ReflectionFormat.Remove()) plutôt qu’en réglant chaque propriété à zéro. - Vérifiez
Shape.HasImage,Shape.HasChartouShape.IsGroupavant d’accéder àImageData,Chartou aux membres spécifiques à un groupe, car unShapepeut représenter l’un des plusieurs types d’objets de dessin.
Problèmes courants
| Problème | Cause | Correction |
|---|---|---|
Le réglage de Left/Top sur une forme n’a aucun effet visible | La forme est toujours en ligne (IsInline == true) | Définissez WrapType à une valeur flottante et définissez RelativeHorizontalPosition/RelativeVerticalPosition afin que les propriétés de positionnement prennent effet |
Shape.ImageData lance une exception ou est vide | La forme n’est pas une forme d’image | Vérifiez Shape.HasImage avant de lire ImageData |
| Le texte du filigrane ne correspond pas à la police demandée | Aucun TextWatermarkOptions n’a été fourni | Passez une instance TextWatermarkOptions avec FontFamily définie sur Watermark.SetText(text, options) |
| Les formes enfant d’un groupe ne se déplacent pas ensemble | Les enfants ont été repositionnés directement au lieu de passer par le groupe | Déplacez ou redimensionnez le GroupShape lui-même afin que sa transformation de coordonnées s’applique à tous les enfants |
FAQ
Quelle est la différence entre Shape et ShapeBase ?
ShapeBase est la classe de base abstraite partagée par Shape et GroupShape. Utilisez ShapeBase dans le code qui doit gérer les deux types de manière uniforme; utilisez Shape lorsque vous avez besoin de membres spécifiques à un seul objet de dessin, comme ImageData ou Chart.
Comment ajouter une image à un document?
Utilisez l’une des surcharges de DocumentBuilder.InsertImage — transmettez un Image, un chemin de fichier, un Stream ou un tableau d’octets, éventuellement avec width/height ou des arguments de positionnement complets.
Comment faire flotter une forme au lieu qu’elle reste en ligne avec le texte?
Définissez son WrapType sur une valeur non en ligne et définissez RelativeHorizontalPosition / RelativeVerticalPosition afin que les décalages Left/Top de la forme soient interprétés par rapport à la page, à la marge ou à la colonne.
Puis-je ajouter à la fois un filigrane texte et un filigrane image?
Document.Watermark.Type reflète le type de filigrane actuel; définir un nouveau filigrane avec SetText ou SetImage remplace ce qui était présent auparavant, de sorte qu’un document ne possède qu’un seul filigrane actif à la fois.
Comment supprimer une ombre ou un reflet d’une forme?
Appelez Remove() sur l’objet de formatage correspondant — Shape.ShadowFormat.Remove() ou Shape.Reflection.Remove().
API Reference Résumé
| Classe/Méthode | Description |
|---|---|
Shape | Un seul objet de calque de dessin — AutoShape, image, zone de texte ou objet OLE. |
ShapeBase | Classe de base abstraite partagée par Shape et GroupShape. |
GroupShape | Un groupe de formes traité comme un seul objet de dessin. |
DocumentBuilder.InsertImage | Insère une forme d’image au curseur, avec une taille et un positionnement optionnels. |
ImageData | Les données d’image et les ajustements d’image (recadrage, luminosité, contraste) sur un Shape. |
Fill | Mise en forme du remplissage intérieur — uni, dégradé, motif ou image. |
RelativeHorizontalPosition / RelativeVerticalPosition | Par rapport à quoi la position d’une forme flottante est mesurée. |
WrapType / WrapSide | Comment le texte environnant s’enroule autour d’une forme. |
TextBox | Paramètres de mise en page du texte pour une forme contenant du texte. |
Document.Watermark | Gère le filigrane texte ou image du document. |
TextWatermarkOptions / ImageWatermarkOptions | Configure l’apparence d’un filigrane texte ou image. |