Introduction
Aspose.Words FOSS pour .NET inclut le même modèle d’objets de mise en forme du texte que le moteur commercial Aspose.Words : Font pour les attributs au niveau du run, ParagraphFormat pour les attributs au niveau du paragraphe, ListFormat pour les listes numérotées et à puces, FrameFormat pour les cadres de texte positionnés, et Range.Replace pour la recherche-et-remplacement. Ce guide porte spécifiquement sur cette couche — la mise en forme et la réécriture du texte déjà présent dans un document — plutôt que sur la construction de la structure d’un document à partir de zéro (voir le post d’introduction pour un aperçu de la version).
La bibliothèque est sous licence MIT, sans dépendances natives, et cible .NET Standard 2.0, elle fonctionne donc sur .NET Framework 4.6.2+ et .NET 6, 8 et 10. Installez-la via NuGet, ou compilez-la à partir des sources (voir le Démarrage rapide ci-dessous). Tout ce qui est décrit ici fonctionne avec .docx, .docm, .dotx, .dotm et les fichiers Flat OPC chargés avec new Document(fileName), ou avec des documents construits en mémoire avec DocumentBuilder.
Parce que Aspose.Words FOSS pour .NET est le véritable code source Aspose.Words réduit à un noyau gratuit plutôt qu’une réécriture, le modèle d’objets Font, ParagraphFormat, ListFormat et FrameFormat se transfère directement vers le commercial Aspose.Words pour .NET si un projet a plus tard besoin de mise en page, de rendu ou des convertisseurs de formats supplémentaires que cette édition exclut.
Fonctionnalités clés
Mise en forme au niveau du run avec police
Chaque Run expose une propriété Font, et DocumentBuilder.Font définit la police qui sera appliquée au texte écrit ensuite. En plus des évidents Bold, Italic et Underline (une énumération Underline avec des valeurs incluant Single, Double, Dotted, Dash, Wavy et leurs variantes *Heavy), Font couvre StrikeThrough, DoubleStrikeThrough, Superscript, Subscript, SmallCaps, AllCaps, Hidden, Shadow, Outline, Emboss, Engrave, Color, HighlightColor, Spacing, Position, Kerning, Scaling et EmphasisMark. Font.Style, Font.StyleName et Font.StyleIdentifier lient un run à un style de caractère, et Font.ClearFormatting() réinitialise la mise en forme directe d’un run à ses valeurs par défaut du style. DocumentBuilder expose également Bold, Italic et Underline directement comme raccourcis, ainsi que PushFont() et PopFont() pour enregistrer et restaurer l’état actuel de la police du constructeur autour d’un changement de mise en forme temporaire.
Mise en forme des paragraphes avec ParagraphFormat
ParagraphFormat (accessible via Paragraph.ParagraphFormat ou DocumentBuilder.ParagraphFormat) contrôle l’alignement via l’énumération ParagraphAlignment (Left, Center, Right, Justify, Distributed, ainsi que les variantes kashida arabes et distribuées thaïes), l’indentation via LeftIndent, RightIndent et FirstLineIndent (avec des équivalents CharacterUnit* pour les dispositions d’Asie de l’Est), et l’espacement via SpaceBefore, SpaceAfter et LineSpacingRule/LineSpacing. Le comportement de pagination est contrôlé avec KeepTogether, KeepWithNext, PageBreakBefore et WidowControl, et Bidi indique qu’un paragraphe est de droite à gauche. Les tabulations personnalisées résident dans ParagraphFormat.TabStops, un TabStopCollection de TabStop objets, chacun contenant un Position, un TabAlignment (Left, Center, Right, Decimal, Bar), et un TabLeader (None, Dots, Dashes, Line, Heavy, MiddleDot). Comme avec Font, ParagraphFormat.Style et StyleName lient le paragraphe à un Style nommé, et ClearFormatting() supprime le formatage direct du paragraphe.
Listes avec ListFormat
ListFormat (sur Paragraph.ListFormat ou DocumentBuilder.ListFormat) applique le format de liste à un paragraphe: ApplyBulletDefault() et ApplyNumberDefault() le transforment en une liste à puces ou numérotée par défaut, RemoveNumbers() supprime complètement le format de liste, et ListIndent()/ListOutdent() le déplacent entre les niveaux de liste. ListFormat.List renvoie la définition sous-jacente de List, et ListFormat.ListLevel renvoie le ListLevel en vigueur pour ce paragraphe, qui comporte des paramètres par niveau tels que NumberStyle, NumberFormat, Alignment (un ListLevelAlignment de Left, Center ou Right), StartAt, RestartAfterLevel, un Font spécifique au niveau, et TrailingCharacter (un ListTrailingCharacter de Tab, Space ou Nothing) contrôlant l’écart entre l’étiquette de la liste et le texte du paragraphe. Les nouvelles définitions de listes proviennent de ListCollection.Add(listTemplate) en utilisant l’un des préréglages intégrés ListTemplate (BulletDefault, NumberArabicDot, NumberUppercaseRomanDot, etc.), ou de AddSingleLevelList pour une liste à un seul niveau; les listes d’un document sont énumérées via Document.Lists.
Cadres de texte avec FrameFormat
Paragraph.FrameFormat est un objet de rapport en lecture seule : chaque propriété reflète le actuel état du cadre plutôt que de vous permettre de le définir directement. IsFrame indique si le paragraphe est actuellement un cadre ; Width, Height, et HeightRule indique sa taille ; HorizontalPosition et VerticalPosition, ainsi que RelativeHorizontalPosition et RelativeVerticalPosition, indiquez où il est ancré par rapport à la page, à la marge, à la colonne ou au paragraphe ; et HorizontalDistanceFromText/VerticalDistanceFromText indiquez l’écart entre le cadre et le texte principal environnant. HorizontalAlignment et VerticalAlignment indiquez comment le contenu s’aligne à l’intérieur du cadre.
Recherche et remplacement avec Range et IReplacingCallback
Range.Replace — disponible sur Document.Range pour un passage sur l’ensemble du document, ou sur le Range de n’importe quel nœud — propose des surcharges pour une paire motif/remplacement simple et pour une paire motif/remplacement combinée à une instance FindReplaceOptions, prenant en charge la correspondance basée sur les expressions régulières. FindReplaceOptions.MatchCase et FindWholeWordsOnly restreignent ce qui est considéré comme une correspondance; Direction (FindReplaceDirection.Forward ou Backward) définit l’ordre de balayage; ApplyFont et ApplyParagraphFormat permettent à un passage de remplacement de transférer le formatage au texte de remplacement; et un ensemble de drapeaux Ignore* (IgnoreDeleted, IgnoreInserted, IgnoreFields, IgnoreFieldCodes, IgnoreFootnotes, IgnoreStructuredDocumentTags, IgnoreShapes, IgnoreOfficeMath) exclut des catégories de contenu spécifiques de la correspondance. Pour une logique de remplacement qu’une chaîne fixe ne peut exprimer, implémentez IReplacingCallback.Replacing(args) et définissez-la comme FindReplaceOptions.ReplacingCallback (ou transmettez-la à l’un des constructeurs FindReplaceOptions qui accepte directement un rappel); le paramètre args est un ReplacingArgs exposant Match, MatchNode, MatchOffset et une chaîne Replacement réglable afin que le rappel puisse calculer une valeur par correspondance. Un ReplaceAction enum connexe (Replace, Skip, Stop) décrit les résultats possibles pour une seule correspondance pendant l’opération.
Démarrage rapide
Aspose.Words FOSS pour .NET est disponible via NuGet :
dotnet add package Aspose.Words.FOSSPour compiler à partir du code source :
git clone https://github.com/aspose-words-foss/Aspose.Words-FOSS-for-.NET.git
cd Aspose.Words-FOSS-for-.NET
dotnet build Aspose.Words.sln -c Release
Ensuite, ajoutez une référence de projet à Aspose.Words.csproj. Pour mettre en forme le texte pendant que vous l’écrivez, définissez les propriétés DocumentBuilder.Font (Bold, Italic, Underline), les propriétés DocumentBuilder.ParagraphFormat (Alignment, retraits, espacement) et DocumentBuilder.ListFormat (ApplyBulletDefault(), ApplyNumberDefault()) avant d’appeler Write(), Writeln() ou InsertParagraph() — le constructeur applique son état de formatage actuel à tout ce qui est écrit jusqu’à ce que vous le modifiiez à nouveau, ou encapsulez un changement temporaire dans PushFont()/PopFont(). Pour reformater ou réécrire du texte déjà présent dans un document, ouvrez-le avec new Document(fileName) et appelez Range.Replace() sur doc.Range — soit la surcharge simple motif/remplacement, soit la surcharge qui accepte un FindReplaceOptions avec MatchCase, FindWholeWordsOnly, ou un IReplacingCallback personnalisé — puis Save() le résultat.
Formats pris en charge
| Format | Extension | Lire | Write |
|---|---|---|---|
| DOCX | .docx | ✓ | ✓ |
| DOCM | .docm | ✓ | ✓ |
| DOTX | .dotx | ✓ | ✓ |
| DOTM | .dotm | ✓ | ✓ |
| Flat OPC (toutes les variantes) | (divers) | ✓ | ✓ |
| Markdown | .md | ✓ | ✓ |
| Text | .txt | ✓ | ✓ |
Les classes de formatage ci-dessus s’appliquent de la même façon, quel que soit le format à partir duquel un document est chargé ou vers lequel il est enregistré. Cette édition ne prend pas en charge DOC, RTF, ODT, HTML, EPUB, MHTML, MOBI, AZW3, ou WordML pour la lecture ou l’écriture, et ne prend pas en charge PDF, XPS ou l’exportation d’images, car la mise en page et le rendu sont hors de son champ d’application.
Open Source & Licence
Aspose.Words FOSS pour .NET est publié sous licence MIT, gratuit pour une utilisation commerciale et personnelle sans redevances ni restrictions de redistribution. Le code source complet, y compris les implémentations Font, ParagraphFormat, ListFormat, FrameFormat et Range décrites ci-dessus, est disponible sur GitHub dans le Aspose.Words FOSS pour .NET repository.