رسم الأشكال والعلامات المائية
رسم الأشكال والعلامات المائية
تحافظ مستندات 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 | تكوين مظهر العلامة المائية النصية أو الصورية. |