رسم الأشكال والعلامات المائية

رسم الأشكال والعلامات المائية

رسم الأشكال والعلامات المائية

تحافظ مستندات Word على AutoShapes، والصور، ومربعات النص، وكائنات OLE في طبقة رسم منفصلة، متميزة عن تدفق نص الفقرة/التشغيل. Aspose.Words FOSS لـ .NET نمذج هذه الطبقة باستخدام فئة Shape (كائنات رسم ملموسة) وقاعدتها المجردة ShapeBase، وكلاهما جزء من مساحة الأسماء Aspose.Words.Drawing. يغطي هذا الدليل نموذج الشكل، وإدراج الصور و AutoShapes، والتموضع والالتفاف، والتعبئات والتأثيرات، والتجميع، والعلامات المائية.


نموذج الشكل و ShapeBase

Shape — مختومة، والنوع الذي تتعامل معه مباشرةً — تمثل 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 ما إذا كان الشكل يتدفق مع النص (مضمن) أو يطفو بشكل مستقل.


التعبئات، الخطوط، والتأثيرات

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 إلى قيمة غير مدمجة واضبط 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تكوين مظهر العلامة المائية النصية أو الصورية.

انظر أيضاً

 العربية