العمل مع الأقسام

العمل مع الأقسام

العمل مع الأقسام

يتم تقسيم مستند Word إلى قسم أو أكثر، كلٌ منهما بإعداد الصفحة الخاص به، وهوامش، وترويسات، وتذييلات. Aspose.Words FOSS لـ .NET يمثل قسمًا كـ Section عقدة، تحتوي على Body و، اختياريًا، ترويسات وتذييلات، بالإضافة إلى PageSetup التي تتحكم في تخطيطها. تغطي هذه الصفحة نموذج كائن القسم، وإعداد الصفحة، والترويسات والتذييلات، وتخطيط النص متعدد الأعمدة.


نموذج كائن القسم

Document.Sections تُرجع SectionCollection – كل Section في المستند، كلٌ منها CompositeNode وجزء من شجرة العقد. يحتوي Section على Body واحد (وهو Story يحتفظ بالفقرات والجداول الرئيسية للقسم) وعند وجوده، عقد HeaderFooter يمكن الوصول إليها عبر Section.HeadersFooters، وهو HeaderFooterCollection. يوفر Document.FirstSection وDocument.LastSection وصولاً مباشراً إلى أقسام الحدود. تقوم Section.AppendContent() وPrependContent() وClearContent() بمعالجة محتوى جسم القسم بشكل جماعي، بينما ClearHeadersFooters() وDeleteHeaderFooterShapes() تُنظّف محتوى الترويسة/التذييل.


إنشاء الأقسام وفواصل الأقسام

DocumentBuilder.InsertBreak(BreakType) يُدرج فاصلًا عند المؤشر؛ BreakType يتضمن SectionBreakNewPage، SectionBreakContinuous، SectionBreakNewColumn، SectionBreakEvenPage، وSectionBreakOddPage لبدء قسم جديد، إلى جانب القيم غير المتعلقة بالأقسام PageBreak، ColumnBreak، LineBreak، وParagraphBreak. DocumentBuilder.MoveToSection() ينقل المؤشر إلى بداية جسم قسم محدد. PageSetup.SectionStart يقرأ أو يعيّن نوع الفاصل SectionStart المسجل على قسم موجود.


إعداد الصفحة

Section.PageSetup هو كائن PageSetup يغطي أبعاد الصفحة وهوامشها (PageWidth, PageHeight, TopMargin, BottomMargin, LeftMargin, RightMargin, Gutter)، Orientation وPaperSize، وحدود الصفحة لكل جانب (Borders، BorderAppliesTo عبر PageBorderAppliesTo، BorderDistanceFrom عبر PageBorderDistanceFrom، BorderAlwaysInFront، BorderSurroundsHeader، BorderSurroundsFooter). يتم التحكم في ترقيم السطور بواسطة LineNumberRestartMode، LineNumberCountBy، LineNumberDistanceFromText، وLineStartingNumber. PageSetup.ClearFormatting() يعيدها إلى الإعدادات الافتراضية.


الترويسات والتذييلات

Section.HeadersFooters هو HeaderFooterCollection يحتوي على وصولات typed – HeaderPrimary، HeaderFirst، HeaderEven، FooterPrimary، FooterFirst، FooterEven – إلى جانب GetByHeaderFooterType()، Add()، وLinkToPrevious(). كل HeaderFooter هو Story (مثل Body) يُحدَّد بواسطة HeaderFooterType ومُعلَّم بـ IsHeader / IsLinkedToPrevious. PageSetup.DifferentFirstPageHeaderFooter وPageSetup.OddAndEvenPagesHeaderFooter يتحكمان فيما إذا كان Word يتوقع استخدام متغيرات الترويسة/التذييل للصفحة الأولى والصفحات الزوجية على الإطلاق.


أعمدة نصية متعددة

PageSetup.TextColumns يُعيد TextColumnCollection (Count، EvenlySpaced، LineBetween، Spacing، Width) مع SetCount() لتوزيع محتوى القسم على أعمدة متعددة. الأعمدة الفردية هي كائنات TextColumn (Width، SpaceAfter) بمجرد أن تُملأ المجموعة بأكثر من عمود واحد.


نصائح وأفضل الممارسات

  • تحمل فاصل القسم التنسيق للقسم الذي follows هو – الإعداد PageSetup الخصائص على Section التي أنشأتها للتو (بعد InsertBreak) يؤثر على المحتوى الذي يأتي بعد الفاصل، وليس قبله.
  • استخدم SectionBreakContinuous عندما تحتاج فقط إلى تغيير إعداد الصفحة (على سبيل المثال، التحويل إلى نص متعدد الأعمدة) دون بدء صفحة جديدة؛ استخدم SectionBreakNewPage عندما يجب أن يبدأ القسم الجديد دائمًا في صفحة جديدة.
  • HeaderFooterCollection.LinkToPrevious() يعيد ربط رأس/تذييل القسم لتورث محتوى القسم السابق – قم بذلك قبل كتابة محتوى رأس/تذييل جديد إذا كنت تريد أن يبدأ القسم الجديد مستقلاً عن السابق.
  • PageSetup.DifferentFirstPageHeaderFooter وOddAndEvenPagesHeaderFooter لا يعملان إلا إذا كانت المتغيّرات المقابلة من HeaderFooterType (HeaderFirst، HeaderEven، وما إلى ذلك) موجودة فعليًا في Section.HeadersFooters – فعّل الإشارة وأضف الرأس/التذييل المقابل معًا.
  • Section.Body وكل HeaderFooter هي حالات منفصلة من Story – Range.Fields، العلامات المرجعية، وغيرها من العمليات التي تُحدّد بنطاق على Body الخاص بالقسم لا تصل تلقائيًا إلى رؤوسه وتذييله.

المشكلات الشائعة

المشكلةالسببالإصلاح
إعداد صفحة القسم الجديد لا يتطابق مع ما قمت بتعيينهتم تعيين PageSetup على النسخة الخاطئة من Sectionضبط PageSetup على القسم الذي follows الفاصل، ليس الذي قبله
يظهر محتوى الرأس/التذييل من القسم السابق بشكل غير متوقع في قسم جديدرؤوس/تذييلات القسم الجديد لا تزال مرتبطة بالقسم السابقاستدعِ HeaderFooterCollection.LinkToPrevious(false) (أو أضف محتوى مميز للرأس/التذييل) لفصلهما
يتم تجاهل رأس/تذييل الصفحة الأولى أو الصفحة الزوجيةDifferentFirstPageHeaderFooter / OddAndEvenPagesHeaderFooter هو false، أو لا يوجد المتطابق HeaderFooterTypeقم بتعيين العلامة على PageSetup وتأكد من وجود نسخة الرأس/التذييل المقابلة
تخطيط متعدد الأعمدة لا يُطبقتم استدعاء TextColumns.SetCount() بعدد 1، أو على PageSetup الخاص بالقسم الخطأاستدعِ SetCount() بأكثر من عمود في PageSetup.TextColumns الخاص بالقسم المستهدف

FAQ

كيف أبدأ قسمًا جديدًا دون بدء صفحة جديدة؟

أدخل فاصل SectionBreakContinuous باستخدام DocumentBuilder.InsertBreak(BreakType.SectionBreakContinuous).

كيف أعطي القسم هوامش وتوجيه خاصة به؟

أدرج فاصل قسم، ثم اضبط الخصائص على PageSetup الجديد — TopMargin، BottomMargin، LeftMargin، RightMargin، Orientation، وPaperSize.

كيف أجعل الصفحة الأولى للقسم تستخدم رأسًا مختلفًا؟

اضبط PageSetup.DifferentFirstPageHeaderFooter = true على ذلك القسم، وأضف HeaderFooter من النوع HeaderFirst (وFooterFirst إذا لزم الأمر) إلى مجموعة HeadersFooters الخاصة به.

كيف أقوم بترتيب نص جسم القسم في عمودين؟

استدعِ PageSetup.TextColumns.SetCount(2) على القسم، ثم اضبط Spacing وEvenlySpaced / قيم TextColumn.Width الفردية حسب الحاجة.


API Reference ملخص

فئة / تعدادوصف
Sectionعقدة قسم؛ Body، HeadersFooters، PageSetup
SectionCollectionكل Section في المستند، عبر Document.Sections
Body / Storyحاوية المحتوى الرئيسي لقسم (Body) أو رأس/تذييل (HeaderFooter)
PageSetupأبعاد الصفحة، الهوامش، الاتجاه، الحدود، والأعمدة للقسم
HeaderFooter / HeaderFooterCollectionمحتوى الرأس/التذييل والمُدخلات ذات النوع للقسم
HeaderFooterTypeيحدد أي نسخة من الرأس/التذييل (primary, first, even) يكون HeaderFooter
TextColumn / TextColumnCollectionتنسيق نص متعدد الأعمدة لقسم
PaperSize / Orientation / Marginsحجم الصفحة، الاتجاه، وقيم الهوامش المُعَدة مسبقًا
PageBorderAppliesTo / PageBorderDistanceFromالصفحات التي يطبع عليها حد الصفحة، وحافة الإشارة الخاصة به
SectionStart / BreakTypeنوع فاصل القسم مسجل على قسم، وأنواع الفواصل DocumentBuilder.InsertBreak() تقبل
LineNumberRestartModeعند إعادة تشغيل ترقيم الأسطر التلقائي داخل قسم

انظر أيضاً

 العربية