Як додати графічні форми до документів Word у .NET

Як додати графічні форми до документів Word у .NET

У цьому посібнику показано, як додати вміст до шару малюнка у документі Word за допомогою Aspose.Words FOSS для .NET: вставка AutoShape, додавання зображення, розташування його та обтікання текстом, заповнення та стилізація, групування кількох форм та встановлення водяного знака. Aspose.Words FOSS для .NET доступний через NuGet або шляхом збірки з вихідного коду.

Покроковий посібник

Крок 1: Отримати бібліотеку

Клонувати репозиторій та зібрати Aspose.Words.sln у конфігурації Release, потім додати посилання на проект до Aspose.Words.csproj з вашого власного .NET проекту, як описано в посібнику з встановлення. Додати using Aspose.Words; and using Aspose.Words.Drawing; на початку будь-якого файлу, який працює з формами.


Крок 2: Додати AutoShape

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


Крок 3: Додати зображення

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


Крок 4: Розташувати форму та обтікати текст

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


Крок 5: Заповнити та стилізувати форму

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(), який скидає ефект до стану «нічого».


Крок 6: Групувати кілька форм

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


Крок 7: Додати водяний знак

Document.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.

Типові проблеми та їх вирішення

Setting Left/Top на формі не має видимого ефекту. Форма все ще inline (IsInline == true). Встановити WrapType до плаваючого значення і встановити RelativeHorizontalPosition/RelativeVerticalPosition щоб властивості зсуву спрацювали.

Shape.ImageData викидає або нічого не повертає. Форма не є формою-зображенням. Перевірте Shape.HasImage перед читанням ImageData.

Дочірні форми групи не переміщуються разом. Дочірні елементи були переміщені окремо, а не через групу. Перемістіть або змініть розмір the GroupShape сам по собі, тому його трансформація координат застосовується до кожного дочірнього елемента.

Текст водяного знака не використовує запитаний шрифт. Ні TextWatermarkOptions було передано. Викличте Watermark.SetText(text, options) з TextWatermarkOptions екземпляр, у якого FontFamily встановлено.

Часто задавані питання

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

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

Як вставити зображення з певним розміром?

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

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

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

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

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

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

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

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

 Українська