نحوه افزودن اشکال رسم به اسناد Word در .NET
این راهنما نشان میدهد چگونه محتوا را به لایه رسم یک سند Word با Aspose.Words FOSS برای .NET اضافه کنیم: درج یک AutoShape، افزودن تصویر، موقعیتیابی آن و پیچاندن متن دور آن، پر کردن و استایلدهی، گروهبندی چندین شکل، و تنظیم واترمارک. Aspose.Words FOSS برای .NET از طریق NuGet یا با ساخت از منبع در دسترس است.
راهنمای گام به گام
گام ۱: دریافت کتابخانه
مخزن را کلون کنید و بسازید Aspose.Words.sln در پیکربندی Release، سپس یک ارجاع پروژه به Aspose.Words.csproj از پروژهٔ .NET خودتان، همانطور که در راهنمای نصب. افزودن using Aspose.Words; and using Aspose.Words.Drawing; در بالای هر فایلی که با شکلها کار میکند.
گام ۲: افزودن یک AutoShape
یک شکل را مستقیماً با new Shape(doc, shapeType) بسازید، که در آن shapeType یک مقدار ShapeType مانند Rectangle، Ellipse، Star یا TextBox است، سپس آن را با DocumentBuilder.InsertNode(node) به درخت وارد کنید. Shape کلاس مشخص و sealed است که شما آن را میسازید و پیکربندی میکنید؛ این کلاس از ShapeBase انتزاعی ارث میبرد، که موقعیت (Left، Top، Width، Height، Rotation) و زیر-اشیاء قالببندی (Fill، Stroke، ShadowFormat، Glow، Reflection) را که با GroupShape مشترک هستند، تعریف میکند.
مرحله 3: افزودن تصویر
DocumentBuilder.InsertImage مسیر مستقیم برای تصاویر است: overloadها یک Image، مسیر فایل، یک Stream یا آرایه بایت خام را میپذیرند، و overloadهای دیگر که 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) را کنترل میکند.
مرحله ۷: افزودن علامت آب
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 روی یک شکل هیچ اثر قابل مشاهدهای ندارد. شکل هنوز به صورت درونخطی است (IsInline == true). تنظیم WrapType به مقدار شناور و تنظیم RelativeHorizontalPosition/RelativeVerticalPosition تا ویژگیهای جابجایی اعمال شوند.
Shape.ImageData خطا میاندازد یا هیچچیزی برنمیگرداند. شکل یک شکل تصویر نیست. بررسی کنید Shape.HasImage قبل از خواندن ImageData.
اشکال فرزند یک گروه بهصورت همزمان حرکت نمیکنند. فرزندان بهصورت جداگانه جابهجا شدند بهجای اینکه از طریق گروه حرکت کنند. حرکت یا تغییر اندازهٔ GroupShape خود آن بهطوری که تبدیل مختصات آن بر تمام فرزندان اعمال میشود.
متن واترمارک از فونت درخواستی استفاده نمیکند. خیر TextWatermarkOptions ارسال شد. فراخوانی Watermark.SetText(text, options) با یک TextWatermarkOptions نمونهای که FontFamily تنظیم شده است.
سوالات متداول
تفاوت Shape و ShapeBase چیست؟
ShapeBase کلاس پایهٔ انتزاعی است که توسط Shape و GroupShape به اشتراک گذاشته میشود. زمانی که باید هر دو نوع را بهصورت یکسان مدیریت کنید، کد را نسبت به ShapeBase بنویسید؛ برای اعضای خاص یک شیء ترسیمی، مانند ImageData، مستقیماً از Shape استفاده کنید.
چگونه میتوانم یک تصویر با اندازهٔ خاص وارد کنم؟
از DocumentBuilder.InsertImage overload که آرگومانهای صریح width و height را میپذیرد، بههمراه منبع تصویر (یک Image، مسیر فایل، Stream، یا آرایه بایت) استفاده کنید.
چگونه میتوانم یک شکل را بهجای قرارگیری درون خط با متن، شناور کنم؟
WrapType آن را به مقدار غیر درونخط تنظیم کنید و RelativeHorizontalPosition / RelativeVerticalPosition را تنظیم کنید تا جابهجاییهای Left/Top بهصورت نسبی نسبت به صفحه، حاشیه یا ستون تفسیر شوند.
آیا یک سند میتواند همزمان واترمارک متنی و تصویری داشته باشد؟
شماره Document.Watermark.Type نوع واترمارک جاری را گزارش میدهد؛ فراخوانی SetText یا SetImage دوباره هر واترمارکی که قبلاً تنظیم شده بود را جایگزین میکند.
چگونه سایه یا انعکاس را از یک شکل حذف کنم؟
متد Remove() را بر روی شیء قالببندی مربوطه صدا بزنید — Shape.ShadowFormat.Remove() یا Shape.Reflection.Remove().