العمل مع الأنماط
العمل مع الأنماط
يوضح هذا الدليل كيفية العمل مع أنماط الفقرات، الأحرف، الجداول، والقوائم في Aspose.Words FOSS لـ .NET — البحث عن الأنماط المدمجة والمخصصة وتطبيقها، وتكوين التنسيق الشرطي حسب المنطقة لأنماط الجداول.
كائن Style يمثل نمطًا مدمجًا أو معرفًا من قبل المستخدم — مجموعة مسماة من تنسيقات الفقرة، الخط، والقائمة التي يطبقها Word عندما يتم تعيين هذا النمط لفقرة أو مقطع. كل مستند يُظهر أنماطه عبر خاصية Document.Styles، التي تُعيد StyleCollection. تُمثَّل أنماط الجداول بواسطة TableStyle، وهي فئة فرعية من Style تضيف تنسيقًا خاصًا بالجداول وتنسيقًا شرطيًا حسب المنطقة عبر ConditionalStyleCollection.
أنواع الأنماط والتعريف
لكل Style خاصية Type من النوع StyleType، والتي تكون إحدى Paragraph، Character، Table أو List — مطابقةً لأربعة أنواع الأنماط التي يدعمها Word. تحمل الأنماط المدمجة أيضًا قيمة تعداد StyleIdentifier مستقلة عن اللغة (على سبيل المثال قيم تمثّل العناوين، التأكيد، وأنماط الروابط) بحيث يمكن للشفرة البحث عن نمط مدمج دون الاعتماد على اسمه المعروض بلغة معينة. يتوفر الاسم القابل للقراءة للإنسان لل نمط عبر Style.Name، وتُعيد Style.Aliases أي أسماء بديلة يتعرف عليها Word لنفس النمط. يُبلغ Style.BuiltIn عما إذا كان النمط يأتي مع Word نفسه أم تم تعريفه في المستند، ويُبلغ Style.IsHeading عما إذا كان النمط أحد أنماط العناوين المدمجة.
الوصول إلى مجموعة الأنماط وإدارتها
StyleCollection هي مجموعة جميع كائنات Style — المدمجة والمخصصة — المرتبطة بمستند، وتُصل إليها عبر Document.Styles. استرجع نمطًا بناءً على اسمه المعروض باستخدام الفهرس StyleCollection — styles[name] — أو استرجع نمطًا مدمجًا بناءً على StyleIdentifier المستقل عن اللغة باستخدام نفس الفهرس — styles[sti] — وهو أكثر موثوقية من البحث عن الاسم عبر المستندات المكتوبة بلغات مختلفة. تُنشأ الأنماط الجديدة باستخدام StyleCollection.Add(type, name)، مع تحديد StyleType والاسم، ويمكن تكرار نمط موجود إلى المجموعة باستخدام StyleCollection.AddCopy(style). يُبلغ StyleCollection.Count عن عدد الأنماط التي يحتويها المستند، وتُظهر المجموعة أيضًا DefaultFont وDefaultParagraphFormat، اللذين يصفان التنسيق الافتراضي على مستوى المستند الذي يرثه المحتوى الجديد قبل تطبيق أي نمط صريح. يُزيل StyleCollection.ClearQuickStyleGallery() جميع الأنماط من معرض الأنماط السريعة في واجهة Word دون حذف الأنماط نفسها.
تطبيق الأنماط على الفقرات والـRuns
كائنات التنسيق التي يمكنها حمل نمط تكشف عن كلٍ من خاصية Style (كائن Style نفسه) وخاصية StyleName (اختصار يُحل أو يُنشئ نمطًا بالاسم). ParagraphFormat.Style وParagraphFormat.StyleName تطبقان نمط فقرة، بينما Font.Style وFont.StyleName تطبقان نمط حرف لتنسيق الـrun. الخصائص LinkedStyleName وBaseStyleName وNextParagraphStyleName الخاصة بالنمط تصف كيف يرتبط بالأنماط الأخرى: BaseStyleName يحدد اسم النمط الذي يرث منه تنسيق غير مُحدد، وLinkedStyleName يحدد اسم نمط الفقرة/الحرف المزدوج (كما يفعل Word للأنماط المدمجة مثل Heading 1 والنمط الحرفي المرتبط به)، وNextParagraphStyleName يحدد اسم النمط الذي يعيّنه Word لفقرة جديدة تُكتب بعد فقرة تستخدم هذا النمط.
أنماط الجداول والتنسيق الشرطي
TableStyle يوسّع Style بخصائص تخطيط الجدول مثل Alignment، CellSpacing، LeftIndent، Shading، VerticalAlignment، والمسافات الداخلية (LeftPadding، RightPadding، TopPadding، BottomPadding)، بالإضافة إلى RowStripe وColumnStripe، اللذين يتحكمان في عدد الصفوف أو الأعمدة التي يتكرر فيها نمط الشرائط. بخلاف تنسيق الجدول الموحد، يُعيد TableStyle.ConditionalStyles كائن ConditionalStyleCollection يحتوي على ConditionalStyle واحد لكل منطقة في الجدول — FirstRow، LastRow، FirstColumn، LastColumn، OddRowBanding، EvenRowBanding، OddColumnBanding، EvenColumnBanding، والخلايا الأربع الزاوية (TopLeftCell، TopRightCell، BottomLeftCell، BottomRightCell). كل ConditionalStyle يحمل Font وParagraphFormat وShading وBorders الخاصة به، بالإضافة إلى المسافات الداخلية للخلية، وتُظهر خاصية Type أي منطقة ConditionalStyleType تمثّلها. ConditionalStyle.ClearFormatting() وConditionalStyleCollection.ClearFormatting() يعيدان ضبط التنسيق لمنطقة واحدة أو لمجموعة المناطق الشرطية بأكملها.
بيانات النمط الوصفية وعلامات السلوك
عدة خصائص منطقية ورقمية على Style تتحكم في كيفية تعامل Word مع النمط في واجهة المستخدم بدلاً من طريقة عرضه: Locked يمنع تغيير النمط عندما تكون حماية التنسيق مفعلة، وIsQuickStyle يتحكم فيما إذا كان يظهر في معرض الأنماط السريعة، وAutomaticallyUpdate يجعل النمط يعيد تعريف نفسه من التنسيق المباشر المطبق يدويًا، وSemiHidden وUnhideWhenUsed يتحكمان في ظهور النمط في قائمة الأنماط قبل وبعد الاستخدام الأول، وPriority يؤثر على ترتيب الفرز في المعرض. كما يكشف النمط عن خصائص List وListFormat عندما يحدد ترقيم القوائم، وStyle.Remove() يحذف النمط من StyleCollection الخاص به.
نصائح وأفضل الممارسات
- يفضّل استخدام الفهرس
StyleCollectionمع قيمةStyleIdentifierبدلاً من البحث بالاسم عند العثور على نمط مدمج — الأسماء محلية، لكن قيمStyleIdentifierليست كذلك. - قم بتعيين
BaseStyleNameلبناء تسلسلات هرمية للأنماط (على سبيل المثال، مجموعة من أنماط العناوين التي جميعها ترث اختيارات الخط من نمط أساسي واحد) بدلاً من تكرار التنسيق على كل نمط. - عند نسخ نمط بين المستندات، استخدم
StyleCollection.AddCopy(style)بدلًا من قراءة وإعادة تطبيق كل خاصية تنسيق يدويًا. - قم بتكوين مناطق
TableStyle.ConditionalStylesللجداول المتناوبة بدلاً من تنسيق الصفوف المتناوبة يدويًا في الشيفرة — يتم تطبيق تنسيق كل منطقةConditionalStyleبناءً علىConditionalStyleTypeالخاصة بها، وليس عن طريق ضبط تنسيق مباشر على الصفوف الفردية. - تحقق من
Style.BuiltInقبل إزالة أو إعادة تسمية نمط برمجيًا؛ عادةً ما يتم الإشارة إلى الأنماط المدمجة بالاسم في أماكن أخرى من المستند.
المشكلات الشائعة
| المشكلة | السبب | الإصلاح |
|---|---|---|
StyleCollection indexer يُرجِع null عند البحث عن اسم | اسم النمط غير موجود في هذا المستند، أو أن نمطًا مدمجًا لم يُستخدم بعد لذا لم يُنشئه Word | تحقق من Style.Aliases للأسماء البديلة، أو استخدم الفهرس StyleCollection مع StyleIdentifier للأنماط المدمجة بدلاً من ذلك |
ضبط StyleName بشكل غير متوقع ينشئ نمطًا جديدًا | StyleName ينشئ النمط المُسمّى إذا لم يكن موجودًا بالفعل في المجموعة | استخدم الفهرس StyleCollection أولاً لتأكيد وجود النمط، أو عيّن كائن Style مباشرةً عبر الخاصية Style |
تظليل الجدول لا يظهر بعد تطبيق TableStyle | لم يتم أبدًا تكوين مناطق التنسيق الشرطي (OddRowBanding، EvenRowBanding، وما إلى ذلك) على TableStyle.ConditionalStyles | عيّن التنسيق على الإدخالات ConditionalStyle ذات الصلة في ConditionalStyleCollection |
| تغيّر النمط لا يؤثر على المحتوى الذي يستخدم النمط بالفعل | تم تطبيق التنسيق المباشر (يدوي) فوق النمط ويأخذ الأسبقية | امسح التنسيق المباشر على المقاطع/الفقرات المتأثرة، أو اضبط Style.AutomaticallyUpdate |
FAQ
كيف أحصل على مجموعة جميع الأنماط في مستند؟
اقرأ Document.Styles، التي تُرجِع StyleCollection يحتوي على كل Style المدمجة والمُعَرَّفة من قبل المستخدم في ذلك المستند.
ما الفرق بين Style و StyleIdentifier؟
Style هو كائن النمط الفعلي مع تنسيقه؛ StyleIdentifier هو قيمة تعداد غير معتمدة على اللغة تُستخدم للبحث عن محدد معين مدمج نمط بغض النظر عن لغة المستند، عبر StyleCollection فهرس.
كيف تختلف أنماط الجداول عن أنماط الفقرات أو الأحرف؟
TableStyle هو فئة فرعية من Style تضيف خصائص تخطيط الجدول (Alignment, CellSpacing, padding) ومجموعة ConditionalStyles لتنسيق خاص بالمناطق مثل الصفوف المتناوبة، صفوف العناوين، والخلايا الزاوية — مفاهيم تنسيق لا تنطبق على أنماط الفقرات أو الأحرف.
هل يمكنني إنشاء نمط جديد تمامًا بدلاً من تعديل نمط موجود؟
نعم — استدعِ StyleCollection.Add(type, name) مع StyleType المطلوب واسم جديد لإنشاء نمط فارغ، ثم قم بتعيين خصائص تنسيقه (Font, ParagraphFormat، وما إلى ذلك لأنماط الفقرات/الأحرف).
كيف يمكنني تكرار نمط، بما في ذلك من مستند آخر؟
استخدم StyleCollection.AddCopy(style)، مع تمرير كائن Style (يمكن أن يأتي من StyleCollection الخاص بـ Document مختلف) لإضافة نسخة منه إلى المجموعة المستهدفة.
API Reference ملخص
| فئة/طريقة | وصف |
|---|---|
Style | نمط فقرة أو حرف أو جدول أو قائمة مدمج أو معرف من قبل المستخدم |
StyleCollection | مجموعة جميع الأنماط في المستند، يمكن الوصول إليها عبر Document.Styles |
مُفهرس StyleCollection حسب الاسم | ابحث عن نمط حسب اسم العرض الخاص به، على سبيل المثال styles["Heading 1"] |
مُفهرس StyleCollection حسب المعرف | ابحث عن نمط مدمج حسب معرف غير معتمد على اللغة، على سبيل المثال styles[StyleIdentifier.Heading1] |
StyleCollection.Add(type, name) | أنشئ نمطًا جديدًا وفارغًا من StyleType المعطى |
StyleCollection.AddCopy(style) | انسخ نمطًا موجودًا إلى هذه المجموعة |
StyleType | Enum يميز الأنماط Paragraph وCharacter وTable وList |
StyleIdentifier | معرّف غير معتمد على الإعدادات المحلية لنمط مدمج |
TableStyle | فئة فرعية من Style لتنسيق الجداول، تشمل تنسيقًا شرطيًا لكل منطقة |
ConditionalStyleCollection | مجموعة إدخالات ConditionalStyle لكل منطقة على TableStyle |
ConditionalStyle | تنسيق (الخط، تنسيق الفقرة، التظليل، الحدود، الحشو) لمنطقة جدول واحدة |
ConditionalStyleType | تعداد يحدد إلى أي منطقة جدول ينطبق ConditionalStyle |