Desenarea formelor și a semnelor de apă
Desenarea formelor și semnelor de apă
Documentele Word păstrează AutoShapes, imagini, casete de text și obiecte OLE într-un strat de desen separat, distinct de fluxul de text al paragrafelor/execuțiilor. Aspose.Words FOSS pentru .NET modelează acest strat cu clasa Shape (obiecte de desen concrete) și baza sa abstractă ShapeBase, ambele parte a spațiului de nume Aspose.Words.Drawing. Acest ghid acoperă modelul de formă, inserarea de imagini și AutoShapes, poziționarea și încadrarea, umpleri și efecte, gruparea și semnele de apă.
Modelul Shape și ShapeBase
Shape — sigilat și tipul cu care lucrați direct — reprezintă un AutoShape, casetă de text, formă liberă, obiect OLE, control ActiveX sau imagine în stratul de desen. Derivează din ShapeBase abstract, care furnizează proprietățile comune fiecărui obiect de desen: poziție (Left, Top, Width, Height, Rotation), valoarea enum ShapeType și sub-obiecte de formatare precum Fill, Stroke, ShadowFormat, Glow și Reflection. GroupShape (de asemenea un ShapeBase) reprezintă un grup de forme tratate ca o singură unitate. Construiți o formă independentă 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).
Inserarea imaginilor și AutoShapes cu DocumentBuilder
Pentru imagini în mod specific, DocumentBuilder.InsertImage este calea mai directă: suprasarcinile acceptă un Image, o cale de fișier, un Stream sau un tablou brut de octeți, cu alte suprasarcini care setează explicit width/height sau poziționare completă (horzPos, left, vertPos, top, width, height, wrapType). Shape rezultat expune datele imaginii prin proprietatea ImageData — ImageData.SetImage(...) pentru a înlocui imaginea, plus CropTop/CropBottom/CropLeft/CropRight, Brightness, Contrast și GrayScale pentru ajustări de bază. Instanțele GroupShape sunt create cu DocumentBuilder.InsertGroupShape(shapes).
Poziționare și încadrare a textului
Poziționarea unei forme în raport cu pagina este controlată de RelativeHorizontalPosition și RelativeVerticalPosition (fiecare relativ la Page, Margin, Column sau ancore similare), împreună cu proprietățile de decalaj Left/Top. HorizontalAlignment și VerticalAlignment gestionează alinierea relativă simplă. Modul în care textul înconjurător curge în jurul formei este setat cu WrapType și, pentru înfășurare specifică pe lateral, WrapSide. IsInline raportează dacă forma curge cu textul (inline) sau plutește independent.
Umpleri, Contururi și Efecte
Shape.Fill (un obiect Fill) controlează modul în care interiorul formei este pictat: Fill.Solid(color) pentru o culoare uniformă, Fill.OneColorGradient(...) / Fill.TwoColorGradient(...) pentru degradeuri, Fill.Patterned(patternType) pentru un model și Fill.SetImage(...) pentru o umplere cu imagine; FillType raportează care dintre acestea este activă. Conturul este controlat prin proprietatea Stroke, iar efectele vizuale sunt expuse ca obiecte de formatare separate — ShadowFormat, Glow (GlowFormat), Reflection (ReflectionFormat) și SoftEdge (SoftEdgeFormat) — fiecare având propria metodă Remove() pentru a șterge efectul.
Gruparea Formelor și a Casetelor de Text
Mai multe forme pot fi combinate într-un GroupShape, care se comportă ca un singur ShapeBase cu propriile sale Fill, ShadowFormat, Glow și Reflection. Pentru o formă care conține text, Shape.TextBox (un obiect TextBox) expune aspectul specific textului: InternalMarginLeft/Right/Top/Bottom pentru spațiere internă, FitShapeToText pentru redimensionarea automată a formei, LayoutFlow pentru direcția textului și VerticalAnchor pentru alinierea verticală a textului în interiorul formei.
Watermarks
Document.Watermark (un obiect Watermark) gestionează un filigran la nivelul întregului document, independent de orice formă individuală. Apelați Watermark.SetText(text) sau SetText(text, options) pentru un filigran text, sau SetImage(...) pentru un filigran imagine, și Watermark.Remove() pentru a-l șterge. Watermark.Type raportează WatermarkType curent (Text, Image sau None). TextWatermarkOptions controlează FontFamily, FontSize, Color și Layout (WatermarkLayout.Horizontal sau Diagonal); ImageWatermarkOptions controlează Scale și IsWashout.
Sfaturi și Cele Mai Bune Practici
- Folosește
ShapeBasecând scrii cod care trebuie să funcționeze atât pentru instanțeShapesimple, cât șiGroupShape; foloseșteShapedirect când ai nevoie de membri specifici pentru imagine sau AutoShape, cum ar fiImageDatasauChart. - Setează
RelativeHorizontalPosition/RelativeVerticalPositionîmpreună cuWrapTypeatunci când plutești o formă — o formă în linie (implicită pentruInsertImage) ignoră proprietățile de poziționare până când o transformi în flotantă. - Preferă
Document.Watermarkpentru o filigrană unică la nivelul întregului document în loc să inserezi și să poziționezi manual unShapeîn spatele textului. - Elimină un efect cu metoda
Remove()a obiectului său (ShadowFormat.Remove(),ReflectionFormat.Remove()) în loc să setezi proprietăți individuale la zero. - Verifică
Shape.HasImage,Shape.HasChartsauShape.IsGroupînainte de a accesaImageData,Chartsau membri specifici grupului, deoarece unShapepoate reprezenta oricare dintre mai multe tipuri de obiecte de desen.
Probleme comune
| Problemă | Cauză | Remediere |
|---|---|---|
Setarea Left/Top pe o formă nu are niciun efect vizibil | Forma este încă în linie (IsInline == true) | Setați WrapType la o valoare flotantă și setați RelativeHorizontalPosition/RelativeVerticalPosition pentru ca proprietățile de poziționare să aibă efect |
Shape.ImageData aruncă sau este gol | Forma nu este o formă imagine | Verificați Shape.HasImage înainte de a citi ImageData |
| Textul de filigran nu corespunde fontului solicitat | Nu a fost furnizat TextWatermarkOptions | Transmiteți o instanță TextWatermarkOptions cu FontFamily setat la Watermark.SetText(text, options) |
| Formele copil ale unui grup nu se mișcă împreună | Copiii au fost repoziționați direct în loc de prin grup | Mutați sau redimensionați GroupShape în sine pentru ca transformarea sa de coordonate să se aplice tuturor copiilor |
FAQ
Care este diferența dintre Shape și ShapeBase?
ShapeBase este clasa de bază abstractă partajată de Shape și GroupShape. Folosește ShapeBase în codul care trebuie să gestioneze ambele tipuri în mod uniform; folosește Shape când ai nevoie de membri specifici unui singur obiect de desen, cum ar fi ImageData sau Chart.
Cum adaug o imagine la un document?
Folosește una dintre suprasarcinile DocumentBuilder.InsertImage — transmite un Image, o cale de fișier, un Stream sau un tablou de octeți, opțional cu width/height sau cu argumente complete de poziționare.
Cum fac ca 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 offset-urile Left/Top ale formei să fie interpretate în raport cu pagina, marginea sau coloana.
Pot adăuga atât un filigran text, cât și unul de imagine?
Document.Watermark.Type reflectă tipul curent de filigran; setarea unui filigran nou cu SetText sau SetImage înlocuiește orice era acolo înainte, astfel încât un document are cel mult un filigran activ la un moment dat.
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().
Rezumat API Reference
| Clasă/Metodă | Descriere: |
|---|---|
Shape | Un singur obiect de strat de desen — AutoShape, imagine, casetă de text sau obiect OLE. |
ShapeBase | Clasă de bază abstractă partajată de Shape și GroupShape. |
GroupShape | Un grup de forme tratat ca un singur obiect de desen. |
DocumentBuilder.InsertImage | Inserează o formă de imagine la cursor, cu dimensiune și poziționare opționale. |
ImageData | Datele imaginii și ajustările imaginii (decupare, luminozitate, contrast) pe un Shape. |
Fill | Formatarea umpluturii interioare — solidă, gradient, model sau imagine. |
RelativeHorizontalPosition / RelativeVerticalPosition | La ce este măsurată poziția unei forme plutitoare. |
WrapType / WrapSide | Cum înfășoară textul înconjurător o formă. |
TextBox | Setări de aspect al textului pentru o formă care conține text. |
Document.Watermark | Gestionează filigranul de text sau imagine al documentului. |
TextWatermarkOptions / ImageWatermarkOptions | Configurează aspectul filigranului de text sau imagine. |