رسم اشکال و واترمارکها
رسم اشکال و واترمارکها
اسناد 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)، مقدار enum 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 مسیر مستقیمتری است: overloadها یک Image، مسیر فایل، یک Stream یا آرایهٔ بایت خام را میپذیرند، با overloadهای بیشتر که 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 گزارش میدهد که آیا شکل با متن (درونمتنی) جریان دارد یا بهصورت مستقل شناور میشود.
پرکنندهها، خطوط و افکتها
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کار کند؛ وقتی به اعضای مخصوص تصویر یا AutoShape مانندImageDataیاChartنیاز دارید، مستقیماً ازShapeاستفاده کنید. - هنگام شناور کردن یک شکل،
RelativeHorizontalPosition/RelativeVerticalPositionرا همراه باWrapTypeتنظیم کنید — یک شکل درونمتنی (پیشفرض برایInsertImage) تا زمانی که آن را شناور کنید، ویژگیهای موقعیتیابی را نادیده میگیرد. - بهجای درج و موقعیتیابی دستی یک
Shapeپشت متن، برای افزودن یک نشانگذاری سراسری در سراسر سند، ازDocument.Watermarkاستفاده کنید. - بهجای تنظیم ویژگیهای جداگانه به صفر، اثر را با متد
Remove()شیء آن (ShadowFormat.Remove()،ReflectionFormat.Remove()) پاک کنید. - قبل از دسترسی به
ImageData،Chartیا اعضای خاص گروه،Shape.HasImage،Shape.HasChartیاShape.IsGroupرا بررسی کنید، چون یکShapeمیتواند هر یک از انواع مختلف اشیای رسم را نشان دهد.
مشکلات رایج
| مشکل | دلیل | رفع |
|---|---|---|
تنظیم Left/Top بر روی یک شکل هیچ اثر قابل مشاهدهای ندارد | شکل هنوز درونخطی است (IsInline == true) | WrapType را به مقدار شناور تنظیم کنید و RelativeHorizontalPosition/RelativeVerticalPosition را تنظیم کنید تا ویژگیهای موقعیتیابی اعمال شوند |
Shape.ImageData خطا میاندازد یا خالی است | شکل یک شکل تصویری نیست | قبل از خواندن ImageData، Shape.HasImage را بررسی کنید |
| متن واترمارک با قلم درخواستی مطابقت ندارد | هیچ TextWatermarkOptionsی فراهم نشد | یک نمونه TextWatermarkOptions را با FontFamily تنظیمشده به Watermark.SetText(text, options) پاس کنید |
| شکلهای فرزند یک گروه بهصورت همزمان حرکت نمیکنند | فرزندان بهصورت مستقیم جابهجا شدند نه از طریق گروه | GroupShape را جابهجا یا تغییر اندازه دهید تا تبدیل مختصات آن بر تمام فرزندان اعمال شود |
FAQ
تفاوت Shape و ShapeBase چیست؟
ShapeBase کلاس پایهٔ انتزاعی است که توسط Shape و GroupShape به اشتراک گذاشته میشود. در کدی که باید هر دو نوع را بهطور یکنواخت مدیریت کند، از ShapeBase استفاده کنید؛ وقتی به اعضای خاص یک شیء رسم واحد نیاز دارید، مانند ImageData یا Chart، از Shape استفاده کنید.
چگونه یک تصویر را به سند اضافه کنم؟
از یکی از overloadهای 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 | پیکربندی ظاهر واترمارک متنی یا تصویری. |