Comment travailler avec des documents dans .NET

Comment travailler avec des documents dans .NET

Ce guide montre comment travailler avec le modèle d’objet Document dans Aspose.Words FOSS pour .NET : créer un document vierge, charger en toute sécurité un document existant, parcourir sa structure section/corps, combiner des documents et appliquer une restriction d’édition. Aspose.Words FOSS pour .NET est disponible via NuGet ou en le construisant à partir des sources.

Guide étape par étape

Étape 1: Obtenir la bibliothèque

Clonez le dépôt et compilez Aspose.Words.sln en configuration Release, puis ajoutez une référence de projet à Aspose.Words.csproj de votre propre projet .NET. Les commandes complètes de clonage et de compilation se trouvent dans le Guide d’installation. Une fois référencé, ajoutez using Aspose.Words; en haut de tout fichier qui travaille avec des documents.


Étape 2: Créer ou charger un document

Appelez new Document() pour obtenir un document vierge, ou transmettez un chemin de fichier ou Stream au constructeur Document(fileName) / Document(stream) pour ouvrir un document existant. Une surcharge qui accepte un argument LoadOptions vous permet de fournir un mot de passe pour un fichier chiffré. Avant de charger un fichier dont le format n’est pas encore fiable, appelez FileFormatUtil.DetectFileFormat(fileName) — elle renvoie un FileFormatInfo indiquant le LoadFormat détecté et si le fichier IsEncrypted, HasDigitalSignature ou HasMacros, afin que vous puissiez rejeter les entrées inattendues avant que Document ne tente de l’analyser.


Étape 3 : Rédiger le contenu avec DocumentBuilder

DocumentBuilder enveloppe un Document avec un curseur que vous déplacez à travers l’arbre tout en insérant du contenu. Write(text) et Writeln(text) insèrent du texte au curseur, et InsertParagraph() démarre un nouveau paragraphe. Le formatage défini sur les propriétés Font, ParagraphFormat, ListFormat et PageSetup du constructeur s’applique à tout ce que vous écrivez ensuite. Repositionnez le curseur avec MoveToDocumentStart(), MoveToDocumentEnd(), MoveToSection(sectionIndex), MoveToBookmark(bookmarkName) ou MoveToParagraph(paragraphIndex, characterIndex), et lisez CurrentNode / CurrentParagraph / CurrentSection pour confirmer où le constructeur est positionné.


Étape 4 : Inspecter la structure de la section et du corps

Un Document expose un SectionCollection via Document.Sections (plus FirstSection / LastSection). Chaque Section possède exactement un Body, dont le contenu principal est accessible via Body.Paragraphs (un ParagraphCollection) et Body.Tables. Pour lire ou rechercher du texte sans parcourir les nœuds manuellement, utilisez le Range disponible sur Document, Section, Paragraph et d’autres nœuds — Range.Text renvoie son texte brut, et Range.Replace(pattern, replacement) effectue une recherche-remplacement limitée à cette plage.


Étape 5 : Combiner deux documents

Pour copier un document entier, appelez Document.Clone(). Pour transférer un contenu spécifique d’une instance Document à une autre, appelez ImportNode(srcNode, isImportChildren) sur le document de destination, ou appelez Document.AppendDocument(srcDoc, importFormatMode) pour ajouter chaque section d’un document source à la fin du document actuel. DocumentBuilder.InsertDocument(srcDoc, importFormatMode) fait la même chose mais insère au curseur du constructeur plutôt qu’à la fin. Dans les trois cas, choisissez délibérément la valeur ImportFormatMode — KeepSourceFormatting, UseDestinationStyles ou KeepDifferentStyles — car elle détermine quels styles de document prévalent lorsque les deux entrent en conflit.


Étape 6 : Appliquer une restriction de modification

Appelez Document.Protect(type, password) avec une valeur ProtectionType — ReadOnly, AllowOnlyComments, AllowOnlyRevisions ou AllowOnlyFormFields — pour restreindre les modifications que Word accepte pour le document. Unprotect() (avec ou sans le mot de passe correspondant) supprime la restriction. Cela n’affecte que la modification dans Word; cela n’encrypte pas le fichier enregistré. Pour exiger un mot de passe uniquement à l’ouverture du fichier, définissez OoxmlSaveOptions.Password lors de l’enregistrement.

Problèmes courants et solutions

Document(fileName) génère une exception pour un fichier qui s’ouvre correctement dans Word. Le format du fichier n’est pas pris en charge par les chargeurs de cette édition. Appelez FileFormatUtil.DetectFileFormat(fileName) d’abord, vérifiez ce qui est retourné LoadFormat avant d’essayer de charger.

Le contenu copié entre les documents récupère les mauvaises polices ou styles. Le ImportFormatMode transmis à AppendDocument or InsertDocument ne correspond pas à ce que vous attendiez. Passez KeepSourceFormatting or UseDestinationStyles explicitement plutôt que de vous fier à une valeur par défaut.

Unprotect() semble n’avoir aucun effet. Soit le document n’était pas protégé par un mot de passe (call Unprotect() without arguments), ou le mot de passe fourni ne correspond pas à celui Protect() avec lequel il a été appelé.

Mise en forme appliquée via DocumentBuilder n’apparaît pas là où elle est attendue. Mise en forme au niveau du constructeur (Font, ParagraphFormat) ne s’applique qu’au contenu écrit after it’s set. Déplacez le curseur et set formatting avant d’appeler Write/Writeln, pas après.

Foire aux questions

Comment créer un nouveau document Word vide?

Appelez new Document(). Enveloppez-le avec un DocumentBuilder pour commencer à insérer du contenu immédiatement.

Quelle est la différence entre Document.Clone() et ImportNode?

Clone() copie un document entier dans une nouvelle instance de Document. ImportNode(srcNode, isImportChildren) transfère un nœud unique — et éventuellement ses enfants — d’un arbre de document à un autre, ce qui vous permet de combiner du contenu spécifique plutôt que des documents entiers.

Comment vérifier en toute sécurité le format d’un fichier avant de le charger?

Appelez FileFormatUtil.DetectFileFormat(fileName) (ou la surcharge Stream) et inspectez les propriétés LoadFormat, IsEncrypted, HasDigitalSignature et HasMacros de l’FileFormatInfo retourné avant de transmettre le fichier à Document.

Comment lire uniquement les paragraphes à l’intérieur du corps d’un document?

Utilisez la collection Body.Paragraphs sur le Body de la section, ou Body.GetChildNodes(nodeType, isDeep) pour d’autres types de nœuds.

Est-ce que Document.Protect chiffre le fichier enregistré?

Non — c’est une restriction d’édition que Word applique lorsque le fichier est ouvert. Pour obliger un mot de passe à ouvrir le fichier lui-même, définissez OoxmlSaveOptions.Password lors de l’appel de Document.Save.

Voir aussi

 Français