Travailler avec des sections

Parfois, vous souhaitez un document qui n’a pas le même formatage sur toutes les pages. Par exemple, vous devrez peut-être modifier les formats de numéro de page, avoir une taille et une orientation de page différentes, ou avoir la première page du document comme page de couverture sans aucune numérotation. Vous pouvez y parvenir avec des sections.

Les sections sont des nœuds de niveau qui contrôlent les en-têtes et pieds de page, l’orientation, les colonnes, les marges, le formatage des numéros de page, etc.

Aspose.Words vous permet de gérer les sections, de diviser un document en sections et d’apporter des modifications de formatage qui s’appliquent uniquement à une section spécifique. Aspose.Words stocke des informations sur le formatage des sections telles que les en-têtes et pieds de page, la mise en page et les paramètres de colonne dans le saut de section.

Cet article explique comment utiliser les sections et les sauts de section.

Qu’est-ce qu’une section et un saut de section

Les sections du document sont représentées par les classes Section et SectionCollection. Les objets section sont des enfants immédiats du nœud Document et sont accessibles via la propriété Sections. Vous pouvez gérer ces nœuds en utilisant certaines méthodes telles que Remove, Add, IndexOf et autres.

Le saut de section est une option qui divise les pages du document en sections avec des mises en page personnalisables.

Types de saut de section

Aspose.Words vous permet de diviser et de formater des documents en utilisant différents sauts de section de l’énumération BreakType:

  • SectionBreakContinu
  • SectionBreakNewColumn
  • SectionBreakNewPage
  • SectionBreakEvenPage
  • SectionBreakOddPage

Vous pouvez également utiliser l’énumération SectionStart pour choisir un type de saut qui s’applique uniquement à la première section, tel que NewColumn, NewPage, EvenPage et OddPage.

Gérer une rubrique

Puisqu’une section est un nœud composite normal, l’ensemble de la manipulation de nœud API peut être utilisé pour manipuler des sections: pour ajouter, supprimer et d’autres opérations sur les sections. Vous pouvez en savoir plus sur les nœuds dans l’article Aspose.Words Document Object Model (DOM).

D’un autre côté, vous pouvez également utiliser le DocumentBuilder API pour travailler avec des sections. Dans cet article, nous allons nous concentrer sur cette manière particulière de travailler avec les sections.

Insérer ou supprimer un saut de section

Aspose.Words vous permet d’insérer un saut de section dans le texte à l’aide de la méthode InsertBreak.

L’exemple de code suivant montre comment insérer un saut de section dans un document:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET.git.
/// <summary>
/// Insert section breaks before the specified paragraphs.
/// </summary>
private void InsertSectionBreaks(List<Paragraph> topicStartParas)
{
DocumentBuilder builder = new DocumentBuilder(mDoc);
foreach (Paragraph para in topicStartParas)
{
Section section = para.ParentSection;
// Insert section break if the paragraph is not at the beginning of a section already.
if (para != section.Body.FirstParagraph)
{
builder.MoveTo(para.FirstChild);
builder.InsertBreak(BreakType.SectionBreakNewPage);
// This is the paragraph that was inserted at the end of the now old section.
// We don't really need the extra paragraph, we just needed the section.
section.Body.LastParagraph.Remove();
}
}
}

Utilisez la méthode Remove pour supprimer un saut de section. Si vous n’avez pas besoin de supprimer un saut de section spécifique mais de supprimer le contenu de cette section, vous pouvez utiliser la méthode ClearContent.

L’exemple de code suivant montre comment supprimer les sauts de section:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET.git.
private void RemoveSectionBreaks(Document doc)
{
// Loop through all sections starting from the section that precedes the last one and moving to the first section.
for (int i = doc.Sections.Count - 2; i >= 0; i--)
{
// Copy the content of the current section to the beginning of the last section.
doc.LastSection.PrependContent(doc.Sections[i]);
// Remove the copied section.
doc.Sections[i].Remove();
}
}

Déplacer une section

Si vous souhaitez déplacer une section d’une position à une autre dans votre document, vous devez obtenir l’index de cette section. Aspose.Words vous permet d’obtenir une position de section à partir d’un SectionCollection en utilisant la propriété Item. Vous pouvez utiliser la propriété Sections pour obtenir toutes les sections de votre document. Mais si vous souhaitez obtenir uniquement la première section, vous pouvez utiliser la propriété FirstSection.

L’exemple de code suivant montre comment accéder à la première section et parcourir les enfants d’un nœud composite:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET.git.
Document doc = new Document();
DocumentBuilder builder = new DocumentBuilder(doc);
builder.Write("Section 1");
builder.MoveToHeaderFooter(HeaderFooterType.HeaderPrimary);
builder.Write("Primary header");
builder.MoveToHeaderFooter(HeaderFooterType.FooterPrimary);
builder.Write("Primary footer");
Section section = doc.FirstSection;
// A Section is a composite node and can contain child nodes,
// but only if those child nodes are of a "Body" or "HeaderFooter" node type.
foreach (Node node in section)
{
switch (node.NodeType)
{
case NodeType.Body:
{
Body body = (Body)node;
Console.WriteLine("Body:");
Console.WriteLine($"\t\"{body.GetText().Trim()}\"");
break;
}
case NodeType.HeaderFooter:
{
HeaderFooter headerFooter = (HeaderFooter)node;
Console.WriteLine($"HeaderFooter type: {headerFooter.HeaderFooterType}:");
Console.WriteLine($"\t\"{headerFooter.GetText().Trim()}\"");
break;
}
default:
{
throw new Exception("Unexpected node type in a section.");
}
}
}

Spécifier une disposition de section

Parfois, vous souhaitez améliorer l’apparence de votre document en créant des mises en page créatives pour différentes sections du document. Si vous souhaitez spécifier le type de la grille de section actuelle, vous pouvez choisir un mode de disposition des sections à l’aide de l’énumération SectionLayoutMode:

  • Défaut
  • Grille
  • Grille de lignes
  • SnapToChars

L’exemple de code suivant montre comment limiter le nombre de lignes que chaque page peut contenir:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET.git.
Document doc = new Document();
DocumentBuilder builder = new DocumentBuilder(doc);
// Enable pitching, and then use it to set the number of lines per page in this section.
// A large enough font size will push some lines down onto the next page to avoid overlapping characters.
builder.PageSetup.LayoutMode = SectionLayoutMode.LineGrid;
builder.PageSetup.LinesPerPage = 15;
builder.ParagraphFormat.SnapToGrid = true;
for (int i = 0; i < 30; i++)
builder.Write("Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. ");
doc.Save(ArtifactsDir + "WorkingWithDocumentOptionsAndSettings.LinesPerPage.docx");

Modifier une section

Lorsque vous ajoutez une nouvelle section à votre document, vous ne pourrez modifier aucun corps ni paragraphe. Aspose.Words vous permet de garantir qu’une section contient un corps avec au moins un paragraphe en utilisant la méthode EnsureMinimum – il ajoutera automatiquement un nœud Body (ou HeaderFooter) au document puis y ajoutera un paragraphe.

L’exemple de code suivant montre comment préparer un nouveau nœud de section à l’aide de EnsureMinimum:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET.git.
Document doc = new Document();
// If we add a new section like this, it will not have a body, or any other child nodes.
doc.Sections.Add(new Section(doc));
// Run the "EnsureMinimum" method to add a body and a paragraph to this section to begin editing it.
doc.LastSection.EnsureMinimum();
doc.Sections[0].Body.FirstParagraph.AppendChild(new Run(doc, "Hello world!"));

Ajouter ou ajouter du contenu

Si vous souhaitez dessiner une forme ou ajouter du texte ou une image au début/fin d’une section, vous pouvez utiliser les méthodes AppendContent et PrependContent de la classe Section.

L’exemple de code suivant montre comment ajouter le contenu d’une section existante:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET.git.
Document doc = new Document();
DocumentBuilder builder = new DocumentBuilder(doc);
builder.Write("Section 1");
builder.InsertBreak(BreakType.SectionBreakNewPage);
builder.Write("Section 2");
builder.InsertBreak(BreakType.SectionBreakNewPage);
builder.Write("Section 3");
Section section = doc.Sections[2];
// Insert the contents of the first section to the beginning of the third section.
Section sectionToPrepend = doc.Sections[0];
section.PrependContent(sectionToPrepend);
// Insert the contents of the second section to the end of the third section.
Section sectionToAppend = doc.Sections[1];
section.AppendContent(sectionToAppend);

Cloner une section

Aspose.Words vous permet de dupliquer une section en en créant une copie complète à l’aide de la méthode Clone.

L’exemple de code suivant montre comment cloner la première section de votre document:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET.git.
Document doc = new Document(MyDir + "Document.docx");
Section cloneSection = doc.Sections[0].Clone();

Copier des sections entre des documents

Dans certains cas, vous pouvez avoir des documents volumineux comportant de nombreuses sections et vous souhaitez copier le contenu d’une section d’un document à un autre.

Aspose.Words vous permet de copier des sections entre des documents en utilisant la méthode ImportNode.

L’exemple de code suivant montre comment copier des sections entre des documents:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET.git.
Document srcDoc = new Document(MyDir + "Document.docx");
Document dstDoc = new Document();
Section sourceSection = srcDoc.Sections[0];
Section newSection = (Section)dstDoc.ImportNode(sourceSection, true);
dstDoc.Sections.Add(newSection);
dstDoc.Save(ArtifactsDir + "WorkingWithSection.CopySection.docx");
view raw copy-section.cs hosted with ❤ by GitHub

Travailler avec l’en-tête et le pied de page de section

Les règles de base pour afficher un en-tête ou un pied de page pour chaque section sont assez simples:

  1. Si la section ne possède pas ses propres en-têtes/pieds de page d’un certain type, elle est alors extraite de la section précédente.
  2. Le type d’en-tête/pied de page affiché sur la page est contrôlé par les paramètres des sections “Première page différente” et “Pages paires et impaires différentes” – s’ils sont désactivés, les titres de la section sont ignorés.

L’exemple de code suivant montre comment créer 2 sections avec des en-têtes différents:

Si vous souhaitez supprimer le texte des en-têtes et des pieds de page sans supprimer les objets HeaderFooter de votre document, vous pouvez utiliser la méthode ClearHeadersFooters. De plus, vous pouvez utiliser la méthode DeleteHeaderFooterShapes pour supprimer toutes les formes des en-têtes et pieds de page de votre document.

L’exemple de code suivant montre comment effacer le contenu de tous les en-têtes et pieds de page d’une section:

L’exemple de code suivant montre comment supprimer toutes les formes de tous les en-têtes et pieds de page d’une section:

Personnaliser les propriétés de la page dans une section

Avant d’imprimer une page ou un document, vous souhaiterez peut-être personnaliser et modifier la taille et la mise en page d’une seule page ou de l’ensemble du document. Avec la mise en page, vous pouvez modifier les paramètres des pages du document tels que les marges, l’orientation et la taille pour imprimer différentes premières pages ou des pages impaires.

Aspose.Words vous permet de personnaliser les propriétés des pages et des sections à l’aide de la classe PageSetup.

L’exemple de code suivant montre comment définir des propriétés telles que la taille et l’orientation de la page pour la section actuelle:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET.git.
Document doc = new Document();
DocumentBuilder builder = new DocumentBuilder(doc);
builder.PageSetup.Orientation = Orientation.Landscape;
builder.PageSetup.LeftMargin = 50;
builder.PageSetup.PaperSize = PaperSize.Paper10x14;
doc.Save(ArtifactsDir + "WorkingWithDocumentOptionsAndSettings.PageSetupAndSectionFormatting.docx");

L’exemple de code suivant montre comment modifier les propriétés de la page dans toutes les sections:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET.git.
Document doc = new Document();
DocumentBuilder builder = new DocumentBuilder(doc);
builder.Writeln("Section 1");
doc.AppendChild(new Section(doc));
builder.Writeln("Section 2");
doc.AppendChild(new Section(doc));
builder.Writeln("Section 3");
doc.AppendChild(new Section(doc));
builder.Writeln("Section 4");
// It is important to understand that a document can contain many sections,
// and each section has its page setup. In this case, we want to modify them all.
foreach (Section section in doc)
section.PageSetup.PaperSize = PaperSize.Letter;
doc.Save(ArtifactsDir + "WorkingWithSection.ModifyPageSetupInAllSections.doc");

Voir également