Bookmarks
Bookmarks
Ce guide montre comment lire, insérer, accéder et supprimer des signets dans un document Word avec Aspose.Words FOSS pour .NET. Un signet désigne un emplacement nommé ou une plage de contenu afin qu’il puisse être recherché, atteint, ou utilisé comme point d’insertion pour d’autres modifications. Aspose.Words FOSS pour .NET représente les signets avec les classes Bookmark, BookmarkStart et BookmarkEnd, et fournit des méthodes DocumentBuilder pour les créer et les localiser lors de la rédaction ou de la modification d’un document.
Lecture des signets
Chaque Range expose les signets qu’il contient via la propriété Bookmarks, qui renvoie un BookmarkCollection. Puisque Document expose lui-même un Range, doc.Range.Bookmarks renvoie tous les signets du document. Recherchez un signet spécifique par son nom avec l’indexeur BookmarkCollection — bookmarks[bookmarkName] — vérifiez combien il en existe avec Count, ou parcourez l’ensemble de la collection avec GetEnumerator(). Chaque Bookmark expose son Name et le texte qu’il englobe via Text.
Insertion de signets avec DocumentBuilder
DocumentBuilder est la méthode habituelle pour créer des signets lors de la rédaction d’un document. Appelez StartBookmark(bookmarkName) avant d’insérer du contenu, puis EndBookmark(bookmarkName) après — le constructeur enveloppe tout ce qui est écrit entre les deux comme la plage signetée. Pour une plage de colonnes de tableau, utilisez StartColumnBookmark(bookmarkName) et EndColumnBookmark(bookmarkName) à la place; le Bookmark.IsColumn résultant est true, avec FirstColumn et LastColumn identifiant la plage de colonnes marquée. Pour repositionner le constructeur sur un signet existant afin d’effectuer d’autres modifications, appelez MoveToBookmark(bookmarkName), ou la surcharge MoveToBookmark(bookmarkName, isStart, isAfter) pour contrôler à quelle extrémité du signet le curseur se place.
Structure des signets dans l’arbre du document
Un signet est représenté dans l’arbre du document comme une paire de nœuds : BookmarkStart et BookmarkEnd, tous deux construits comme BookmarkStart(doc, name) / BookmarkEnd(doc, name). Chacun renvoie à son objet logique Bookmark — BookmarkStart.Bookmark le renvoie, et Bookmark expose à son tour les propriétés BookmarkStart et BookmarkEnd pointant vers ses deux nœuds de frontière. Parce que BookmarkStart et BookmarkEnd sont des nœuds ordinaires, ils supportent les opérations standard sur les nœuds telles que GetText(), Clone(isCloneChildren) et GetAncestor(ancestorType), et peuvent être localisés en parcourant l’arbre comme tout autre type de nœud.
Suppression des signets
Appelez Bookmark.Remove() pour supprimer les marqueurs de début et de fin d’un seul signet — cela supprime le signet lui-même, pas le contenu du document qu’il encadre. Pour supprimer les signets en masse, utilisez BookmarkCollection.Remove(bookmark), Remove(bookmarkName), RemoveAt(index) ou Clear() pour éliminer tous les signets de la plage en une fois.
Conseils et bonnes pratiques
- Préférez l’indexeur
BookmarkCollection(bookmarks["BookmarkName"]) plutôt que l’itération manuelle lorsque vous connaissez déjà le nom du signet ciblé. - Associez toujours un appel
StartBookmark(name)à un appelEndBookmark(name)correspondant en utilisant le même nom — une paire non appariée laisse le signet incomplet. - Vérifiez
Bookmark.IsColumnavant de lireFirstColumnouLastColumn— ces deux propriétés ne sont significatives que pour les signets de colonne créés avecStartColumnBookmark/EndColumnBookmark. Bookmark.Remove()supprime uniquement les marqueurs du signet, pas le texte inclus, ainsi la suppression d’un signet ne supprime jamais le contenu du document.- Utilisez
DocumentBuilder.MoveToBookmark()pour déplacer le curseur du constructeur vers un emplacement connu au lieu de rechercher manuellement l’arbre de nœuds pour unBookmarkStart.
Problèmes courants
| Problème | Cause | Correction |
|---|---|---|
BookmarkCollection l’indexeur renvoie null pour une recherche de nom | Le nom du signet n’existe pas dans la plage recherchée | Listez d’abord les noms via GetEnumerator() pour confirmer le nom exact, sensible à la casse |
| Le contenu inséré n’est pas marqué d’un signet | EndBookmark() n’a jamais été appelé, ou a été appelé avec un nom différent de StartBookmark() | Toujours faire correspondre StartBookmark(name) avec EndBookmark(name) en utilisant la chaîne de nom identique |
| Les données de signet de colonne semblent incorrectes | FirstColumn/LastColumn lu(s) sans vérifier d’abord IsColumn | N’interprétez FirstColumn/LastColumn que lorsque Bookmark.IsColumn est true |
FAQ
Comment obtenir tous les signets d’un document?
Lisez doc.Range.Bookmarks, qui renvoie un BookmarkCollection couvrant l’ensemble du document.
Puis-je créer un signet sur une partie d’un tableau par colonne plutôt que par plage de texte?
Oui — utilisez DocumentBuilder.StartColumnBookmark(bookmarkName) et EndColumnBookmark(bookmarkName). Le signet résultant a IsColumn défini sur true, avec FirstColumn/LastColumn marquant la plage de colonnes.
La suppression d’un signet supprime-t-elle le texte qu’il marque?
N° Bookmark.Remove() supprime uniquement les nœuds marqueurs BookmarkStart/BookmarkEnd ; le contenu du document entre eux reste intact.
Comment déplacer le curseur DocumentBuilder vers un signet existant?
Appelez DocumentBuilder.MoveToBookmark(bookmarkName), ou MoveToBookmark(bookmarkName, isStart, isAfter) pour contrôler si le curseur se place au début ou à la fin du signet.
Quelle est la différence entre les surcharges BookmarkCollection.Remove()?
Remove(bookmark) prend un objet Bookmark, Remove(bookmarkName) prend son nom, et RemoveAt(index) prend sa position dans la collection — les trois suppriment un seul signet, tandis que Clear() supprime tous les signets de la collection.
API Reference Résumé
| Classe / Méthode | Description |
|---|---|
Bookmark | Représente un seul signet ; expose Name, Text, IsColumn, FirstColumn, LastColumn et Remove() |
BookmarkCollection | Marque-pages dans un Range; indexeur par nom, Remove(), RemoveAt(), Clear(), Count |
BookmarkStart / BookmarkEnd | Nœuds de document marquant les limites d’un marque-page; lien retour via Bookmark.BookmarkStart/Bookmark.BookmarkEnd |
Range.Bookmarks | Renvoie le BookmarkCollection pour une plage donnée, y compris le doc.Range.Bookmarks pour l’ensemble du document |
DocumentBuilder.StartBookmark() / EndBookmark() | Enveloppez le contenu inséré dans un marque-page nommé |
DocumentBuilder.StartColumnBookmark() / EndColumnBookmark() | Marquer une plage de colonnes de tableau comme signet |
DocumentBuilder.MoveToBookmark() | Positionne le curseur du constructeur sur un signet existant |