Rysowanie kształtów i znaków wodnych

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 ShapeBase przy pisaniu kodu, który powinien działać zarówno na pojedynczych Shape, jak i GroupShape; użyj Shape bezpośrednio, gdy potrzebujesz członków specyficznych dla obrazu lub AutoShape, takich jak ImageData lub Chart.
  • Ustaw RelativeHorizontalPosition / RelativeVerticalPosition razem z WrapType, gdy unoszisz kształt — kształt wbudowany (domyślny dla InsertImage) ignoruje właściwości pozycjonowania, dopóki go nie ustawisz jako pływający.
  • Preferuj Document.Watermark jako jednorazowy znak wodny obejmujący cały dokument, zamiast ręcznego wstawiania i pozycjonowania Shape za 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.HasChart lub Shape.IsGroup przed dostępem do ImageData, Chart lub członków specyficznych dla grupy, ponieważ Shape może reprezentować dowolny z kilku typów obiektów rysunkowych.

Typowe problemy

ProblemPrzyczynaNaprawa
Ustawienie Left/Top na kształcie nie ma widocznego efektuKształ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 pustyKształt nie jest kształtem obrazuSprawdź Shape.HasImage przed odczytaniem ImageData
Tekst znaku wodnego nie pasuje do żądanej czcionkiNie podano TextWatermarkOptionsPrzekaż instancję TextWatermarkOptions z FontFamily ustawionym na Watermark.SetText(text, options)
Kształty potomne grupy nie poruszają się razemElementy 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/MetodaOpis
ShapePojedynczy obiekt warstwy rysunku — AutoShape, obraz, pole tekstowe lub obiekt OLE.
ShapeBaseAbstrakcyjna klasa bazowa współdzielona przez Shape i GroupShape.
GroupShapeGrupa kształtów traktowana jako jeden obiekt rysunkowy.
DocumentBuilder.InsertImageWstawia kształt obrazu w miejscu kursora, z opcjonalnym rozmiarem i pozycjonowaniem.
ImageDataDane obrazu i korekty obrazu (przycinanie, jasność, kontrast) na Shape.
FillFormatowanie wypełnienia wnętrza — jednolite, gradient, wzór lub obraz.
RelativeHorizontalPosition / RelativeVerticalPositionCzego pozycja pływającego kształtu jest mierzona względem.
WrapType / WrapSideJak otaczający tekst owija się wokół kształtu.
TextBoxUstawienia układu tekstu dla kształtu zawierającego tekst.
Document.WatermarkZarządza tekstowym lub graficznym znakiem wodnym dokumentu.
TextWatermarkOptions / ImageWatermarkOptionsSkonfiguruj wygląd tekstowego lub graficznego znaku wodnego.

Zobacz także

 Polski