العمل مع الأقسام
العمل مع الأقسام
يتم تقسيم مستند 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 | عند إعادة تشغيل ترقيم الأسطر التلقائي داخل قسم |