Alakzatok és vízjelek rajzolása
Alakzatok rajzolása és vízjelek
Word-dokumentumok a AutoShapes, képeket, szövegdobozokat és OLE-objektumokat egy külön rajzrétegre helyezik, amely elkülönül a bekezdés/futam szövegáramlásától. Aspose.Words FOSS a .NET számára ezt a réteget a Shape osztállyal (konkrét rajzobjektumok) és annak absztrakt bázisával, a ShapeBase, modellezi, amelyek mind a Aspose.Words.Drawing névtér részei. Ez az útmutató a alakzatiemodellt, képek és AutoShapes beszúrását, a pozicionálást és körbefuttatást, kitöltéseket és hatásokat, csoportosítást, valamint a vízjeleket tárgyalja.
Az alakzat és a ShapeBase modell
Shape — lezárt, és közvetlenül a vele dolgozó típus — egy AutoShape, szövegdobozt, szabadformát, OLE-objektumot, ActiveX vezérlőt vagy képet képvisel a rajzrétegben. A ShapeBase absztrakt osztályból származik, amely minden rajzobjektumra jellemző tulajdonságokat biztosít: pozíció (Left, Top, Width, Height, Rotation), a ShapeType enum érték, valamint formázási alobjektumok, például Fill, Stroke, ShadowFormat, Glow és Reflection. GroupShape (amely szintén egy ShapeBase) egy egységként kezelt alakzategységet jelöl. Egy önálló alakzatot közvetlenül a new Shape(doc, shapeType) segítségével hozhatunk létre, ahol a shapeType egy ShapeType érték, például Rectangle, Ellipse, Star vagy TextBox, majd a DocumentBuilder.InsertNode(node) használatával illeszthető be a fába.
Képek és AutoShapes beszúrása a DocumentBuilder segítségével
Speciálisan a képek esetén a DocumentBuilder.InsertImage közvetlenebb út: a túlterhelések elfogadnak egy Image, egy fájlútvonalat, egy Stream vagy egy nyers bájt tömböt, további túlterhelésekkel, amelyek explicit width/height vagy teljes pozicionálást (horzPos, left, vertPos, top, width, height, wrapType) állítanak be. Az eredményül kapott Shape a képadatot a ImageData tulajdonságon keresztül teszi elérhetővé — ImageData.SetImage(...) a kép cseréjéhez, plusz CropTop/CropBottom/CropLeft/CropRight, Brightness, Contrast, és GrayScale az alapvető módosításokhoz. GroupShape példányok a DocumentBuilder.InsertGroupShape(shapes) segítségével jönnek létre.
Pozicionálás és szöveg körbefuttatása
Az alakzat oldalhoz viszonyított elhelyezése a RelativeHorizontalPosition és a RelativeVerticalPosition szabályozza (mindegyik a Page, Margin, Column vagy hasonló horgonyokhoz viszonyított), valamint a Left/Top eltolás tulajdonságokkal. A HorizontalAlignment és a VerticalAlignment egyszerű relatív igazítást kezelnek. A környező szöveg alakzat körüli elrendezését a WrapType állítja be, és oldalra vonatkozó tördeléshez a WrapSide. A IsInline jelzi, hogy az alakzat a szöveggel együtt folyik (inline) vagy önállóan lebeg.
Kitöltések, vonalstílusok és effektusok
Shape.Fill (egy Fill objektum) szabályozza, hogy hogyan festődik az alakzat belseje: Fill.Solid(color) egyszínű színhez, Fill.OneColorGradient(...)/Fill.TwoColorGradient(...) színátmenetekhez, Fill.Patterned(patternType) mintához, és Fill.SetImage(...) képpel való kitöltéshez; FillType jelzi, melyik van aktív. A körvonal a Stroke tulajdonsággal szabályozható, és a vizuális effektusok külön formázási objektumként érhetők el — ShadowFormat, Glow (GlowFormat), Reflection (ReflectionFormat), és SoftEdge (SoftEdgeFormat) — mindegyik saját Remove() módszerrel törölhető.
Alakzatok és szövegdobozok csoportosítása
Több alakzat összevonható egy GroupShape-ba, amely maga is egyetlen ShapeBase-ként viselkedik, saját Fill, ShadowFormat, Glow és Reflection tulajdonságokkal. Szöveget tartalmazó alakzatra a Shape.TextBox (egy TextBox objektum) szövegspecifikus elrendezést tesz elérhetővé: InternalMarginLeft/Right/Top/Bottom a belső margóhoz, FitShapeToText az automatikus méretezéshez, LayoutFlow a szöveg irányához, és VerticalAnchor a függőleges szövegigazításhoz az alakzaton belül.
Watermarks
Document.Watermark (egy Watermark objektum) kezeli a dokumentum egészére kiterjedő vízjelet, amely független bármely egyedi alakzattól. Hívja a Watermark.SetText(text) vagy SetText(text, options) parancsot szöveges vízjelhez, vagy a SetImage(...) képes vízjelhez, és a Watermark.Remove() törli azt. Watermark.Type jelzi a jelenlegi WatermarkType (Text, Image vagy None). TextWatermarkOptions szabályozza a FontFamily, FontSize, Color és Layout (WatermarkLayout.Horizontal vagy Diagonal) beállításait; ImageWatermarkOptions a Scale és IsWashout értékeket kezeli.
Tippek és bevált gyakorlatok
- Használd a
ShapeBase-t, amikor olyan kódot írsz, amely egyetlenShapeésGroupShapepéldányon egyaránt működik; alkalmazd közvetlenül aShape-t, ha kép- vagy AutoShape-specifikus tagokra van szükséged, például aImageDatavagy aChart. - Állítsd be a
RelativeHorizontalPosition/RelativeVerticalPositionértékeket aWrapType-vel együtt, amikor egy alakzatot lebegővé teszel – egy beágyazott alakzat (aInsertImagealapértelmezett beállítása) figyelmen kívül hagyja a pozicionálási tulajdonságokat, amíg nem teszed lebegővé. - Válaszd inkább a
Document.Watermark-t egy dokumentumkiterjedő vízjelhez, ahelyett, hogy manuálisan beillesztenéd és pozícionálnád aShape-t a szöveg mögé. - Töröld a hatást az objektum
Remove()metódusával (ShadowFormat.Remove(),ReflectionFormat.Remove()), ahelyett, hogy az egyes tulajdonságokat nullára állítanád. - Ellenőrizd a
Shape.HasImage,Shape.HasChartvagyShape.IsGroupértékét, mielőtt aImageData,Chartvagy csoportspecifikus tagokhoz férnél hozzá, mivel egyShapetöbbféle rajzobjektumot is képviselhet.
Gyakori problémák
| Probléma | Oka | Javítás |
|---|---|---|
A Left/Top alkalmazása egy alakzaton nem eredményez látható változást | Az alakzat még mindig inline (IsInline == true) | Adjon WrapType lebegő értéket, és állítsa be RelativeHorizontalPosition/RelativeVerticalPosition értékeket, hogy a pozicionálási tulajdonságok érvénybe lépjenek |
Shape.ImageData kivételt dob, vagy üres | Az alakzat nem képalakzat | Ellenőrizze a Shape.HasImage értékét, mielőtt olvasná a ImageData. |
| A vízjel szövege nem egyezik a kért betűtípussal. | Nem került megadásra TextWatermarkOptions. | Adjon át egy TextWatermarkOptions példányt, ahol a FontFamily Watermark.SetText(text, options) értékre van állítva. |
| Egy csoport gyermek alakjai nem mozognak együtt. | A gyermekek közvetlenül lettek áthelyezve a csoporton keresztül történő áthelyezés helyett. | Mozgassa vagy méretezze át a GroupShape elemet, hogy koordináta-transzformációja minden gyermekre érvényesüljön. |
FAQ
Mi a különbség a Shape és a ShapeBase között?
ShapeBase az absztrakt alaposztály, amelyet a Shape és a GroupShape közösen használnak. Használja a ShapeBase-t olyan kódban, amely egységesen kezeli a két típust; használja a Shape-t, ha egyetlen rajzobjektumra jellemző tagokra van szükség, például a ImageData vagy a Chart esetében.
Hogyan adhatok hozzá egy képet egy dokumentumhoz?
Használjon egyet a DocumentBuilder.InsertImage túlterhelései közül – adjon át egy Image-t, egy fájl útvonalát, egy Stream-t vagy egy bájt tömböt, opcionálisan width/height vagy teljes pozicionálási argumentumokkal.
Hogyan tehetem úgy, hogy egy alakzat úszó legyen a szöveggel egy sorban elhelyezkedése helyett?
Állítsa be a WrapType nem sorban lévő értékre, majd a RelativeHorizontalPosition/RelativeVerticalPosition úgy, hogy az alakzat Left/Top eltolásait az oldal, margó vagy oszlop szerint értelmezzék.
Hozzáadhatok egyszerre szöveges és képes vízjelet?
Document.Watermark.Type a jelenlegi vízjel típusát tükrözi; új vízjel beállítása a SetText vagy a SetImage segítségével felülírja a korábbit, így egy dokumentumnak egyszerre legfeljebb egy aktív vízjele lehet.
Hogyan távolíthatok el árnyékot vagy tükröződést egy alakzatról?
Hívja meg a(z) Remove() a megfelelő formázó objektumon – Shape.ShadowFormat.Remove() vagy Shape.Reflection.Remove().
API Reference összefoglaló
| Osztály/Módszer | Leírás |
|---|---|
Shape | Egyetlen rajzréteg-objektum — AutoShape, kép, szövegdoboz vagy OLE-objektum. |
ShapeBase | Absztrakt alaposztály, amelyet a Shape és a GroupShape közösen használnak. |
GroupShape | Alakzatok csoportja, amelyet egyetlen rajzobjektumként kezelnek. |
DocumentBuilder.InsertImage | Beszúr egy kép alakzatot a kurzor helyére, opcionális mérettel és pozicionálással. |
ImageData | A kép adatai és a képszerkesztések (vágás, fényerő, kontraszt) egy Shape esetén. |
Fill | Belső kitöltés formázása – egysíkú, színátmenetes, minta vagy kép. |
RelativeHorizontalPosition / RelativeVerticalPosition | Az a referencia, amelyhez a lebegő alakzat pozíciója viszonyítva van. |
WrapType / WrapSide | Hogyan csomagolja be a környező szöveg az alakzatot. |
TextBox | Szövegelrendezési beállítások egy szöveget tartalmazó alakzatra. |
Document.Watermark | Kezeli a dokumentum szöveges vagy képes vízjelét. |
TextWatermarkOptions / ImageWatermarkOptions | Állítsa be a szöveges vagy képes vízjel megjelenését. |