كيفية العمل مع الأقسام في .NET
هذا الدليل يوضح كيفية إنشاء فواصل الأقسام، تكوين إعدادات الصفحة، وإدارة رؤوس وتذييلات وتخطيط متعدد الأعمدة في Aspose.Words FOSS for .NET, باستخدام الـ Section and PageSetup الفئات. يغطي قراءة الأقسام الموجودة بالفعل في المستند، بدء قسم جديد بـ DocumentBuilder, تكوين أبعاد الصفحة وهوامشها، إضافة متغيرات الرأس والتذييل، وتنسيق نص الجسم في عدة أعمدة.
دليل خطوة بخطوة
الخطوة 1: تثبيت الحزمة
Aspose.Words FOSS for .NET لم ينشر بعد حزمة NuGet – قم ببناء المكتبة من المصدر بدلاً من ذلك. استنساخ https://github.com/aspose-words-foss/Aspose.Words-FOSS-for-.NET.git، ثم بناء Aspose.Words.sln في إعداد الإصدار باستخدام .NET SDK والإشارة إلى تجميع Aspose.Words الناتج من مشروعك. تستهدف المكتبة .NET Standard 2.0، لذا فهي تعمل على .NET Framework 4.6.2+ و .NET 6/8/10.
الخطوة 2: استيراد الفئات المطلوبة
أضف توجيه using Aspose.Words; – Section، PageSetup، HeaderFooter، والـ enums المرتبطة المستخدمة في هذا الدليل موجودة مباشرة في مساحة الاسم Aspose.Words إلى جانب Document و DocumentBuilder.
الخطوة 3: قراءة الأقسام الموجودة بالفعل في المستند
Document.Sections يُعيد SectionCollection يحتوي على كل Section في المستند، كل منها CompositeNode وهو أيضًا جزء من شجرة العقد الكلية. يُوفر Document.FirstSection وDocument.LastSection وصولًا مباشرًا إلى الأقسام الحدية دون تكرار المجموعة. كل Section يحتوي على Body واحد — يتم الوصول إليه بنفس طريقة أي Story آخر — وعند وجوده، يتم الوصول إلى محتوى الرأس وتذييل الصفحة عبر Section.HeadersFooters.
الخطوة 4: بدء قسم جديد باستخدام فاصل قسم
Call DocumentBuilder.InsertBreak(BreakType) عند المؤشر لبدء قسم جديد. مرّر BreakType.SectionBreakNewPage عندما يجب أن يبدأ القسم الجديد دائمًا في صفحة جديدة، BreakType.SectionBreakContinuous عندما يكون التغيير المطلوب فقط في إعدادات الصفحة (على سبيل المثال، التحويل إلى نص متعدد الأعمدة) دون فرض فاصل صفحة، أو BreakType.SectionBreakNewColumn, SectionBreakEvenPage, و SectionBreakOddPage للسلوكيات الأخرى لبداية القسم التي يدعمها Word. follows ذلك، لذا قم بتعيين PageSetup الخصائص على الجديد Section – ليس السابق قبل ذلك – بمجرد إدراج الفاصل. DocumentBuilder.MoveToSection(sectionIndex) ينقل المؤشر إلى بداية جسم قسم محدد، و PageSetup.SectionStart يقرأ أو يضبط الـ SectionStart نوع الفاصل المسجل مسبقًا على قسم موجود.
الخطوة 5: ضبط أبعاد الصفحة وهوامشها
كل Section.PageSetup هو نسخة من PageSetup. اضبط PageWidth وPageHeight وLeftMargin وRightMargin وTopMargin وBottomMargin وGutter لأبعاد الصفحة وهوامشها، أو عين إعدادًا مسبقًا لـ Margins مباشرةً على PageSetup.Margins. يتحكم Orientation وPaperSize في توجيه الصفحة وحجم الورق. يتم تكوين حدود الصفحة باستخدام Borders (وهو BorderCollection)، وBorderAppliesTo (PageBorderAppliesTo)، وBorderDistanceFrom (PageBorderDistanceFrom)، وBorderAlwaysInFront، وBorderSurroundsHeader، وBorderSurroundsFooter. استدعِ PageSetup.ClearFormatting() لإعادة إعداد صفحة القسم إلى القيم الافتراضية قبل تكوينه من الصفر.
الخطوة 6: إضافة وربط رؤوس وتذييلات الصفحات
Section.HeadersFooters هو HeaderFooterCollection يحتوي على وصولات typed – HeaderPrimary، HeaderFirst، HeaderEven، FooterPrimary، FooterFirst، FooterEven — إلى جانب GetByHeaderFooterType() للبحث بواسطة HeaderFooterType وAdd() لإضافة واحد جديد. كل HeaderFooter هو Story، مع وسم IsHeader وIsLinkedToPrevious. فعّل PageSetup.DifferentFirstPageHeaderFooter أو PageSetup.OddAndEvenPagesHeaderFooter قبل إضافة المتغير المقابل HeaderFirst/FooterFirst أو HeaderEven/FooterEven — العلامة والمتغير لا يعملان إلا معًا. استدعِ HeaderFooterCollection.LinkToPrevious() لإعادة ربط رأس أو تذييل القسم لوراثة محتوى القسم السابق، أو لفصله بحيث يبدأ القسم الجديد بمحتوى مستقل.
الخطوة 7: تنسيق نص الجسم في أعمدة متعددة
PageSetup.TextColumns يُعيد TextColumnCollection للقسم. استدعِ SetCount() مع عدد الأعمدة التي يجب أن يتدفق فيها نص الجسم، ثم عدّل EvenlySpaced، Spacing، LineBetween، وWidth للتحكم في طريقة ترتيب الأعمدة. بمجرد أن يحتوي التجميع على أكثر من عمود واحد، تُظهر حالات TextColumn الفردية Width وSpaceAfter الخاصة بها.
الخطوة 8: مسح أو تحرير محتوى القسم بالجملة
Section.AppendContent() وPrependContent() ينسخان محتوى جسم قسم آخر إلى هذا؛ ClearContent() يفرغ جسم القسم بالجملة. ClearHeadersFooters() وDeleteHeaderFooterShapes() يمسحان محتوى الترويسة والتذييل عبر القسم دون إزالة القسم نفسه.
المشكلات الشائعة والحلول
إعداد صفحة القسم الجديد لا يتطابق مع ما حددته PageSetup تم ضبطه على الخطأ Section مثال. فاصل القسم يحمل التنسيق للقسم التالي – اضبط PageSetup في القسم الذي يأتي بعده InsertBreak(), ليس الذي قبله.
محتوى الرأس أو التذييل من القسم السابق يظهر بشكل غير متوقع في قسم جديد رأس أو تذييل القسم الجديد لا يزال مرتبطًا بالقسم السابق. استدعِ HeaderFooterCollection.LinkToPrevious(false), أو أضف محتوى رأس/تذييل مميز إلى القسم الجديد، لفصله.
رأس/تذييل الصفحة الأولى أو الصفحات الزوجية يتم تجاهله DifferentFirstPageHeaderFooter or OddAndEvenPagesHeaderFooter is false, أو المتطابق HeaderFooterType المتغيّر غير موجود في Section.HeadersFooters. قم بتفعيل العلامة PageSetup وأضف المتغير المقابل للترويسة/التذييل معًا.
تخطيط متعدد الأعمدة غير مطبق TextColumns.SetCount() تم استدعاؤه بعدد واحد، أو في قسم غير صحيح PageSetup. استدعِ SetCount() مع أكثر من عمود في قسم الهدف PageSetup.TextColumns.
تم إدراج فاصل القسم في موقع غير صحيح في المستند DocumentBuilder.InsertBreak(BreakType) يُدرج عند المؤشر الحالي للمنشئ. استخدم DocumentBuilder.MoveToSection() أو أعضاء المؤشر الأخرى في المُنشئ لتحديد موضع المؤشر قبل الاستدعاء InsertBreak().
الأسئلة المتكررة
كيف أبدأ قسماً جديداً دون بدء صفحة جديدة؟
أدخل فاصل SectionBreakContinuous باستخدام DocumentBuilder.InsertBreak(BreakType.SectionBreakContinuous).
كيف أُعطي القسم هوامش وتوجيه خاصة به؟
أدخل فاصل قسم، ثم اضبط TopMargin وBottomMargin وLeftMargin وRightMargin وOrientation وPaperSize على PageSetup الخاص بالقسم الجديد.
كيف أجعل الصفحة الأولى للقسم تستخدم رأسًا مختلفًا؟
قم بتعيين PageSetup.DifferentFirstPageHeaderFooter = true على ذلك القسم، وأضف HeaderFooter من النوع HeaderFirst (وFooterFirst إذا لزم الأمر) إلى مجموعة HeadersFooters الخاصة به.
كيف أقوم بترتيب نص جسم القسم في عمودين؟
استدعِ PageSetup.TextColumns.SetCount(2) على القسم، ثم اضبط Spacing، EvenlySpaced، أو القيم الفردية لـ TextColumn.Width حسب الحاجة.
كيف يمكنني الوصول إلى الأقسام الأولى والأخيرة مباشرةً؟
اقرأ Document.FirstSection وDocument.LastSection بدلاً من الفهرسة في Document.Sections.