Partager via


Supprimer du texte masqué 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 du texte masqué d’un document de traitement de texte.


Structure d’un document WordProcessingML

La structure de base d’un WordProcessingML document se compose des document éléments et body , suivis d’un ou plusieurs éléments de niveau bloc tels que p, qui représente un paragraphe. Un paragraphe contient un ou plusieurs r éléments. l’acronyme r de run, qui est une région de texte avec un ensemble commun de propriétés, telles que la mise en forme. Une exécution contient un ou plusieurs t éléments. L’élément t contient une plage de texte. L’exemple de code suivant montre le WordprocessingML balisage d’un document qui contient le texte « Exemple de texte ».

    <w:document xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main">
      <w:body>
        <w:p>
          <w:r>
            <w:t>Example text.</w:t>
          </w:r>
        </w:p>
      </w:body>
    </w:document>

À l’aide du Kit de développement logiciel (SDK) Open XML, vous pouvez créer une structure de document et du contenu à l’aide de classes fortement typées qui correspondent à WordprocessingML des éléments. Vous trouverez ces classes dans l’espace de DocumentFormat.OpenXml.Wordprocessing noms . Le tableau suivant répertorie les noms de classes des classes qui correspondent aux documentéléments , body, p, ret t .

Élément WordprocessingML Classe du Kit de développement logiciel (SDK) Open XML Description
<document/> Document Élément racine de la partie principale du document.
<body/> Body Conteneur des structures de niveau bloc, telles que paragraphs, tables, annotations et autres structures décrites dans la spécification ISO/IEC 29500.
<p/> Paragraph Paragraphe.
<r/> Run Exécution.
<t/> Text Plage de texte.

Pour plus d’informations sur la structure globale des parties et éléments d’un document WordprocessingML, consultez Structure d’un document WordprocessingML.


Structure de l’élément vanish

L’élément vanish joue un rôle important dans le masquage du texte dans un fichier Word. La Hidden propriété de mise en forme est une propriété bascule, ce qui signifie que son comportement diffère entre son utilisation dans une définition de style et son utilisation comme mise en forme directe. Dans le cadre d’une définition de style, l’affectation d’une valeur à cette propriété entraîne la modification ou non de son état actuel. La définition de la valeur false (ou d’un équivalent) permet de conserver le paramètre actuel inchangé. Toutefois, lorsqu’il est utilisé comme mise en forme directe, définissez-la sur true ou false définit l’état absolu de la propriété résultante.

Les informations suivantes de la spécification ISO/IEC 29500 introduisent l’élément vanish .

vanish (texte masqué)

Cet élément spécifie si le contenu de cette séquence doit être masqué lors de l’affichage d’un document. [Remarque : le paramétrage doit affecter l’affichage normal du texte, mais une application peut modifier les paramètres en forçant l’affichage du texte masqué. Fin de la remarque]

Cette propriété de mise en forme est une propriété bascule (§17.7.3).

Si cet élément n’est pas présent, la valeur par défaut est de laisser la mise en forme appliquée au niveau précédent dans la hiérarchie de style. Si cet élément n’est jamais appliqué dans la hiérarchie de style, ce texte ne doit pas être masqué lorsqu’il est affiché dans un document.

[Exemple : voici une séquence de texte dont la propriété de masquage du texte est activée pour le contenu de la séquence. Cette contrainte est spécifiée à l’aide de la syntaxe WordprocessingML suivante :

    <w:rPr>
      <w:vanish />
    </w:rPr>

Cette séquence déclare que la propriété vanish est définie pour le contenu de la séquence ; par conséquent, le contenu de cette séquence est masqué lors de l’affichage du contenu du document. Fin de l’exemple]

© ISO/IEC 29500 : 2016

Le segment de schéma XML suivant définit le contenu de cet élément.

    <complexType name="CT_OnOff">
       <attribute name="val" type="ST_OnOff"/>
    </complexType>

La val propriété dans le code ci-dessus est une valeur binaire qui peut être activée ou désactivée. Si la valeur onest , 1ou true la propriété est activée. Si la valeur offest , 0ou false la propriété est désactivée.

Fonctionnement du code

La WDDeleteHiddenText méthode fonctionne avec le document que vous spécifiez et supprime tous les run éléments masqués et supprime les éléments supplémentaires vanish . Le code commence par ouvrir le document, en utilisant la Open méthode et en indiquant que le document doit être ouvert pour l’accès en lecture/écriture (paramètre true final). Étant donné le document ouvert, le code utilise la MainDocumentPart propriété pour accéder au document main, en stockant la référence dans une variable.

using (WordprocessingDocument doc = WordprocessingDocument.Open(docName, true))
{

Obtenir une liste d’éléments disparus

Le code vérifie d’abord que doc.MainDocumentPart et doc.MainDocumentPart.Document.Body ne sont pas null et lève une exception s’il en manque une. Utilise ensuite le Descendants() qui lui passe le Vanish type pour obtenir un IEnumerable des Vanish éléments et les caste en liste.

if (doc.MainDocumentPart is null || doc.MainDocumentPart.Document.Body is null)
{
    throw new ArgumentNullException("MainDocumentPart and/or Body is null.");
}

// Get a list of all the Vanish elements
List<Vanish> vanishes = doc.MainDocumentPart.Document.Body.Descendants<Vanish>().ToList();

Supprimer des exécutions avec du texte masqué et des éléments vanish supplémentaires

Pour supprimer le texte masqué, nous effectuons ensuite une boucle sur les List éléments .Vanish L’élément Vanish est un enfant de , RunProperties mais RunProperties peut être un enfant d’un Run ou xref :DocumentFormat.OpenXml.Wordprocessing.ParagraphProperties>. Nous obtenons donc le parent et le grand-parent de chaque Vanish et case activée son type. Ensuite, si le grand-parent est un Run , nous supprimons qui s’exécutent et si ce n’est pas nous supprimons les Vanish éléments enfants du parent.

// Loop over the list of Vanish elements
foreach (Vanish vanish in vanishes)
{
    var parent = vanish?.Parent;
    var grandparent = parent?.Parent;

    // If the grandparent is a Run remove it
    if (grandparent is Run)
    {
        grandparent.Remove();
    }
    // If it's not a run remove the Vanish
    else if (parent is not null)
    {
        parent.RemoveAllChildren<Vanish>();
    }
}

Exemple de code

Remarque

Cet exemple suppose que le fichier en cours d’ouverture contient du texte masqué. Pour masquer une partie du texte du fichier, sélectionnez-la, puis cliquez sur Ctrl+D afin d’afficher la boîte de dialogue Police. Activez la case à cocher Masqué, puis cliquez sur OK.

Voici l’exemple de code complet en C# et en Visual Basic.

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


static void WDDeleteHiddenText(string docName)
{
    // Given a document name, delete all the hidden text.

    using (WordprocessingDocument doc = WordprocessingDocument.Open(docName, true))
    {

        if (doc.MainDocumentPart is null || doc.MainDocumentPart.Document.Body is null)
        {
            throw new ArgumentNullException("MainDocumentPart and/or Body is null.");
        }

        // Get a list of all the Vanish elements
        List<Vanish> vanishes = doc.MainDocumentPart.Document.Body.Descendants<Vanish>().ToList();

        // Loop over the list of Vanish elements
        foreach (Vanish vanish in vanishes)
        {
            var parent = vanish?.Parent;
            var grandparent = parent?.Parent;

            // If the grandparent is a Run remove it
            if (grandparent is Run)
            {
                grandparent.Remove();
            }
            // If it's not a run remove the Vanish
            else if (parent is not null)
            {
                parent.RemoveAllChildren<Vanish>();
            }
        }
    }
}

Voir aussi