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 appel EndBookmark(name) correspondant en utilisant le même nom — une paire non appariée laisse le signet incomplet.
  • Vérifiez Bookmark.IsColumn avant de lire FirstColumn ou LastColumn — ces deux propriétés ne sont significatives que pour les signets de colonne créés avec StartColumnBookmark/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 un BookmarkStart.

Problèmes courants

ProblèmeCauseCorrection
BookmarkCollection l’indexeur renvoie null pour une recherche de nomLe nom du signet n’existe pas dans la plage recherchéeListez d’abord les noms via GetEnumerator() pour confirmer le nom exact, sensible à la casse
Le contenu inséré n’est pas marqué d’un signetEndBookmark() 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 incorrectesFirstColumn/LastColumn lu(s) sans vérifier d’abord IsColumnN’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éthodeDescription
BookmarkReprésente un seul signet ; expose Name, Text, IsColumn, FirstColumn, LastColumn et Remove()
BookmarkCollectionMarque-pages dans un Range; indexeur par nom, Remove(), RemoveAt(), Clear(), Count
BookmarkStart / BookmarkEndNœuds de document marquant les limites d’un marque-page; lien retour via Bookmark.BookmarkStart/Bookmark.BookmarkEnd
Range.BookmarksRenvoie 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

Voir aussi

 Français