Bookmarks
Bookmarks
Dieser Leitfaden zeigt, wie man Lesezeichen in einem Word-Dokument mit Aspose.Words FOSS für .NET liest, einfügt, zu ihnen navigiert und sie entfernt. Ein Lesezeichen markiert einen benannten Ort oder einen Inhaltsbereich, sodass er nachgeschlagen, zu ihm navigiert oder als Einfügepunkt für weitere Änderungen verwendet werden kann. Aspose.Words FOSS für .NET stellt Lesezeichen mit den Klassen Bookmark, BookmarkStart und BookmarkEnd dar und bietet DocumentBuilder Methoden zum Erstellen und Auffinden dieser beim Verfassen oder Bearbeiten eines Dokuments.
Lesezeichen lesen
Jedes Range stellt die darin enthaltenen Lesezeichen über die Bookmarks-Eigenschaft bereit, die ein BookmarkCollection zurückgibt. Da Document selbst ein Range bereitstellt, gibt doc.Range.Bookmarks jedes Lesezeichen im Dokument zurück. Suchen Sie ein bestimmtes Lesezeichen nach Namen mit dem BookmarkCollection-Indexer — bookmarks[bookmarkName] — prüfen Sie, wie viele existieren mit Count, oder durchlaufen Sie die gesamte Sammlung mit GetEnumerator(). Jeder Bookmark stellt sein Name und den von ihm umschlossenen Text über Text bereit.
Einfügen von Lesezeichen mit DocumentBuilder
DocumentBuilder ist die übliche Methode, um beim Schreiben eines Dokuments Lesezeichen zu erstellen. Rufen Sie StartBookmark(bookmarkName) auf, bevor Sie Inhalt einfügen, und danach EndBookmark(bookmarkName) — der Builder umschließt alles dazwischen als den markierten Bereich. Für einen Bereich von Tabellenspalten verwenden Sie stattdessen StartColumnBookmark(bookmarkName) und EndColumnBookmark(bookmarkName); das resultierende Bookmark.IsColumn ist true, wobei FirstColumn und LastColumn den markierten Spaltenbereich identifizieren. Um den Builder an einem vorhandenen Lesezeichen für weitere Änderungen neu zu positionieren, rufen Sie MoveToBookmark(bookmarkName) auf, oder die Überladung MoveToBookmark(bookmarkName, isStart, isAfter), um zu steuern, an welchem Ende des Lesezeichens der Cursor landet.
Lesezeichenstruktur im Dokumentenbaum
Ein Lesezeichen wird im Dokumentbaum als ein Paar von Knoten dargestellt: BookmarkStart und BookmarkEnd, beide konstruiert als BookmarkStart(doc, name) / BookmarkEnd(doc, name). Jeder verweist zurück zu seinem logischen Bookmark-Objekt — BookmarkStart.Bookmark gibt es zurück, und Bookmark stellt wiederum die Eigenschaften BookmarkStart und BookmarkEnd bereit, die auf seine beiden Grenzknoten zeigen. Da BookmarkStart und BookmarkEnd gewöhnliche Knoten sind, unterstützen sie die Standard-Knoten-Operationen wie GetText(), Clone(isCloneChildren) und GetAncestor(ancestorType) und können durch Durchlaufen des Baumes wie jeder andere Knotentyp gefunden werden.
Lesezeichen entfernen
Rufen Sie Bookmark.Remove() auf, um die Start- und End-Markierungen eines einzelnen Lesezeichens zu löschen — damit wird das Lesezeichen selbst entfernt, nicht der Dokumentinhalt, den es umschließt. Um Lesezeichen massenhaft zu entfernen, verwenden Sie BookmarkCollection.Remove(bookmark), Remove(bookmarkName), RemoveAt(index) oder Clear(), um jedes Lesezeichen im Bereich auf einmal zu entfernen.
Tipps und bewährte Vorgehensweisen
- Bevorzugen Sie den
BookmarkCollection-Indexer (bookmarks["BookmarkName"]) gegenüber manueller Iteration, wenn Sie den Namen des Ziel-Lesezeichens bereits kennen. - Koppeln Sie immer einen
StartBookmark(name)-Aufruf mit einem passendenEndBookmark(name)-Aufruf unter Verwendung desselben Namens — ein nicht zugepaartes Paar lässt das Lesezeichen unvollständig. - Prüfen Sie
Bookmark.IsColumn, bevor SieFirstColumnoderLastColumnlesen — diese beiden Eigenschaften sind nur für Spalten-Lesezeichen sinnvoll, die mitStartColumnBookmark/EndColumnBookmarkerstellt wurden. Bookmark.Remove()löscht nur die Lesezeichen-Markierungen, nicht den eingeschlossenen Text, sodass das Entfernen eines Lesezeichens niemals Dokumentinhalt löscht.- Verwenden Sie
DocumentBuilder.MoveToBookmark(), um den Cursor des Builders zu einem bekannten Ort zu springen, anstatt den Knotenbaum manuell nach einemBookmarkStartzu durchsuchen.
Häufige Probleme
| Problem | Ursache | Lösung |
|---|---|---|
BookmarkCollection indexer gibt null für eine Namenssuche zurück | Der Lesezeichenname existiert nicht im durchsuchten Bereich | Listen Sie zuerst die Namen über GetEnumerator() auf, um den genauen, groß-/kleinschreibungssensitiven Namen zu bestätigen |
| Der eingefügte Inhalt ist nicht als Lesezeichen markiert | EndBookmark() wurde nie aufgerufen, oder wurde mit einem anderen Namen als StartBookmark() aufgerufen | Gleiche immer StartBookmark(name) mit EndBookmark(name) anhand der identischen Namenszeichenkette ab |
| Spalten-Lesezeichendaten scheinen falsch zu sein | FirstColumn/LastColumn wird gelesen, ohne vorher IsColumn zu prüfen | Interpretiere FirstColumn/LastColumn nur, wenn Bookmark.IsColumn true ist |
FAQ
Wie erhalte ich alle Lesezeichen in einem Dokument?
Lesen Sie doc.Range.Bookmarks, das ein BookmarkCollection zurückgibt, das das gesamte Dokument abdeckt.
Kann ich einen Teil einer Tabelle nach Spalte statt nach Textbereich als Lesezeichen setzen?
Ja — verwenden Sie DocumentBuilder.StartColumnBookmark(bookmarkName) und EndColumnBookmark(bookmarkName). Das resultierende Lesezeichen hat IsColumn auf true gesetzt, wobei FirstColumn/LastColumn den Spaltenbereich markieren.
Löscht das Entfernen eines Lesezeichens den Text, den es markiert?
Nr. Bookmark.Remove() entfernt nur die BookmarkStart/BookmarkEnd Marker-Knoten; der Dokumentinhalt dazwischen bleibt unverändert.
Wie verschiebe ich den DocumentBuilder-Cursor zu einem vorhandenen Lesezeichen?
Rufen Sie DocumentBuilder.MoveToBookmark(bookmarkName) oder MoveToBookmark(bookmarkName, isStart, isAfter) auf, um zu steuern, ob der Cursor am Anfang oder Ende des Lesezeichens platziert wird.
Was ist der Unterschied zwischen den BookmarkCollection.Remove()-Überladungen?
Remove(bookmark) nimmt ein Bookmark-Objekt, Remove(bookmarkName) nimmt dessen Namen und RemoveAt(index) nimmt dessen Position in der Sammlung – alle drei entfernen ein einzelnes Lesezeichen, während Clear() jedes Lesezeichen in der Sammlung entfernt.
API Reference Zusammenfassung
| Klasse / Methode | Beschreibung |
|---|---|
Bookmark | Stellt ein einzelnes Lesezeichen dar; gibt Name, Text, IsColumn, FirstColumn, LastColumn und Remove() frei |
BookmarkCollection | Lesezeichen in einem Range; Indexierung nach Name, Remove(), RemoveAt(), Clear(), Count |
BookmarkStart / BookmarkEnd | Dokumentknoten, die die Grenzen eines Lesezeichens markieren; zurückverlinken über Bookmark.BookmarkStart/Bookmark.BookmarkEnd |
Range.Bookmarks | Gibt das BookmarkCollection für einen angegebenen Bereich zurück, einschließlich doc.Range.Bookmarks für das gesamte Dokument |
DocumentBuilder.StartBookmark() / EndBookmark() | Füge den eingefügten Inhalt in ein benanntes Lesezeichen ein |
DocumentBuilder.StartColumnBookmark() / EndColumnBookmark() | Markieren Sie einen Bereich von Tabellenspalten als Lesezeichen |
DocumentBuilder.MoveToBookmark() | Positioniert den Cursor des Builders an einem bestehenden Lesezeichen |