Travailler avec les sections
Travailler avec les sections
Un document Word est divisé en une ou plusieurs sections, chacune avec sa propre configuration de page, ses marges, ses en-têtes et ses pieds de page. Aspose.Words FOSS pour .NET représente une section comme une Section noeud, contenant un Body et, éventuellement, des en-têtes et des pieds de page, plus un PageSetup qui contrôle sa mise en page. Cette page couvre le modèle d’objet de section, la configuration de page, les en-têtes et pieds de page, et la mise en page du texte multicolonne.
Le modèle d’objet de section
Document.Sections renvoie un SectionCollection – chaque Section du document, chacun étant un CompositeNode et faisant partie de l’arbre de nœuds. Un Section contient un Body (un Story contenant les paragraphes et tableaux principaux de la section) et, lorsqu’il est présent, des nœuds HeaderFooter accessibles via Section.HeadersFooters, un HeaderFooterCollection. Document.FirstSection et Document.LastSection donnent un accès direct aux sections limites. Section.AppendContent(), PrependContent() et ClearContent() manipulent le contenu du corps d’une section en bloc, tandis que ClearHeadersFooters() et DeleteHeaderFooterShapes() effacent le contenu de l’en-tête/pied de page.
Créer des sections et des sauts de section
DocumentBuilder.InsertBreak(BreakType) insère un saut à la position du curseur ; BreakType inclut SectionBreakNewPage, SectionBreakContinuous, SectionBreakNewColumn, SectionBreakEvenPage et SectionBreakOddPage pour démarrer une nouvelle section, ainsi que les valeurs hors section PageBreak, ColumnBreak, LineBreak et ParagraphBreak. DocumentBuilder.MoveToSection() déplace le curseur au début du corps d’une section spécifique. PageSetup.SectionStart lit ou définit le type de saut SectionStart enregistré sur une section existante.
Configuration de page
Section.PageSetup est une instance PageSetup couvrant les dimensions de page et les marges (PageWidth, PageHeight, TopMargin, BottomMargin, LeftMargin, RightMargin, Gutter), Orientation et PaperSize, et les bordures de page par côté (Borders, BorderAppliesTo via PageBorderAppliesTo, BorderDistanceFrom via PageBorderDistanceFrom, BorderAlwaysInFront, BorderSurroundsHeader, BorderSurroundsFooter). La numérotation des lignes est contrôlée par LineNumberRestartMode, LineNumberCountBy, LineNumberDistanceFromText et LineStartingNumber. PageSetup.ClearFormatting() la réinitialise aux valeurs par défaut.
En-têtes et pieds de page
Section.HeadersFooters est un HeaderFooterCollection avec des accesseurs typés – HeaderPrimary, HeaderFirst, HeaderEven, FooterPrimary, FooterFirst, FooterEven – ainsi que GetByHeaderFooterType(), Add() et LinkToPrevious(). Chaque HeaderFooter est un Story (comme Body) identifié par son HeaderFooterType et marqué IsHeader / IsLinkedToPrevious. PageSetup.DifferentFirstPageHeaderFooter et PageSetup.OddAndEvenPagesHeaderFooter contrôlent si Word attend que les variantes d’en-tête/pied de page de première page et de pages paires soient utilisées.
Colonnes de texte multiples
PageSetup.TextColumns renvoie un TextColumnCollection (Count, EvenlySpaced, LineBetween, Spacing, Width) avec SetCount() pour disposer le corps de la section en plusieurs colonnes. Les colonnes individuelles sont des instances TextColumn (Width, SpaceAfter) une fois la collection remplie avec plus d’une colonne.
Conseils et bonnes pratiques
- Un saut de section porte le formatage de la section qui follows il – définit
PageSetuppropriétés sur unSectionvous venez de créer (aprèsInsertBreak) affecte le contenu qui vient après la pause, pas avant. - Utilisez
SectionBreakContinuouslorsque vous avez seulement besoin d’un changement de configuration de page (par exemple, passer à du texte en colonnes multiples) sans démarrer une nouvelle page; utilisezSectionBreakNewPagelorsque la nouvelle section doit toujours commencer sur une page vierge. HeaderFooterCollection.LinkToPrevious()reconnecte l’en-tête/pied-de-page d’une section pour hériter du contenu de la section précédente — faites-le avant d’écrire du nouveau contenu d’en-tête/pied-de-page si vous voulez que la nouvelle section commence de façon indépendante de la précédente.PageSetup.DifferentFirstPageHeaderFooteretOddAndEvenPagesHeaderFooterne prennent effet que si les variantesHeaderFooterTypecorrespondantes (HeaderFirst,HeaderEven, etc.) existent réellement dansSection.HeadersFooters— activez le drapeau et ajoutez l’en-tête/pied-de-page correspondant ensemble.Section.Bodyet chaqueHeaderFootersont des instancesStorydistinctes —Range.Fields, les signets et d’autres opérations limitées à une plage sur leBodyde la section n’atteignent pas automatiquement ses en-têtes et pieds-de-page.
Problèmes courants
| Problème | Cause | Correction |
|---|---|---|
| La configuration de la page de la nouvelle section ne correspond pas à ce que j’ai défini | PageSetup a été défini sur la mauvaise instance Section | Définir PageSetup sur la section qui follows la coupure, pas celle qui la précède |
| Le contenu d’en-tête/pied de page de la section précédente apparaît de façon inattendue dans une nouvelle section | Les en-têtes/pieds de page de la nouvelle section sont toujours liés à la section précédente | Appelez HeaderFooterCollection.LinkToPrevious(false) (ou ajoutez un contenu d’en-tête/pied de page distinct) pour les dissocier |
| L’en-tête/pied de page de première page ou de page paire est ignoré | DifferentFirstPageHeaderFooter / OddAndEvenPagesHeaderFooter est false, ou la variante correspondante HeaderFooterType n’existe pas | Définissez le drapeau sur PageSetup et assurez-vous que la variante d’en-tête/pied de page correspondante est présente |
| La mise en page multi-colonnes ne s’applique pas | TextColumns.SetCount() a été appelé avec un nombre de 1, ou sur le PageSetup de la mauvaise section | Appelez SetCount() avec plus d’une colonne sur le PageSetup.TextColumns de la section cible |
FAQ
Comment démarrer une nouvelle section sans commencer une nouvelle page?
Insérez un saut SectionBreakContinuous avec DocumentBuilder.InsertBreak(BreakType.SectionBreakContinuous).
Comment donner à une section ses propres marges et son orientation?
Insérez un saut de section, puis définissez les propriétés du PageSetup de la nouvelle section – TopMargin, BottomMargin, LeftMargin, RightMargin, Orientation et PaperSize.
Comment faire en sorte que la première page d’une section utilise un en-tête différent?
Définissez PageSetup.DifferentFirstPageHeaderFooter = true sur cette section, et ajoutez un HeaderFooter de type HeaderFirst (et FooterFirst, si nécessaire) à sa collection HeadersFooters.
Comment mettre en page le texte du corps d’une section en deux colonnes?
Appelez PageSetup.TextColumns.SetCount(2) sur la section, puis ajustez Spacing et EvenlySpaced / les valeurs individuelles de TextColumn.Width selon les besoins.
API Reference Résumé
| Classe / Enum | Description |
|---|---|
Section | Un nœud de section ; Body, HeadersFooters, PageSetup |
SectionCollection | Chaque Section dans le document, via Document.Sections |
Body / Story | Conteneur principal du contenu pour une section (Body) ou un en-tête/pied de page (HeaderFooter) |
PageSetup | Dimensions de la page, marges, orientation, bordures et colonnes pour une section |
HeaderFooter / HeaderFooterCollection | Contenu de l’en-tête/pied de page et les accesseurs typés pour une section |
HeaderFooterType | Identifie quelle variante d’en-tête/pied de page (principal, premier, pair) un HeaderFooter est |
TextColumn / TextColumnCollection | Disposition de texte à plusieurs colonnes pour une section |
PaperSize / Orientation / Margins | Taille de page, orientation et valeurs de marge prédéfinies |
PageBorderAppliesTo / PageBorderDistanceFrom | Sur quelles pages une bordure de page s’imprime, et son bord de référence |
SectionStart / BreakType | Type de rupture de section enregistré sur une section, et les types de rupture DocumentBuilder.InsertBreak() acceptent |
LineNumberRestartMode | Lorsque la numérotation automatique des lignes redémarre dans une section |