Cum să adăugați forme de desen în documente Word în .NET
Acest ghid arată cum să adăugați conținut în stratul de desen al unui document Word cu Aspose.Words FOSS pentru .NET: inserarea unui AutoShape, adăugarea unei imagini, poziționarea acesteia și înfășurarea textului în jurul ei, umplerea și stilizarea ei, gruparea mai multor forme și setarea unui filigran. Aspose.Words FOSS pentru .NET este disponibil prin NuGet sau prin compilare din sursă.
Ghid pas cu pas
Pasul 1: Obțineți biblioteca
Clonați depozitul și compilați Aspose.Words.sln în configurația Release, apoi adăugați o referință de proiect la Aspose.Words.csproj din propriul dvs. proiect .NET, așa cum este descris în ghidul de instalare. Adăugați using Aspose.Words; and using Aspose.Words.Drawing; în partea de sus a oricărui fișier care lucrează cu forme.
Pasul 2: Adăugați un AutoShape
Construiți o formă direct cu new Shape(doc, shapeType), unde shapeType este o valoare ShapeType precum Rectangle, Ellipse, Star sau TextBox, apoi inserați-o în arbore cu DocumentBuilder.InsertNode(node). Shape este clasa concretă, sigilată pe care o construiți și o configurați; derivă din clasa abstractă ShapeBase, care definește poziția (Left, Top, Width, Height, Rotation) și sub-obiectele de formatare (Fill, Stroke, ShadowFormat, Glow, Reflection) partajate cu GroupShape.
Pasul 3: Adaugă o imagine
DocumentBuilder.InsertImage este calea directă pentru imagini: suprasarcinile acceptă un Image, o cale de fișier, un Stream sau un tablou brut de octeți, cu suprasarcini suplimentare care iau width/height explicite sau argumente complete de poziționare (horzPos, left, vertPos, top, width, height, wrapType). Proprietatea ImageData a Shape rezultat conține datele imaginii — apelează ImageData.SetImage(...) pentru a schimba imaginea și folosește CropTop/CropBottom/CropLeft/CropRight, Brightness, Contrast și GrayScale pentru ajustări de bază.
Pasul 4: Poziționează forma și înfășoară textul
O formă inline (rezultatul implicit al InsertImage) curge împreună cu textul înconjurător și ignoră proprietățile de poziționare până când plutește — verifică IsInline pentru a confirma în ce mod este forma. Pentru a pluti o formă, setează WrapType la o valoare non-inline și setează RelativeHorizontalPosition / RelativeVerticalPosition (fiecare relativ la Page, Margin, Column sau un ancoră similară) împreună cu decalajele Left/Top. WrapSide controlează înfășurarea specifică pe fiecare parte, iar HorizontalAlignment / VerticalAlignment gestionează alinierea relativă simplă în loc de decalaje explicite.
Pasul 5: Umple și stilizează forma
Shape.Fill (un obiect Fill) pictează interiorul formei: Fill.Solid(color) pentru o culoare solidă, Fill.OneColorGradient(...) / Fill.TwoColorGradient(...) pentru degradeuri, Fill.Patterned(patternType) pentru un model și Fill.SetImage(...) pentru umplere cu imagine — FillType raportează care este în prezent activ. Conturul provine din proprietatea Stroke. Pentru efecte, ShadowFormat, Glow (GlowFormat), Reflection (ReflectionFormat) și SoftEdge (SoftEdgeFormat) expun fiecare setările lor și o metodă Remove() care șterge efectul, revenind la niciunul.
Pasul 6: Grupează mai multe forme
Combină mai multe forme într-o singură unitate cu DocumentBuilder.InsertGroupShape(shapes), care returnează un GroupShape. GroupShape este în sine un ShapeBase, astfel că are propriile Fill, ShadowFormat, Glow și Reflection care se aplică grupului în ansamblu; mută sau redimensionează GroupShape în loc de copiii săi individuali pentru ca transformarea de coordonate a grupului să rămână consistentă. Pentru o formă care conține text, Shape.TextBox (un obiect TextBox) controlează marginile (InternalMarginLeft/Right/Top/Bottom), redimensionarea automată (FitShapeToText), direcția textului (LayoutFlow) și alinierea verticală (VerticalAnchor).
Pasul 7: Adaugă un filigran
Document.Watermark gestionează un singur filigran la nivel de document, independent de orice formă pe care ai inserat-o manual. Apelează Watermark.SetText(text) sau SetText(text, options) pentru un filigran de text, sau SetImage(...) pentru un filigran de imagine; Watermark.Remove() îl șterge, iar Watermark.Type raportează WatermarkType curent (Text, Image sau None). TextWatermarkOptions setează FontFamily, FontSize, Color și Layout (WatermarkLayout.Horizontal sau Diagonal); ImageWatermarkOptions setează Scale și IsWashout.
Probleme comune și soluții
Setting Left/Top pe o formă nu are niciun efect vizibil. Forma este încă în linie (IsInline == true). Setează WrapType la o valoare în virgulă mobilă și setează RelativeHorizontalPosition/RelativeVerticalPosition pentru ca proprietățile de offset să aibă efect.
Shape.ImageData aruncă sau nu returnează nimic. Forma nu este o formă de tip imagine. Verifică Shape.HasImage înainte de a citi ImageData.
Formele copil ale unui grup nu se mișcă împreună. Copiii au fost repoziționați individual în loc de prin grup. Mută sau redimensionează the GroupShape în sine, astfel încât transformarea sa de coordonate se aplică fiecărui copil.
Textul filigran nu folosește fontul solicitat. Nu TextWatermarkOptions a fost transmis. Apel Watermark.SetText(text, options) cu un TextWatermarkOptions instanță a cărei FontFamily este setată.
Întrebări frecvente
Care este diferența dintre Shape și ShapeBase?
ShapeBase este clasa de bază abstractă partajată de Shape și GroupShape. Scrie cod față de ShapeBase când ar trebui să gestioneze ambele tipuri în mod uniform; folosește Shape direct pentru membrii specifici unui singur obiect de desen, cum ar fi ImageData.
Cum pot să inserez o imagine cu o dimensiune specifică?
Folosește o suprasarcină DocumentBuilder.InsertImage care acceptă argumente explicite width și height, alături de sursa imaginii (un Image, calea fișierului, Stream sau un tablou de octeți).
Cum pot să fac o formă să plutească în loc să stea în linie cu textul?
Setează WrapType la o valoare non-inline și setează RelativeHorizontalPosition / RelativeVerticalPosition astfel încât decalajele Left/Top să fie interpretate relativ la pagină, margine sau coloană.
Poate un document să aibă simultan un filigran de text și unul de imagine?
Nr. Document.Watermark.Type raportează tipul filigranei curente; apelarea SetText sau SetImage din nou înlocuiește orice filigran care fusese setat anterior.
Cum pot elimina o umbră sau o reflexie de pe o formă?
Apelă Remove() pe obiectul de formatare corespunzător — Shape.ShadowFormat.Remove() sau Shape.Reflection.Remove().