Rysowanie kształtów i znaków wodnych
Rysowanie kształtów i znaków wodnych
Dokumenty Word przechowują AutoShapes, obrazy, pola tekstowe i obiekty OLE w osobnej warstwie rysunkowej, oddzielnej od przepływu tekstu w akapicie/uruchomieniu. Aspose.Words FOSS dla .NET modeluje tę warstwę przy użyciu klasy Shape (konkretne obiekty rysunkowe) i jej abstrakcyjnej bazy ShapeBase, oba będące częścią przestrzeni nazw Aspose.Words.Drawing. Ten przewodnik obejmuje model kształtów, wstawianie obrazów i AutoShapes, pozycjonowanie i zawijanie, wypełnienia i efekty, grupowanie oraz znaki wodne.
Model Kształtu i ShapeBase
Shape — sealed, i typ, z którym pracujesz bezpośrednio — reprezentuje AutoShape, pole tekstowe, kształt wolny, obiekt OLE, kontrolkę ActiveX lub obraz w warstwie rysunkowej. Dziedziczy po abstrakcyjnej ShapeBase, która dostarcza właściwości wspólne dla każdego obiektu rysunkowego: pozycję (Left, Top, Width, Height, Rotation), wartość wyliczenia ShapeType oraz pod-obiekty formatowania, takie jak Fill, Stroke, ShadowFormat, Glow i Reflection. GroupShape (również ShapeBase) reprezentuje grupę kształtów traktowaną jako jedna jednostka. Utwórz samodzielny kształt bezpośrednio za pomocą new Shape(doc, shapeType), gdzie shapeType jest wartością ShapeType, taką jak Rectangle, Ellipse, Star lub TextBox, a następnie wstaw go do drzewa przy pomocy DocumentBuilder.InsertNode(node).
Wstawianie obrazów i AutoShapes przy użyciu DocumentBuilder
W przypadku obrazów, DocumentBuilder.InsertImage jest bardziej bezpośrednią drogą: przeciążenia przyjmują Image, ścieżkę do pliku, Stream lub surową tablicę bajtów, z dodatkowymi przeciążeniami umożliwiającymi ustawienie explicite width/height lub pełnego pozycjonowania (horzPos, left, vertPos, top, width, height, wrapType). Powstały Shape udostępnia dane obrazu poprzez właściwość ImageData — ImageData.SetImage(...) w celu zastąpienia obrazu, plus CropTop/CropBottom/CropLeft/CropRight, Brightness, Contrast i GrayScale do podstawowych regulacji. Instancje GroupShape są tworzone przy użyciu DocumentBuilder.InsertGroupShape(shapes).
Pozycjonowanie i zawijanie tekstu
Umiejscowienie kształtu względem strony jest kontrolowane przez RelativeHorizontalPosition i RelativeVerticalPosition (każde względem Page, Margin, Column lub podobnych kotwic), wraz z właściwościami offsetu Left/Top. HorizontalAlignment i VerticalAlignment obsługują proste wyrównanie względne. To, jak otaczający tekst płynie wokół kształtu, jest ustawiane za pomocą WrapType oraz, dla specyficznego owinięcia po stronie, WrapSide. IsInline informuje, czy kształt płynie z tekstem (inline), czy unosi się niezależnie.
Wypełnienia, Kontury i Efekty
Shape.Fill (obiekt Fill) kontroluje, jak wnętrze kształtu jest malowane: Fill.Solid(color) dla jednolitego koloru, Fill.OneColorGradient(...) / Fill.TwoColorGradient(...) dla gradientów, Fill.Patterned(patternType) dla wzoru i Fill.SetImage(...) dla wypełnienia obrazem; FillType informuje, które z nich jest aktywne. Kontur jest kontrolowany przez właściwość Stroke, a efekty wizualne są udostępniane jako osobne obiekty formatowania — ShadowFormat, Glow (GlowFormat), Reflection (ReflectionFormat) i SoftEdge (SoftEdgeFormat) — każdy z własną metodą Remove() do usunięcia efektu.
Grupowanie Kształtów i Pól Tekstowych
Wiele kształtów można połączyć w GroupShape, który zachowuje się jak pojedynczy ShapeBase z własnymi Fill, ShadowFormat, Glow i Reflection. Dla kształtu zawierającego tekst, Shape.TextBox (obiekt TextBox) udostępnia układ specyficzny dla tekstu: InternalMarginLeft/Right/Top/Bottom dla wypełnienia, FitShapeToText do automatycznego dopasowywania rozmiaru kształtu, LayoutFlow dla kierunku tekstu oraz VerticalAnchor dla pionowego wyrównania tekstu w kształcie.
Watermarks
Document.Watermark (obiekt Watermark) zarządza znakiem wodnym obejmującym cały dokument, niezależnym od pojedynczego kształtu. Wywołaj Watermark.SetText(text) lub SetText(text, options) dla znaku wodnego tekstowego, lub SetImage(...) dla znaku wodnego obrazkowego, oraz Watermark.Remove() aby go usunąć. Watermark.Type informuje o bieżącym WatermarkType (Text, Image lub None). TextWatermarkOptions kontroluje FontFamily, FontSize, Color i Layout (WatermarkLayout.Horizontal lub Diagonal); ImageWatermarkOptions kontroluje Scale i IsWashout.
Wskazówki i Najlepsze Praktyki
- Użyj
ShapeBaseprzy pisaniu kodu, który powinien działać zarówno na pojedynczychShape, jak iGroupShape; użyjShapebezpośrednio, gdy potrzebujesz członków specyficznych dla obrazu lub AutoShape, takich jakImageDatalubChart. - Ustaw
RelativeHorizontalPosition/RelativeVerticalPositionrazem zWrapType, gdy unoszisz kształt — kształt wbudowany (domyślny dlaInsertImage) ignoruje właściwości pozycjonowania, dopóki go nie ustawisz jako pływający. - Preferuj
Document.Watermarkjako jednorazowy znak wodny obejmujący cały dokument, zamiast ręcznego wstawiania i pozycjonowaniaShapeza tekstem. - Wyczyść efekt przy użyciu metody
Remove()obiektu (ShadowFormat.Remove(),ReflectionFormat.Remove()) zamiast ustawiania poszczególnych właściwości na zero. - Sprawdź
Shape.HasImage,Shape.HasChartlubShape.IsGroupprzed dostępem doImageData,Chartlub członków specyficznych dla grupy, ponieważShapemoże reprezentować dowolny z kilku typów obiektów rysunkowych.
Typowe problemy
| Problem | Przyczyna | Naprawa |
|---|---|---|
Ustawienie Left/Top na kształcie nie ma widocznego efektu | Kształt nadal jest w linii (IsInline == true) | Ustaw WrapType na wartość pływającą i ustaw RelativeHorizontalPosition/RelativeVerticalPosition, aby właściwości pozycjonowania zaczęły działać |
Shape.ImageData zgłasza wyjątek lub jest pusty | Kształt nie jest kształtem obrazu | Sprawdź Shape.HasImage przed odczytaniem ImageData |
| Tekst znaku wodnego nie pasuje do żądanej czcionki | Nie podano TextWatermarkOptions | Przekaż instancję TextWatermarkOptions z FontFamily ustawionym na Watermark.SetText(text, options) |
| Kształty potomne grupy nie poruszają się razem | Elementy potomne zostały przemieszone bezpośrednio zamiast przez grupę | Przesuń lub zmień rozmiar samego GroupShape, aby jego transformacja współrzędnych była stosowana do wszystkich elementów potomnych |
FAQ
Jaka jest różnica między Shape a ShapeBase?
ShapeBase jest abstrakcyjną klasą bazową współdzieloną przez Shape i GroupShape. Użyj ShapeBase w kodzie, który ma obsługiwać oba typy jednolicie; użyj Shape, gdy potrzebujesz członków specyficznych dla pojedynczego obiektu rysunku, takiego jak ImageData lub Chart.
Jak dodać obraz do dokumentu?
Użyj jednej z przeciążeń DocumentBuilder.InsertImage — przekaż Image, ścieżkę do pliku, Stream lub tablicę bajtów, opcjonalnie z width/height lub pełnymi argumentami pozycjonowania.
Jak sprawić, aby kształt unosił się zamiast leżeć w linii z tekstem?
Ustaw jego WrapType na wartość nie-inline i ustaw RelativeHorizontalPosition / RelativeVerticalPosition, aby przesunięcia Left/Top kształtu były interpretowane względem strony, marginesu lub kolumny.
Czy mogę dodać jednocześnie znak wodny tekstowy i graficzny?
Document.Watermark.Type odzwierciedla bieżący typ znaku wodnego; ustawienie nowego znaku wodnego przy użyciu SetText lub SetImage zastępuje to, co było wcześniej, więc dokument może mieć jednocześnie maksymalnie jeden aktywny znak wodny.
Jak usunąć cień lub odbicie z kształtu?
Wywołaj Remove() na odpowiednim obiekcie formatowania — Shape.ShadowFormat.Remove() lub Shape.Reflection.Remove().
Podsumowanie API Reference
| Klasa/Metoda | Opis |
|---|---|
Shape | Pojedynczy obiekt warstwy rysunku — AutoShape, obraz, pole tekstowe lub obiekt OLE. |
ShapeBase | Abstrakcyjna klasa bazowa współdzielona przez Shape i GroupShape. |
GroupShape | Grupa kształtów traktowana jako jeden obiekt rysunkowy. |
DocumentBuilder.InsertImage | Wstawia kształt obrazu w miejscu kursora, z opcjonalnym rozmiarem i pozycjonowaniem. |
ImageData | Dane obrazu i korekty obrazu (przycinanie, jasność, kontrast) na Shape. |
Fill | Formatowanie wypełnienia wnętrza — jednolite, gradient, wzór lub obraz. |
RelativeHorizontalPosition / RelativeVerticalPosition | Czego pozycja pływającego kształtu jest mierzona względem. |
WrapType / WrapSide | Jak otaczający tekst owija się wokół kształtu. |
TextBox | Ustawienia układu tekstu dla kształtu zawierającego tekst. |
Document.Watermark | Zarządza tekstowym lub graficznym znakiem wodnym dokumentu. |
TextWatermarkOptions / ImageWatermarkOptions | Skonfiguruj wygląd tekstowego lub graficznego znaku wodnego. |