Wie man Zeichenformen zu Word-Dokumenten in .NET hinzufügt
Dieser Leitfaden zeigt, wie man Inhalte zur Zeichenebene eines Word-Dokuments mit Aspose.Words FOSS für .NET hinzufügt: Einfügen eines AutoShape, Hinzufügen eines Bildes, Positionieren und Textumbruch darum, Füllen und Gestalten, Gruppieren mehrerer Formen und Festlegen eines Wasserzeichens. Aspose.Words FOSS für .NET ist über NuGet oder durch Kompilieren aus dem Quellcode verfügbar.
Schritt-für-Schritt-Anleitung
Schritt 1: Bibliothek beziehen
Klonen Sie das Repository und bauen Sie es Aspose.Words.sln in der Release-Konfiguration, dann fügen Sie einen Projektverweis zu Aspose.Words.csproj aus Ihrem eigenen .NET-Projekt, wie im Installationshandbuch. Hinzufügen using Aspose.Words; and using Aspose.Words.Drawing; am Anfang jeder Datei, die mit Formen arbeitet.
Schritt 2: Ein AutoShape hinzufügen
Erstellen Sie eine Form direkt mit new Shape(doc, shapeType), wobei shapeType ein ShapeType-Wert wie Rectangle, Ellipse, Star oder TextBox ist, und fügen Sie sie dann mit DocumentBuilder.InsertNode(node) in den Baum ein. Shape ist die konkrete, versiegelte Klasse, die Sie konstruieren und konfigurieren; sie leitet sich von der abstrakten ShapeBase ab, die Position (Left, Top, Width, Height, Rotation) und Formatierungsunterobjekte (Fill, Stroke, ShadowFormat, Glow, Reflection) definiert, die mit GroupShape gemeinsam genutzt werden.
Schritt 3: Bild hinzufügen
DocumentBuilder.InsertImage ist der direkte Weg für Bilder: Überladungen akzeptieren ein Image, einen Dateipfad, ein Stream oder ein rohes Byte-Array, mit weiteren Überladungen, die explizite width/height oder vollständige Positionsargumente (horzPos, left, vertPos, top, width, height, wrapType) akzeptieren. Die ImageData-Eigenschaft des resultierenden Shape enthält die Bilddaten — rufen Sie ImageData.SetImage(...) auf, um das Bild zu tauschen, und verwenden Sie CropTop/CropBottom/CropLeft/CropRight, Brightness, Contrast und GrayScale für grundlegende Anpassungen.
Schritt 4: Form positionieren und Text umbrechen
Eine Inline-Form (das Standardergebnis von InsertImage) fließt mit dem umgebenden Text und ignoriert Positions-Eigenschaften, bis sie schwebt — prüfen Sie IsInline, um zu bestätigen, in welchem Modus sich eine Form befindet. Um eine Form schweben zu lassen, setzen Sie WrapType auf einen Nicht-Inline-Wert und setzen Sie RelativeHorizontalPosition / RelativeVerticalPosition (jeweils relativ zu Page, Margin, Column oder einem ähnlichen Anker) zusammen mit den Left/Top-Offsets. WrapSide steuert das seitenspezifische Umbrechen, und HorizontalAlignment / VerticalAlignment behandeln einfache relative Ausrichtung anstelle expliziter Offsets.
Schritt 5: Form füllen und gestalten
Shape.Fill (ein Fill-Objekt) malt das Innere der Form: Fill.Solid(color) für eine einfarbige Füllung, Fill.OneColorGradient(...) / Fill.TwoColorGradient(...) für Verläufe, Fill.Patterned(patternType) für ein Muster und Fill.SetImage(...) für eine Bildfüllung — FillType gibt an, welche gerade aktiv ist. Die Kontur stammt aus der Stroke-Eigenschaft. Für Effekte stellen ShadowFormat, Glow (GlowFormat), Reflection (ReflectionFormat) und SoftEdge (SoftEdgeFormat) jeweils eigene Einstellungen bereit und eine Remove()-Methode, die den Effekt zurück auf „keine“ löscht.
Schritt 6: Mehrere Formen gruppieren
Kombinieren Sie mehrere Formen zu einer Einheit mit DocumentBuilder.InsertGroupShape(shapes), das ein GroupShape zurückgibt. GroupShape ist selbst ein ShapeBase, sodass es seine eigenen Fill, ShadowFormat, Glow und Reflection besitzt, die auf die gesamte Gruppe angewendet werden; bewegen oder skalieren Sie das GroupShape anstelle seiner einzelnen Kinder, damit die Koordinatentransformation der Gruppe konsistent bleibt. Für eine Form, die Text enthält, steuert Shape.TextBox (ein TextBox-Objekt) das Padding (InternalMarginLeft/Right/Top/Bottom), die automatische Größenanpassung (FitShapeToText), die Textausrichtung (LayoutFlow) und die vertikale Ausrichtung (VerticalAnchor).
Schritt 7: Wasserzeichen hinzufügen
Document.Watermark verwaltet ein einzelnes, dokumentweites Wasserzeichen, das unabhängig von jeder Form ist, die Sie manuell eingefügt haben. Rufen Sie Watermark.SetText(text) oder SetText(text, options) für ein Text-Wasserzeichen auf, oder SetImage(...) für ein Bild-Wasserzeichen; Watermark.Remove() entfernt es, und Watermark.Type gibt das aktuelle WatermarkType (Text, Image oder None) zurück. TextWatermarkOptions legt FontFamily, FontSize, Color und Layout (WatermarkLayout.Horizontal oder Diagonal) fest; ImageWatermarkOptions legt Scale und IsWashout fest.
Häufige Probleme und Lösungen
Setting Left/Top auf einer Form hat keine sichtbare Auswirkung. Die Form ist immer noch inline (IsInline == true). Setzen WrapType auf einen Gleitkommawert und setze RelativeHorizontalPosition/RelativeVerticalPosition damit die Offset-Eigenschaften wirksam werden.
Shape.ImageData wirft nichts oder gibt nichts zurück. Die Form ist keine Bildform. Prüfen Shape.HasImage vor dem Lesen ImageData.
Die Kindformen einer Gruppe bewegen sich nicht zusammen. Die Kinder wurden einzeln neu positioniert, statt über die Gruppe. Verschieben oder skalieren Sie die GroupShape selbst, sodass seine Koordinatentransformation auf jedes Kind angewendet wird.
Der Wasserzeichen-Text verwendet nicht die angeforderte Schriftart. Nein TextWatermarkOptions wurde übergeben. Aufruf Watermark.SetText(text, options) mit einem TextWatermarkOptions Instanz, deren FontFamily ist gesetzt.
Häufig gestellte Fragen
Was ist der Unterschied zwischen Shape und ShapeBase?
ShapeBase ist die abstrakte Basisklasse, die von Shape und GroupShape gemeinsam genutzt wird. Schreiben Sie Code gegen ShapeBase, wenn er beide Arten einheitlich behandeln soll; verwenden Sie Shape direkt für Mitglieder, die einem einzelnen Zeichenobjekt spezifisch sind, wie zum Beispiel ImageData.
Wie füge ich ein Bild mit einer bestimmten Größe ein?
Verwenden Sie eine DocumentBuilder.InsertImage-Überladung, die explizite width- und height-Argumente akzeptiert, zusammen mit der Bildquelle (ein Image, Dateipfad, Stream oder Byte-Array).
Wie bringe ich eine Form zum Schweben, anstatt sie inline mit dem Text zu platzieren?
Setzen Sie sein WrapType auf einen Nicht-Inline-Wert und setzen Sie RelativeHorizontalPosition / RelativeVerticalPosition, sodass die Left/Top-Offsets relativ zur Seite, zum Rand oder zur Spalte interpretiert werden.
Kann ein Dokument gleichzeitig sowohl ein Text- als auch ein Bildwasserzeichen haben?
Nr. Document.Watermark.Type gibt den aktuellen Wasserzeichen-Typ zurück; ein erneuter Aufruf von SetText oder SetImage ersetzt das zuvor gesetzte Wasserzeichen.
Wie entferne ich einen Schatten oder eine Spiegelung von einer Form?
Rufen Sie Remove() für das entsprechende Formatierungsobjekt auf — Shape.ShadowFormat.Remove() oder Shape.Reflection.Remove().