Kreslení tvarů a vodoznaků
Kreslení tvarů a vodoznaků
Dokumenty Word uchovávají AutoShapes, obrázky, textová pole a OLE objekty v samostatné kreslicí vrstvě, oddělené od toku textu odstavce/úseku. Aspose.Words FOSS pro .NET modeluje tuto vrstvu pomocí třídy Shape (konkrétní kreslicí objekty) a jejího abstract ShapeBase, oba součástí jmenného prostoru Aspose.Words.Drawing. Tento průvodce pokrývá model tvarů, vkládání obrázků a AutoShapes, umístění a obtékání, výplně a efekty, seskupování a vodoznaky.
Model Shape a ShapeBase
Shape — sealed a typ, se kterým pracujete přímo — představuje AutoShape, textové pole, volný tvar, OLE objekt, ActiveX ovládací prvek nebo obrázek v kreslicí vrstvě. Dědí z abstract ShapeBase, který poskytuje vlastnosti sdílené všemi kreslicími objekty: pozice (Left, Top, Width, Height, Rotation), hodnotu enum ShapeType a podobjekty formátování jako Fill, Stroke, ShadowFormat, Glow a Reflection. GroupShape (také ShapeBase) představuje skupinu tvarů považovanou za jednu jednotku. Vytvořte samostatný tvar přímo pomocí new Shape(doc, shapeType), kde shapeType je hodnota ShapeType jako Rectangle, Ellipse, Star nebo TextBox, a poté jej vložte do stromu pomocí DocumentBuilder.InsertNode(node).
Vkládání obrázků a AutoShapes pomocí DocumentBuilder
Pro obrázky konkrétně, DocumentBuilder.InsertImage je přímější cesta: přetížení přijímají Image, cestu k souboru, Stream nebo surové pole bajtů, s dalšími přetíženími, která nastavují explicitní width/height nebo úplné umístění (horzPos, left, vertPos, top, width, height, wrapType). Výsledný Shape zpřístupňuje svá data obrázku prostřednictvím vlastnosti ImageData — ImageData.SetImage(...) pro nahrazení obrázku, plus CropTop/CropBottom/CropLeft/CropRight, Brightness, Contrast a GrayScale pro základní úpravy. Instance GroupShape jsou vytvořeny pomocí DocumentBuilder.InsertGroupShape(shapes).
Umístění a obtékání textu
Umístění tvaru relativně k stránce řídí RelativeHorizontalPosition a RelativeVerticalPosition (každý relativně k Page, Margin, Column nebo podobným kotevním bodům), spolu s vlastnostmi odsazení Left/Top. HorizontalAlignment a VerticalAlignment zajišťují jednoduché relativní zarovnání. Jak se okolní text obtéká kolem tvaru se nastavuje pomocí WrapType a pro obalení specifické pro stranu pomocí WrapSide. IsInline uvádí, zda se tvar pohybuje s textem (inline) nebo plave nezávisle.
Výplně, obrysy a efekty
Shape.Fill (objekt Fill) řídí, jak je vnitřek tvaru malován: Fill.Solid(color) pro plochou barvu, Fill.OneColorGradient(...) / Fill.TwoColorGradient(...) pro přechody, Fill.Patterned(patternType) pro vzor a Fill.SetImage(...) pro výplň obrázkem; FillType uvádí, který z nich je aktivní. Obrys je řízen pomocí vlastnosti Stroke a vizuální efekty jsou vystaveny jako samostatné formátovací objekty — ShadowFormat, Glow (GlowFormat), Reflection (ReflectionFormat) a SoftEdge (SoftEdgeFormat) — každá s vlastní metodou Remove() pro vymazání efektu.
Seskupování tvarů a textových polí
Více tvarů lze sloučit do GroupShape, který se sám chová jako jeden ShapeBase s vlastními Fill, ShadowFormat, Glow a Reflection. Pro tvar, který obsahuje text, Shape.TextBox (objekt TextBox) poskytuje specifické rozvržení textu: InternalMarginLeft/Right/Top/Bottom pro odsazení, FitShapeToText pro automatickou velikost tvaru, LayoutFlow pro směr textu a VerticalAnchor pro svislé zarovnání textu uvnitř tvaru.
Watermarks
Document.Watermark (objekt Watermark) spravuje celodokumentový vodoznak nezávislý na jakémkoli jednotlivém tvaru. Zavolejte Watermark.SetText(text) nebo SetText(text, options) pro textový vodoznak, nebo SetImage(...) pro obrázkový vodoznak, a Watermark.Remove() pro jeho odstranění. Watermark.Type uvádí aktuální WatermarkType (Text, Image nebo None). TextWatermarkOptions řídí FontFamily, FontSize, Color a Layout (WatermarkLayout.Horizontal nebo Diagonal); ImageWatermarkOptions řídí Scale a IsWashout.
Tipy a osvědčené postupy
- Použijte
ShapeBase, když píšete kód, který má fungovat jak pro jednotlivéShape, takGroupShapeinstance; použijteShapepřímo, když potřebujete členy specifické pro obrázek nebo AutoShape, jako jsouImageDataneboChart. - Nastavte
RelativeHorizontalPosition/RelativeVerticalPositionspolečně sWrapType, když plaváte (umísťujete) tvar — vložený tvar (výchozí proInsertImage) ignoruje vlastnosti umístění, dokud ho neuděláte plovoucím. - Upřednostněte
Document.Watermarkpro jednorázový vodoznak na úrovni celého dokumentu místo ručního vložení a umístěníShapeza text. - Vymažte efekt pomocí metody
Remove()objektu (ShadowFormat.Remove(),ReflectionFormat.Remove()) místo nastavení jednotlivých vlastností na nulu. - Zkontrolujte
Shape.HasImage,Shape.HasChartneboShape.IsGrouppřed přístupem kImageData,Chartnebo členům specifickým pro skupinu, protožeShapemůže představovat kterýkoli z několika typů kreslicích objektů.
Časté problémy
| Problém | Příčina | Oprava |
|---|---|---|
Nastavení Left/Top na tvaru nemá žádný viditelný efekt | Tvar je stále inline (IsInline == true) | Nastavte WrapType na plovoucí hodnotu a nastavte RelativeHorizontalPosition/RelativeVerticalPosition, aby se projevily vlastnosti umístění |
Shape.ImageData vyvolává výjimku nebo je prázdný | Tvar není obrázkový tvar | Zkontrolujte Shape.HasImage před čtením ImageData |
| Text vodoznaku neodpovídá požadovanému fontu | Nebyl poskytnut TextWatermarkOptions | Předávejte instanci TextWatermarkOptions s FontFamily nastaveným na Watermark.SetText(text, options) |
| Podřízené tvary skupiny se nepohybuje společně | Podřízené byly přesunuty přímo místo přes skupinu | Přesuňte nebo změňte velikost samotného GroupShape, aby se jeho souřadnicová transformace aplikovala na všechny podřízené |
FAQ
Jaký je rozdíl mezi Shape a ShapeBase?
ShapeBase je abstraktní základní třída sdílená mezi Shape a GroupShape. Použijte ShapeBase v kódu, který má jednotně zpracovávat oba typy; použijte Shape, když potřebujete členy specifické pro jediný objekt kresby, jako jsou ImageData nebo Chart.
Jak přidám obrázek do dokumentu?
Použijte jednu z přetížení DocumentBuilder.InsertImage — předávejte Image, cestu k souboru, Stream nebo pole bajtů, volitelně s width/height nebo s úplnými argumenty pro umístění.
Jak mohu nastavit, aby se tvar vznášel místo aby byl vložený do textu?
Nastavte jeho WrapType na hodnotu, která není inline, a nastavte RelativeHorizontalPosition/RelativeVerticalPosition, aby posuny Left/Top tvaru byly interpretovány relativně k stránce, okraji nebo sloupci.
Mohu přidat jak textový, tak obrázkový vodoznak?
Document.Watermark.Type odráží aktuální typ vodoznaku; nastavení nového vodoznaku pomocí SetText nebo SetImage nahradí to, co tam bylo předtím, takže dokument může mít najednou nejvýše jeden aktivní vodoznak.
Jak odstraním stín nebo odraz z tvaru?
Zavolejte Remove() na odpovídajícím formátovacím objektu — Shape.ShadowFormat.Remove() nebo Shape.Reflection.Remove().
Shrnutí API Reference
| Třída/Metoda | Popis: |
|---|---|
Shape | Jedno objekt kreslicí vrstvy — AutoShape, obrázek, textové pole nebo objekt OLE. |
ShapeBase | Abstraktní základní třída sdílená Shape a GroupShape. |
GroupShape | Skupina tvarů považovaná za jeden kreslicí objekt. |
DocumentBuilder.InsertImage | Vloží tvar obrázku na pozici kurzoru, s volitelnou velikostí a umístěním. |
ImageData | Data obrázku a úpravy obrazu (ořez, jas, kontrast) na Shape. |
Fill | Formátování výplně — plná, gradientní, vzorová nebo obrázková. |
RelativeHorizontalPosition / RelativeVerticalPosition | K čemu je měřena pozice plovoucího tvaru. |
WrapType / WrapSide | Jak se okolní text obtéká kolem tvaru. |
TextBox | Nastavení rozvržení textu pro tvar, který obsahuje text. |
Document.Watermark | Spravuje textový nebo obrázkový vodoznak dokumentu. |
TextWatermarkOptions / ImageWatermarkOptions | Nastavte vzhled textového nebo obrázkového vodoznaku. |