Jak přidat kreslicí tvary do dokumentů Word v .NET
Tento průvodce ukazuje, jak přidat obsah do kreslicí vrstvy dokumentu Word pomocí Aspose.Words FOSS pro .NET: vložení AutoShape, přidání obrázku, jeho umístění a obtékání textem, vyplnění a stylizaci, seskupení několika tvarů a nastavení vodoznaku. Aspose.Words FOSS pro .NET je k dispozici prostřednictvím NuGet nebo sestavením ze zdrojového kódu.
Průvodce krok za krokem
Krok 1: Získání knihovny
Naklonujte repozitář a sestavte Aspose.Words.sln v konfiguraci Release, pak přidejte odkaz na projekt do Aspose.Words.csproj z vašeho vlastního projektu .NET, jak je popsáno v Instalační příručka. Přidejte using Aspose.Words; and using Aspose.Words.Drawing; na začátku libovolného souboru, který pracuje s tvary.
Krok 2: Přidat AutoShape
Vytvořte tvar přímo pomocí new Shape(doc, shapeType), kde shapeType je hodnota ShapeType, například Rectangle, Ellipse, Star nebo TextBox, a poté jej vložte do stromu pomocí DocumentBuilder.InsertNode(node). Shape je konkrétní, uzavřená třída, kterou vytváříte a konfigurujete; dědí z abstraktní ShapeBase, která definuje pozici (Left, Top, Width, Height, Rotation) a podobjekty formátování (Fill, Stroke, ShadowFormat, Glow, Reflection) sdílené s GroupShape.
Krok 3: Přidat obrázek
DocumentBuilder.InsertImage je přímá cesta pro obrázky: přetížení přijímají Image, cestu k souboru, Stream nebo surové pole bajtů, s dalšími přetíženími, která berou explicitní width/height nebo úplné argumenty pro umístění (horzPos, left, vertPos, top, width, height, wrapType). Vlastnost ImageData výsledného Shape obsahuje data obrázku — zavolejte ImageData.SetImage(...) pro výměnu obrázku a použijte CropTop/CropBottom/CropLeft/CropRight, Brightness, Contrast a GrayScale pro základní úpravy.
Krok 4: Umístit tvar a obtéct text
Inline tvar (výchozí výsledek InsertImage) se zobrazuje spolu s okolním textem a ignoruje vlastnosti umístění, dokud se neplave — zkontrolujte IsInline, abyste potvrdili, v jakém režimu se tvar nachází. Pro plavání tvaru nastavte WrapType na hodnotu, která není inline, a nastavte RelativeHorizontalPosition / RelativeVerticalPosition (každý relativně k Page, Margin, Column nebo podobnému ukotvení) společně s offsety Left/Top. WrapSide řídí obtečení specifické pro stranu a HorizontalAlignment / VerticalAlignment zajišťují jednoduché relativní zarovnání místo explicitních offsetů.
Krok 5: Vyplnit a stylizovat tvar
Shape.Fill (objekt Fill) maluje vnitřek tvaru: 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ý je aktuálně aktivní. Obrys pochází z vlastnosti Stroke. Pro efekty ShadowFormat, Glow (GlowFormat), Reflection (ReflectionFormat) a SoftEdge (SoftEdgeFormat) každá odhaluje svá vlastní nastavení a metodu Remove(), která efekt vymaže zpět na žádný.
Krok 6: Seskupit více tvarů
Sloučte několik tvarů do jedné jednotky pomocí DocumentBuilder.InsertGroupShape(shapes), který vrací GroupShape. GroupShape je sám o sobě ShapeBase, takže nese své vlastní Fill, ShadowFormat, Glow a Reflection, které se vztahují na celou skupinu; pohybujte nebo měňte velikost GroupShape místo jeho jednotlivých potomků, aby transformace souřadnic skupiny zůstala konzistentní. Pro tvar, který nese text, Shape.TextBox (objekt TextBox) řídí odsazení (InternalMarginLeft/Right/Top/Bottom), automatické změny velikosti (FitShapeToText), směr textu (LayoutFlow) a vertikální zarovnání (VerticalAnchor).
Krok 7: Přidat vodoznak
Document.Watermark spravuje jediný vodoznak platný pro celý dokument, nezávislý na jakémkoli tvaru, který jste vložili ručně. Zavolejte Watermark.SetText(text) nebo SetText(text, options) pro textový vodoznak, nebo SetImage(...) pro obrázkový vodoznak; Watermark.Remove() jej vymaže a Watermark.Type hlásí aktuální WatermarkType (Text, Image nebo None). TextWatermarkOptions nastavuje FontFamily, FontSize, Color a Layout (WatermarkLayout.Horizontal nebo Diagonal); ImageWatermarkOptions nastavuje Scale a IsWashout.
Běžné problémy a opravy
Setting Left/Top na tvaru nemá žádný viditelný efekt. Tvar je stále inlineIsInline == true). Nastavit WrapType na plovoucí hodnotu a nastavit RelativeHorizontalPosition/RelativeVerticalPosition aby se projevily vlastnosti offsetu.
Shape.ImageData vyhazuje nebo nevrací nic. Tvar není obrázkový tvar. Zkontrolujte Shape.HasImage před čtením ImageData.
Dětské tvary skupiny se nepohybují společně. Děti byly přemístěny jednotlivě místo přes skupinu. Přesuňte nebo změňte velikost the GroupShape sám, takže jeho transformace souřadnic se vztahuje na každé podřízené.
Vodoznakový text nepoužívá požadované písmo. Ne TextWatermarkOptions byl předán. Zavolejte Watermark.SetText(text, options) s TextWatermarkOptions instance, jejíž FontFamily je nastaveno.
Často kladené otázky
Jaký je rozdíl mezi Shape a ShapeBase?
ShapeBase je abstraktní základní třída sdílená mezi Shape a GroupShape. Pište kód vůči ShapeBase, když má jednotně zpracovávat oba typy; použijte Shape přímo pro členy specifické pro jeden kreslicí objekt, jako je ImageData.
Jak vložit obrázek s konkrétní velikostí?
Použijte přetížení DocumentBuilder.InsertImage, které přijímá explicitní argumenty width a height, spolu se zdrojem obrázku ( Image, cesta k souboru, Stream nebo pole bajtů).
Jak nastavit, aby se tvar vznášel místo aby byl vložen inline s textem?
Nastavte jeho WrapType na hodnotu, která není inline, a nastavte RelativeHorizontalPosition / RelativeVerticalPosition, aby se offsety Left/Top interpretovaly relativně k stránce, okraji nebo sloupci.
Může dokument mít najednou textový i obrázkový vodoznak?
Číslo Document.Watermark.Type hlásí aktuální typ vodoznaku; volání SetText nebo SetImage znovu nahradí jakýkoli dříve nastavený vodoznak.
Jak mohu odstranit stín nebo odraz z tvaru?
Zavolejte Remove() na příslušném objektu formátování — Shape.ShadowFormat.Remove() nebo Shape.Reflection.Remove().