Робота з розділами

Робота з розділами

Документ 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 з типізованими доступниками — 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 перерву, а не попередню
Вміст Header/footer з попереднього розділу неочікувано з’являється в новому розділіHeaders/footers нового розділу все ще пов’язані з попереднім розділомВикличте HeaderFooterCollection.LinkToPrevious(false) (або додайте окремий вміст header/footer), щоб відв’язати їх
Header/footer першої або парної сторінки ігнорується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Коли автоматичне нумерування рядків перезапускається всередині розділу

Дивіться також

 Українська