Dessiner des formes et des filigranes

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 ShapeBase lors de l’écriture de code qui doit fonctionner à la fois sur des instances Shape et GroupShape ; utilisez Shape directement lorsque vous avez besoin de membres spécifiques à l’image ou à AutoShape, comme ImageData ou Chart.
  • Définissez RelativeHorizontalPosition / RelativeVerticalPosition conjointement avec WrapType lorsque vous faites flotter une forme — une forme en ligne (le réglage par défaut pour InsertImage) ignore les propriétés de positionnement tant que vous ne la faites pas flotter.
  • Privilégiez Document.Watermark pour un filigrane unique sur tout le document plutôt que d’insérer et positionner manuellement un Shape derriè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.HasChart ou Shape.IsGroup avant d’accéder à ImageData, Chart ou aux membres spécifiques à un groupe, car un Shape peut représenter l’un des plusieurs types d’objets de dessin.

Problèmes courants

ProblèmeCauseCorrection
Le réglage de Left/Top sur une forme n’a aucun effet visibleLa 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 videLa forme n’est pas une forme d’imageVérifiez Shape.HasImage avant de lire ImageData
Le texte du filigrane ne correspond pas à la police demandéeAucun TextWatermarkOptions n’a été fourniPassez une instance TextWatermarkOptions avec FontFamily définie sur Watermark.SetText(text, options)
Les formes enfant d’un groupe ne se déplacent pas ensembleLes enfants ont été repositionnés directement au lieu de passer par le groupeDé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éthodeDescription
ShapeUn seul objet de calque de dessin — AutoShape, image, zone de texte ou objet OLE.
ShapeBaseClasse de base abstraite partagée par Shape et GroupShape.
GroupShapeUn groupe de formes traité comme un seul objet de dessin.
DocumentBuilder.InsertImageInsère une forme d’image au curseur, avec une taille et un positionnement optionnels.
ImageDataLes données d’image et les ajustements d’image (recadrage, luminosité, contraste) sur un Shape.
FillMise en forme du remplissage intérieur — uni, dégradé, motif ou image.
RelativeHorizontalPosition / RelativeVerticalPositionPar rapport à quoi la position d’une forme flottante est mesurée.
WrapType / WrapSideComment le texte environnant s’enroule autour d’une forme.
TextBoxParamètres de mise en page du texte pour une forme contenant du texte.
Document.WatermarkGère le filigrane texte ou image du document.
TextWatermarkOptions / ImageWatermarkOptionsConfigure l’apparence d’un filigrane texte ou image.

Voir aussi

 Français