Малювання форм і водяних знаків
Малювання фігур і водяних знаків
Документи 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 | Налаштуйте вигляд текстового або графічного водяного знака. |