Kreslení tvarů a vodoznaků

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, tak GroupShape instance; použijte Shape přímo, když potřebujete členy specifické pro obrázek nebo AutoShape, jako jsou ImageData nebo Chart.
  • Nastavte RelativeHorizontalPosition / RelativeVerticalPosition společně s WrapType, když plaváte (umísťujete) tvar — vložený tvar (výchozí pro InsertImage) ignoruje vlastnosti umístění, dokud ho neuděláte plovoucím.
  • Upřednostněte Document.Watermark pro jednorázový vodoznak na úrovni celého dokumentu místo ručního vložení a umístění Shape za text.
  • Vymažte efekt pomocí metody Remove() objektu (ShadowFormat.Remove(), ReflectionFormat.Remove()) místo nastavení jednotlivých vlastností na nulu.
  • Zkontrolujte Shape.HasImage, Shape.HasChart nebo Shape.IsGroup před přístupem k ImageData, Chart nebo členům specifickým pro skupinu, protože Shape může představovat kterýkoli z několika typů kreslicích objektů.

Časté problémy

ProblémPříčinaOprava
Nastavení Left/Top na tvaru nemá žádný viditelný efektTvar 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ý tvarZkontrolujte Shape.HasImage před čtením ImageData
Text vodoznaku neodpovídá požadovanému fontuNebyl poskytnut TextWatermarkOptionsPř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 skupinuPř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/MetodaPopis:
ShapeJedno objekt kreslicí vrstvy — AutoShape, obrázek, textové pole nebo objekt OLE.
ShapeBaseAbstraktní základní třída sdílená Shape a GroupShape.
GroupShapeSkupina tvarů považovaná za jeden kreslicí objekt.
DocumentBuilder.InsertImageVloží tvar obrázku na pozici kurzoru, s volitelnou velikostí a umístěním.
ImageDataData obrázku a úpravy obrazu (ořez, jas, kontrast) na Shape.
FillFormátování výplně — plná, gradientní, vzorová nebo obrázková.
RelativeHorizontalPosition / RelativeVerticalPositionK čemu je měřena pozice plovoucího tvaru.
WrapType / WrapSideJak se okolní text obtéká kolem tvaru.
TextBoxNastavení rozvržení textu pro tvar, který obsahuje text.
Document.WatermarkSpravuje textový nebo obrázkový vodoznak dokumentu.
TextWatermarkOptions / ImageWatermarkOptionsNastavte vzhled textového nebo obrázkového vodoznaku.

Viz také:

 Čeština