Rita former och vattenstämplar
Rita former och vattenmärken
Word-dokument behåller AutoShapes, bilder, textrutor och OLE-objekt i ett separat ritlager, skilt från stycke-/körtextflödet. Aspose.Words FOSS för .NET modellerar detta lager med Shape-klassen (konkreta ritobjekt) och dess abstrakta bas ShapeBase, båda en del av Aspose.Words.Drawing-namnutrymmet. Denna guide täcker formmodellen, infogning av bilder och AutoShapes, positionering och omslag, fyllningar och effekter, gruppering och vattenmärken.
Formen och ShapeBase modellen
Shape — förseglad, och den typ du arbetar med direkt — representerar en AutoShape, textruta, fri form, OLE-objekt, ActiveX kontroll eller bild i ritlagret. Den ärver från den abstrakta ShapeBase, som tillhandahåller de egenskaper som delas av varje ritobjekt: position (Left, Top, Width, Height, Rotation), ShapeType-enumvärdet, och formateringsdelobjekt såsom Fill, Stroke, ShadowFormat, Glow och Reflection. GroupShape (även en ShapeBase) representerar en grupp former som behandlas som en enhet. Skapa en fristående form direkt med new Shape(doc, shapeType), där shapeType är ett ShapeType-värde såsom Rectangle, Ellipse, Star eller TextBox, och infoga sedan den i trädet med DocumentBuilder.InsertNode(node).
Infoga bilder och AutoShapes med DocumentBuilder
För bilder specifikt är DocumentBuilder.InsertImage den mer direkta vägen: överlagringar accepterar en Image, en filsökväg, en Stream eller en rå byte-array, med ytterligare överlagringar som ställer in explicit width/height eller full positionering (horzPos, left, vertPos, top, width, height, wrapType). Det resulterande Shape exponerar sin bilddata via egenskapen ImageData — ImageData.SetImage(...) för att ersätta bilden, samt CropTop/CropBottom/CropLeft/CropRight, Brightness, Contrast och GrayScale för grundläggande justeringar. GroupShape-instanser skapas med DocumentBuilder.InsertGroupShape(shapes).
Positionering och textomslag
En formens placering i förhållande till sidan styrs av RelativeHorizontalPosition och RelativeVerticalPosition (varje relativt Page, Margin, Column eller liknande ankare), tillsammans med Left/Top förskjutningsegenskaper. HorizontalAlignment och VerticalAlignment hanterar enkel relativ justering. Hur omgivande text flödar runt formen ställs in med WrapType och, för sid-specifik omslagning, WrapSide. IsInline rapporterar om formen flödar med texten (inline) eller flyter oberoende.
Fyllningar, konturer och effekter
Shape.Fill (ett Fill objekt) styr hur formens inre målas: Fill.Solid(color) för en enhetlig färg, Fill.OneColorGradient(...) / Fill.TwoColorGradient(...) för gradienter, Fill.Patterned(patternType) för ett mönster, och Fill.SetImage(...) för en bildfyllning; FillType rapporterar vilken av dessa som är aktiv. Konturen styrs via egenskapen Stroke, och visuella effekter exponeras som separata formateringsobjekt — ShadowFormat, Glow (GlowFormat), Reflection (ReflectionFormat), och SoftEdge (SoftEdgeFormat) — var och en med sin egen Remove() metod för att rensa effekten.
Gruppering av former och textrutor
Flera former kan kombineras till en GroupShape, som själv beter sig som en enda ShapeBase med sina egna Fill, ShadowFormat, Glow och Reflection. För en form som innehåller text, Shape.TextBox (ett TextBox objekt) exponerar textspecifik layout: InternalMarginLeft/Right/Top/Bottom för utfyllnad, FitShapeToText för automatisk storleksanpassning av formen, LayoutFlow för textriktning, och VerticalAnchor för vertikal textjustering inom formen.
Watermarks
Document.Watermark (ett Watermark objekt) hanterar en dokumentomfattande vattenstämpel oberoende av någon enskild form. Anropa Watermark.SetText(text) eller SetText(text, options) för en textvattenstämpel, eller SetImage(...) för en bildvattenstämpel, och Watermark.Remove() för att rensa den. Watermark.Type rapporterar den aktuella WatermarkType (Text, Image eller None). TextWatermarkOptions styr FontFamily, FontSize, Color och Layout (WatermarkLayout.Horizontal eller Diagonal); ImageWatermarkOptions styr Scale och IsWashout.
Tips och bästa praxis
- Använd
ShapeBasenär du skriver kod som ska fungera för både enskildaShapeochGroupShapeinstanser; användShapedirekt när du behöver bild- eller AutoShape-specifika medlemmar somImageDataellerChart. - Ställ in
RelativeHorizontalPosition/RelativeVerticalPositiontillsammans medWrapTypenär du flyttar en form — en inline-form (standard förInsertImage) ignorerar positioneringsegenskaper tills du får den att flyta. - Föredra
Document.Watermarkför ett enda dokumentomfattande vattenmärke istället för att manuellt infoga och placera enShapebakom texten. - Rensa en effekt med objektets
Remove()-metod (ShadowFormat.Remove(),ReflectionFormat.Remove()) istället för att sätta enskilda egenskaper till noll. - Kontrollera
Shape.HasImage,Shape.HasChartellerShape.IsGroupinnan du får åtkomst tillImageData,Charteller gruppspecifika medlemmar, eftersom enShapekan representera någon av flera typer av ritobjekt.
Vanliga problem
| Problem | Orsak | Åtgärd |
|---|---|---|
Att ange Left/Top på en form har ingen synlig effekt | Formen är fortfarande inline (IsInline == true) | Ställ in WrapType till ett flytande värde och ange RelativeHorizontalPosition/RelativeVerticalPosition så att placeringsegenskaperna får effekt |
Shape.ImageData kastar eller är tom | Formen är inte en bildform | Kontrollera Shape.HasImage innan du läser ImageData |
| Vattenstämpelns text matchar inte den begärda typsnittet | Ingen TextWatermarkOptions angavs | Skicka en TextWatermarkOptions-instans med FontFamily satt till Watermark.SetText(text, options) |
| Barnformerna i en grupp rör sig inte tillsammans | Barnen omplacerades direkt istället för via gruppen | Flytta eller ändra storleken på GroupShape själv så att dess koordinattransformering gäller för alla barn |
FAQ
Vad är skillnaden mellan Shape och ShapeBase?
ShapeBase är den abstrakta basklassen som delas av Shape och GroupShape. Använd ShapeBase i kod som ska hantera båda typerna enhetligt; använd Shape när du behöver medlemmar som är specifika för ett enskilt ritobjekt, såsom ImageData eller Chart.
Hur lägger jag till en bild i ett dokument?
Använd en av DocumentBuilder.InsertImage overloads — skicka en Image, en filsökväg, en Stream eller en bytearray, eventuellt med width/height eller fullständiga placeringsargument.
Hur får jag en form att flyta istället för att ligga inline med texten?
Ställ in dess WrapType till ett icke-inline-värde och sätt RelativeHorizontalPosition / RelativeVerticalPosition så att formens Left/Top-offsets tolkas relativt till sidan, marginalen eller kolumnen.
Kan jag lägga till både en text- och en bildvattenstämpel?
Document.Watermark.Type speglar den aktuella vattenstämpeltypen; att ange en ny vattenstämpel med SetText eller SetImage ersätter vad som än fanns tidigare, så ett dokument har som mest en aktiv vattenstämpel åt gången.
Hur tar jag bort en skugga eller reflektion från en form?
Anropa Remove() på det motsvarande formateringsobjektet — Shape.ShadowFormat.Remove() eller Shape.Reflection.Remove().
API Reference Sammanfattning
| Klass/Metod | Beskrivning |
|---|---|
Shape | Ett enda ritningslagerobjekt — AutoShape, bild, textruta eller OLE-objekt. |
ShapeBase | Abstrakt basklass som delas av Shape och GroupShape. |
GroupShape | En grupp former som behandlas som ett ritningsobjekt. |
DocumentBuilder.InsertImage | Infogar en bildform vid markören, med valfri storlek och placering. |
ImageData | Bilddata och bildjusteringar (beskärning, ljusstyrka, kontrast) på en Shape. |
Fill | Formatering för innermaterial – solid, gradient, mönster eller bild. |
RelativeHorizontalPosition / RelativeVerticalPosition | Vad en svävande formes position mäts i förhållande till. |
WrapType / WrapSide | Hur omgivande text flödar runt en form. |
TextBox | Inställningar för textlayout för en form som innehåller text. |
Document.Watermark | Hantera dokumentets text- eller bildvattenstämpel. |
TextWatermarkOptions / ImageWatermarkOptions | Konfigurera utseendet för en text- eller bildvattenstämpel. |