Travailler avec du texte
Travailler avec le texte
Le texte d’un document Word est organisé en nœuds Run (caractères contigus partageant la même mise en forme de police) regroupés dans des nœuds Paragraph. Aspose.Words FOSS pour .NET expose les deux directement, ainsi que Font pour la mise en forme des caractères, ParagraphFormat pour la mise en forme au niveau du paragraphe, et Range pour la lecture ou le remplacement de texte sur n’importe quelle partie de l’arbre. Ce guide couvre les runs et les polices, la mise en forme des paragraphes, la lecture et le remplacement de texte, les commentaires et la mise en forme des listes au niveau du paragraphe.
Runs et mise en forme des caractères
Un Run représente une plage de texte qui partage un même jeu de mise en forme; sa propriété Text contient le contenu en texte brut et sa propriété Font (un objet Font) contient la mise en forme au niveau des caractères — Name, Size, Bold, Italic, Underline, Color, HighlightColor, Subscript/Superscript, StrikeThrough, et bien d’autres. Font.ClearFormatting() réinitialise la police d’un run aux valeurs par défaut. Les runs d’un paragraphe sont accessibles via sa propriété Runs, un RunCollection.
Paragraphes et mise en forme des paragraphes
Paragraph est un nœud composite contenant les runs (et autre contenu en ligne) d’un paragraphe ; les paragraphes d’un document ou d’un corps sont exposés comme un ParagraphCollection (Body.Paragraphs). Paragraph.ParagraphFormat (un objet ParagraphFormat) contrôle la mise en page au niveau du paragraphe — Alignment, retraits (LeftIndent, RightIndent, FirstLineIndent), espacement (SpaceBefore, SpaceAfter, LineSpacing, LineSpacingRule), et comportement de pagination (KeepTogether, KeepWithNext, PageBreakBefore, WidowControl). ParagraphFormat.ClearFormatting() réinitialise ceux-ci aux valeurs par défaut, et Paragraph.JoinRunsWithSameFormatting() fusionne les runs adjacents qui ont une mise en forme identique.
Lecture et remplacement du texte avec Range
Chaque nœud qui contient du contenu — un Document, Section, Paragraph ou Run — expose un Range. Range.Text renvoie le texte brut de tout ce qui se trouve dans cette plage, et Range.Replace(pattern, replacement) effectue une recherche-remplacement limitée à cette plage, de sorte que vous pouvez, par exemple, remplacer du texte à l’intérieur d’un paragraphe sans toucher au reste du document. Range.Delete() supprime le contenu de la plage entièrement.
Comments
Un nœud Comment ancre un commentaire à un emplacement dans le texte; créez-en un avec new Comment(doc, author, initial, dateTime) et définissez son texte principal avec SetText(text), puis insérez-le dans le document comme n’importe quel autre nœud. Comment.AddReply(author, initial, dateTime, text) ajoute une réponse en chaîne, et RemoveReply(reply) / RemoveAllReplies() les suppriment. Les commentaires d’un document sont rassemblés dans un CommentCollection.
Mise en forme des listes au niveau du paragraphe
Paragraph.ListFormat (un objet ListFormat) indique et contrôle si un paragraphe fait partie d’une liste: IsListItem et ListLevelNumber rapportent son état actuel, ApplyBulletDefault() et ApplyNumberDefault() transforment un paragraphe en élément de liste à puces ou numéroté par défaut, ListIndent() / ListOutdent() modifient son niveau d’imbrication dans la liste, et RemoveNumbers() le reconvertit en paragraphe ordinaire.
Conseils et meilleures pratiques
- Définissez les propriétés de police sur
DocumentBuilder.Fontavant d’écrire du texte avec le constructeur plutôt que d’écrire le texte d’abord et de reformater ensuite les objetsRunindividuellement. - Limitez la portée de
Range.Replaceà la plus petite plage qui couvre ce que vous souhaitez réellement modifier — appelez-le sur la plage d’unParagraphou d’unSectionplutôt que sur l’ensemble du document lorsque la modification ne doit pas s’appliquer à tout le document. - Appelez
Paragraph.JoinRunsWithSameFormatting()après une série de modifications programmatiques afin d’éviter une structure de cours inutilement fragmentée. - Utilisez
ListFormat.ApplyBulletDefault()/ApplyNumberDefault()pour obtenir rapidement une liste par défaut plutôt que de construire les définitions de listes manuellement lorsque les valeurs par défaut intégrées sont suffisantes. - Lisez les résultats de
Comment.AddReplyen tant que nœudsCommenteux-mêmes — les réponses sont des objets de commentaire complets, pas de simples chaînes.
Problèmes courants
| Problème | Cause | Correction |
|---|---|---|
Le formatage d’un Run Font ne modifie pas visuellement le texte adjacent | Le texte adjacent se trouve dans un Run différent avec sa propre instance Font | Localisez et formatez chaque Run affecté, ou définissez le formatage via DocumentBuilder.Font avant l’écriture |
Range.Replace modifie le texte en dehors de la zone prévue | Replace a été appelé sur Document.Range au lieu de la plage d’un nœud plus restreint | Appelez Replace sur le Paragraph spécifique, Section, ou le Range d’un autre nœud |
Un paragraphe ressemble à un élément de liste mais IsListItem est faux | Le puce/numéro est du texte manuel, pas une vraie mise en forme de liste | Appliquez une vraie mise en forme de liste avec ListFormat.ApplyBulletDefault() ou ApplyNumberDefault() au lieu de caractères tapés |
Le document comporte beaucoup plus de nœuds Run que prévu | Des petites modifications répétées divisent les séquences sans les rejoindre | Appelez Paragraph.JoinRunsWithSameFormatting() après des lots de modifications |
FAQ
Quelle est la différence entre Run et Paragraph?
Un Run est une tranche de texte partageant un même jeu de formatage de caractères (Font); un Paragraph est le nœud composite qui contient un ou plusieurs runs (et d’autres contenus en ligne) ainsi que le formatage au niveau du paragraphe (ParagraphFormat).
Comment lire tout le texte d’un document ou d’une section?
Lisez la propriété Text du Range de ce nœud — par exemple, document.Range.Text ou section.Range.Text.
Comment puis-je rechercher et remplacer du texte dans un seul paragraphe?
Appelez Replace(pattern, replacement) sur le Range de ce Paragraph plutôt que sur Document.Range.
Comment ajouter un commentaire à un document?
Créez-le avec new Comment(doc, author, initial, dateTime), définissez son texte avec SetText(text) et insérez-le dans l’arbre; répondez-lui avec Comment.AddReply(author, initial, dateTime, text).
Comment transformer un paragraphe en élément de liste à puces?
Appelez ApplyBulletDefault() sur le ListFormat de ce paragraphe; utilisez ApplyNumberDefault() pour une liste numérotée à la place.
API Reference Résumé
| Classe/Méthode | Description |
|---|---|
Run | Un span de texte partageant un même ensemble de formatage de caractères. |
Font | Mise en forme au niveau des caractères — nom, taille, gras, italique, couleur, et plus. |
Paragraph | Nœud composite contenant les runs et la mise en forme d’un paragraphe. |
ParagraphFormat | Mise en forme au niveau du paragraphe — alignement, retraits, espacement, pagination. |
ParagraphCollection | Collection typée de nœuds Paragraph, par ex. Body.Paragraphs. |
Range | Une zone contiguë du document ; prend en charge Text, Replace et Delete. |
Comment | Un commentaire en fil de discussion ancré à un emplacement dans le texte. |
CommentCollection | La collection de commentaires du document. |
ListFormat | Contrôle si et comment un paragraphe participe à une liste. |