Partager via


Supprimer les en-têtes et pieds de page d’un document de traitement de texte

Cette rubrique montre comment utiliser les classes du Kit de développement logiciel (SDK) Open XML pour Office afin de supprimer par programmation tous les en-têtes et pieds de page d’un document de traitement de texte. Elle contient un exemple de méthode RemoveHeadersAndFooters pour illustrer cette tâche.

Méthode RemoveHeadersAndFooters

Vous pouvez utiliser la méthode RemoveHeadersAndFooters pour supprimer toutes les informations d'en-tête et de pied de page d'un document de traitement de texte. N'oubliez pas, vous ne devez pas uniquement supprimer les parties d'en-tête et de pied de page du stockage de documents, mais vous devez également supprimer les références à ces parties du document. L'exemple de code montre les deux étapes de l'opération. La méthode RemoveHeadersAndFooters accepte un seul paramètre, une chaîne qui indique le chemin d'accès du fichier que vous voulez modifier.

    public static void RemoveHeadersAndFooters(string filename)

La liste de code complète pour la méthode se trouve dans la section Exemple de code.

Appel de la méthode de l’exemple

Pour appeler la méthode de l'exemple, transmettez une chaîne pour le premier paramètre qui contient le nom de fichier du document que vous voulez modifier comme indiqué dans l'exemple de code suivant.

    RemoveHeadersAndFooters(@"C:\Users\Public\Documents\Headers.docx");

Fonctionnement du code

La méthode RemoveHeadersAndFooters fonctionne avec le document que vous spécifiez, en supprimant tous les composants d’en-tête et de pied de page, et toutes les références à ces composants. Le code commence par ouvrir le document à l’aide de la méthode Open, en indiquant que le document doit être ouvert en lecture et en écriture (dernier paramètre true). À partir du document ouvert, le code utilise la propriété MainDocumentPart pour accéder au document principal, en stockant la référence dans une variable intitulée docPart.

    // Given a document name, remove all of the headers and footers
    // from the document.
    using (WordprocessingDocument doc = 
        WordprocessingDocument.Open(filename, true))
    {
        // Code removed here...
    }

Confirmation de l’existence d’en-têtes ou de pieds de page

À partir d’une référence du composant de document, le code détermine ensuite si le document contient des en-têtes ou des pieds de page. Pour cela, le code appelle la méthode Count des propriétés HeaderParts et FooterParts du composant de document, et si l’une d’entre elles renvoie une valeur supérieure à 0, le code poursuit son action. N’oubliez pas que les propriétés HeaderParts et FooterParts renvoient respectivement une interface IEnumerable d’objets HeaderPart ou FooterPart.

    // Get a reference to the main document part.
    var docPart = doc.MainDocumentPart;

    // Count the header and footer parts and continue if there 
    // are any.
    if (docPart.HeaderParts.Count() > 0 || 
        docPart.FooterParts.Count() > 0)
    {
        // Code removed here...
    }

Avec une collection de références à des parties d’en-tête et de pied de page, vous pouvez écrire du code pour supprimer chacune d’elles individuellement, mais cela n’est pas nécessaire en raison du Kit de développement logiciel (SDK) Open XML. À la place, vous pouvez appeler la méthode DeleteParts<T>, en transmettant la collection de composants à supprimer. Cette méthode simple vous permet de supprimer rapidement une collection de composants. Ainsi, les lignes de code suivantes remplacent la boucle de code que vous auriez dû écrire vous-même.

    // Remove the header and footer parts.
    docPart.DeleteParts(docPart.HeaderParts);
    docPart.DeleteParts(docPart.FooterParts);

Utilisation du contenu du document

À ce stade, le code a supprimé les parties d'en-tête et de pied de page, mais le document contient encore des références orphelines à ces parties. Pour pouvoir supprimer les références orphelines, le code doit récupérer une référence au contenu du document (c'est-à-dire, au contenu XML présent dans la partie du document principal). Ensuite, une fois les modifications apportées, le code doit s'assurer qu'elles sont conservées en les enregistrant explicitement. Entre ces deux opérations, le code doit supprimer les références orphelines, comme indiqué dans la section qui suit l'exemple de code ci-après.

    // Get a reference to the root element of the main
    // document part.
    Document document = docPart.Document;
        // Code removed here...
    // Save the changes.
    document.Save();

Pour supprimer les références inutilisées, le code récupère d’abord une collection d’éléments HeaderReference, convertit la collection en liste, puis exécute en boucle la collection en appelant la méthode Remove pour chaque élément trouvé. Notez que le code convertit le IEnumerable retourné par la méthode Descendants en list afin qu’il puisse supprimer des éléments de la liste, et que le type HeaderReference fourni par le Kit de développement logiciel (SDK) Open XML facilite la référence aux éléments de type HeaderReference dans le contenu XML. (Sans cette aide supplémentaire, vous auriez dû travailler directement avec les détails du contenu XML.) Une fois tous les en-têtes supprimés, le code répète l’opération pour les éléments de pied de page.

    // Remove all references to the headers and footers.

    // First, create a list of all descendants of type
    // HeaderReference. Then, navigate the list and call
    // Remove on each item to delete the reference.
    var headers =
      document.Descendants<HeaderReference>().ToList();
    foreach (var header in headers)
    {
        header.Remove();
    }

    // First, create a list of all descendants of type
    // FooterReference. Then, navigate the list and call
    // Remove on each item to delete the reference.
    var footers =
      document.Descendants<FooterReference>().ToList();
    foreach (var footer in footers)
    {
        footer.Remove();
    }

Exemple de code

Voici l'exemple de code RemoveHeadersAndFooters complet en C# et Visual Basic

using DocumentFormat.OpenXml.Packaging;
using DocumentFormat.OpenXml.Wordprocessing;
using System;
using System.Linq;

RemoveHeadersAndFooters(args[0]);

// Remove all of the headers and footers from a document.
static void RemoveHeadersAndFooters(string filename)
{
    // Given a document name, remove all of the headers and footers
    // from the document.
    using (WordprocessingDocument doc = WordprocessingDocument.Open(filename, true))
    {
        if (doc.MainDocumentPart is null)
        {
            throw new ArgumentNullException("MainDocumentPart is null.");
        }

        // Get a reference to the main document part.
        var docPart = doc.MainDocumentPart;

        // Count the header and footer parts and continue if there 
        // are any.
        if (docPart.HeaderParts.Count() > 0 ||
            docPart.FooterParts.Count() > 0)
        {
            // Remove the header and footer parts.
            docPart.DeleteParts(docPart.HeaderParts);
            docPart.DeleteParts(docPart.FooterParts);

            // Get a reference to the root element of the main
            // document part.
            Document document = docPart.Document;

            // Remove all references to the headers and footers.

            // First, create a list of all descendants of type
            // HeaderReference. Then, navigate the list and call
            // Remove on each item to delete the reference.
            var headers =
              document.Descendants<HeaderReference>().ToList();
            foreach (var header in headers)
            {
                header.Remove();
            }

            // First, create a list of all descendants of type
            // FooterReference. Then, navigate the list and call
            // Remove on each item to delete the reference.
            var footers =
              document.Descendants<FooterReference>().ToList();
            foreach (var footer in footers)
            {
                footer.Remove();
            }

            // Save the changes.
            document.Save();
        }
    }
}