Малювання форм і водяних знаків

Малювання форм і водяних знаків

Малювання фігур і водяних знаків

Документи Word зберігають AutoShapes, зображення, текстові поля та OLE-об’єкти у окремому шарі малювання, що відокремлений від потоку тексту абзацу/речення. Aspose.Words FOSS для .NET моделює цей шар за допомогою класу Shape (конкретні об’єкти малювання) та його абстрактної бази ShapeBase, обидва входять до простору імен Aspose.Words.Drawing. У цьому посібнику розглядаються модель фігур, вставка зображень і AutoShapes, позиціонування та обтікання, заповнення та ефекти, групування та водяні знаки.


Модель Shape та ShapeBase

Shape — sealed, і тип, з яким ви працюєте безпосередньо — представляє AutoShape, текстове поле, вільну форму, OLE-об’єкт, ActiveX-контрол або зображення у шарі малювання. Він успадковується від абстрактного ShapeBase, який надає властивості, спільні для кожного об’єкта малювання: позиція (Left, Top, Width, Height, Rotation), значення перерахування ShapeType та підоб’єкти форматування, такі як Fill, Stroke, ShadowFormat, Glow і Reflection. GroupShape (також ShapeBase) представляє групу фігур, що розглядаються як один блок. Створіть окрему фігуру безпосередньо за допомогою new Shape(doc, shapeType), де shapeType — це значення ShapeType, наприклад Rectangle, Ellipse, Star або TextBox, потім вставте її в дерево за допомогою DocumentBuilder.InsertNode(node).


Вставка зображень і AutoShapes за допомогою DocumentBuilder

Для зображень конкретно DocumentBuilder.InsertImage — більш прямий шлях: перевантаження приймають Image, шлях до файлу, Stream або масив необроблених байтів, з додатковими перевантаженнями, які встановлюють явні width/height або повне позиціонування (horzPos, left, vertPos, top, width, height, wrapType). Отриманий Shape надає доступ до даних зображення через властивість ImageData — ImageData.SetImage(...) для заміни зображення, а також CropTop/CropBottom/CropLeft/CropRight, Brightness, Contrast і GrayScale для базових налаштувань. Екземпляри GroupShape створюються за допомогою DocumentBuilder.InsertGroupShape(shapes).


Позиціонування та обтікання текстом

Розташування форми відносно сторінки контролюється RelativeHorizontalPosition та RelativeVerticalPosition (кожен відносно Page, Margin, Column або подібних прив’язок), разом із властивостями зсуву Left/Top. HorizontalAlignment та VerticalAlignment забезпечують просте відносне вирівнювання. Те, як навколишній текст обтікає форму, задається за допомогою WrapType і, для обтікання з конкретної сторони, WrapSide. IsInline повідомляє, чи форма рухається разом з текстом (inline) або плаває незалежно.


Заповнення, Обводки та Ефекти

Shape.Fill (об’єкт Fill) керує тим, як фарбується внутрішня частина форми: Fill.Solid(color) для суцільного кольору, Fill.OneColorGradient(...) / Fill.TwoColorGradient(...) для градієнтів, Fill.Patterned(patternType) для візерунка і Fill.SetImage(...) для заповнення зображенням; FillType повідомляє, який із цих параметрів активний. Контур контролюється властивістю Stroke, а візуальні ефекти представлені окремими об’єктами форматування — ShadowFormat, Glow (GlowFormat), Reflection (ReflectionFormat) та SoftEdge (SoftEdgeFormat) — кожен має власний метод Remove() для очищення ефекту.


Групування форм та текстових блоків

Кілька форм можна об’єднати у GroupShape, який сам діє як єдина ShapeBase зі своїми Fill, ShadowFormat, Glow та Reflection. Для форми, що містить текст, Shape.TextBox (об’єкт TextBox) надає специфічне для тексту розташування: InternalMarginLeft/Right/Top/Bottom для відступу, FitShapeToText для автоматичного розміру форми, LayoutFlow для напрямку тексту та VerticalAnchor для вертикального вирівнювання тексту всередині форми.


Watermarks

Document.Watermark (об’єкт Watermark) керує водяним знаком, що поширюється на весь документ, незалежно від окремих форм. Використовуйте Watermark.SetText(text) або SetText(text, options) для текстового водяного знака, або SetImage(...) для зображення, і Watermark.Remove() для його видалення. Watermark.Type повідомляє поточний WatermarkType (Text, Image або None). TextWatermarkOptions контролює FontFamily, FontSize, Color та Layout (WatermarkLayout.Horizontal або Diagonal); ImageWatermarkOptions контролює Scale і IsWashout.


Поради та найкращі практики

  • Використовуйте ShapeBase, коли пишете код, який має працювати як з окремими Shape, так і з GroupShape екземплярами; використовуйте Shape безпосередньо, коли потрібні члени, специфічні для зображення або AutoShape, такі як ImageData чи Chart.
  • Встановіть RelativeHorizontalPosition / RelativeVerticalPosition разом з WrapType, коли плаваєте форму — вбудована форма (за замовчуванням для InsertImage) ігнорує властивості позиціонування, доки ви не зробите її плаваючою.
  • Віддавайте перевагу Document.Watermark для єдиного водяного знака на весь документ замість вручну вставляти та позиціонувати Shape позаду тексту.
  • Очистіть ефект за допомогою методу Remove() його об’єкта (ShadowFormat.Remove(), ReflectionFormat.Remove()) замість встановлення окремих властивостей у нуль.
  • Перевірте Shape.HasImage, Shape.HasChart або Shape.IsGroup перед доступом до ImageData, Chart або членів, специфічних для групи, оскільки Shape може представляти будь-який з кількох типів об’єктів малювання.

Поширені проблеми

ПроблемаПричинаВиправлення
Встановлення Left/Top на формі не має видимого ефектуФорма все ще вбудована (IsInline == true)Встановіть WrapType у плаваюче значення та встановіть RelativeHorizontalPosition/RelativeVerticalPosition, щоб властивості позиціонування набули ефекту
Shape.ImageData викидає або є порожнімФорма не є зображеннямПеревірте Shape.HasImage перед читанням ImageData
Текст водяного знака не відповідає запитаному шрифтуНе було надано TextWatermarkOptionsПередайте екземпляр TextWatermarkOptions з FontFamily, встановленим у значення Watermark.SetText(text, options)
Дочірні форми групи не рухаються разомДочірні елементи були переміщені безпосередньо, а не через групуПеремістіть або змініть розмір самого GroupShape, щоб його координатне перетворення застосовувалося до всіх дочірніх елементів

FAQ

У чому різниця між Shape і ShapeBase?

ShapeBase — це абстрактний базовий клас, спільний для Shape та GroupShape. Використовуйте ShapeBase у коді, який повинен обробляти обидва типи однорідно; використовуйте Shape, коли потрібні члени, специфічні для окремого об’єкта малюнка, наприклад ImageData або Chart.

Як додати зображення до документа?

Використайте один із перевантажень DocumentBuilder.InsertImage — передайте Image, шлях до файлу, Stream або масив байтів, за потреби з width/height або повними аргументами позиціонування.

Як зробити форму плаваючою, а не розташовувати її в рядку з текстом?

Встановіть його WrapType у значення, відмінне від inline, і задайте RelativeHorizontalPosition/RelativeVerticalPosition, щоб зсуви Left/Top форми інтерпретувалися відносно сторінки, поля або колонки.

Чи можна додати водяний знак і у вигляді тексту, і у вигляді зображення?

Document.Watermark.Type відображає поточний тип водяного знака; встановлення нового водяного знака за допомогою SetText або SetImage замінює те, що було раніше, тому документ може мати одночасно не більше одного активного водяного знака.

Як видалити тінь або відображення з форми?

Використайте Remove() на відповідному об’єкті форматування — Shape.ShadowFormat.Remove() або Shape.Reflection.Remove().


API Reference Підсумок

Клас/МетодОпис
ShapeОдин об’єкт шару малювання — AutoShape, зображення, текстове поле або OLE-об’єкт.
ShapeBaseАбстрактний базовий клас, спільний для Shape та GroupShape.
GroupShapeГрупа форм, що розглядається як один об’єкт малювання.
DocumentBuilder.InsertImageВставляє форму зображення в місці курсора, з необов’язковими розміром і позиціонуванням.
ImageDataДані зображення та корекції зображення (обрізка, яскравість, контраст) на Shape.
FillФорматування внутрішнього заповнення — суцільне, градієнтне, візерунок або зображення.
RelativeHorizontalPosition / RelativeVerticalPositionВід чого вимірюється позиція плаваючої форми.
WrapType / WrapSideЯк навколишній текст обтікає форму.
TextBoxНалаштування розташування тексту для форми, що містить текст.
Document.WatermarkКерує текстовим або графічним водяним знаком документа.
TextWatermarkOptions / ImageWatermarkOptionsНалаштуйте вигляд текстового або графічного водяного знака.

Дивіться також

 Українська