Bookmarks
Bookmarks
Den här guiden visar hur man läser, infogar, navigerar till och tar bort bokmärken i ett Word-dokument med Aspose.Words FOSS för .NET. Ett bokmärke markerar en namngiven plats eller ett innehållsintervall så att det kan slås upp, navigeras till eller användas som en infogningspunkt för ytterligare redigeringar. Aspose.Words FOSS för .NET representerar bokmärken med klasserna Bookmark, BookmarkStart och BookmarkEnd, och tillhandahåller DocumentBuilder metoder för att skapa och lokalisera dem vid författande eller redigering av ett dokument.
Läsa bokmärken
Varje Range exponerar de bokmärken den innehåller via egenskapen Bookmarks, som returnerar en BookmarkCollection. Eftersom Document själv exponerar en Range, returnerar doc.Range.Bookmarks alla bokmärken i dokumentet. Slå upp ett specifikt bokmärke efter namn med indexeraren BookmarkCollection — bookmarks[bookmarkName] — kontrollera hur många som finns med Count, eller gå igenom hela samlingen med GetEnumerator(). Varje Bookmark exponerar sin Name och den text den omsluter via Text.
Infoga bokmärken med DocumentBuilder
DocumentBuilder är det vanliga sättet att skapa bokmärken när man skriver ett dokument. Anropa StartBookmark(bookmarkName) innan du infogar innehåll, och sedan EndBookmark(bookmarkName) efteråt — byggaren omsluter allt som skrivits däremellan som det bokmärkta intervallet. För ett intervall av tabellkolumner, använd StartColumnBookmark(bookmarkName) och EndColumnBookmark(bookmarkName) istället; det resulterande Bookmark.IsColumn är true, med FirstColumn och LastColumn som identifierar det markerade kolumnintervallet. För att ompositionera byggaren till ett befintligt bokmärke för ytterligare redigeringar, anropa MoveToBookmark(bookmarkName), eller överlagringen MoveToBookmark(bookmarkName, isStart, isAfter) för att styra vilken ände av bokmärket markören hamnar på.
Bokmärkesstruktur i dokumentträdet
Ett bokmärke representeras i dokumentträdet som ett par noder: BookmarkStart och BookmarkEnd, båda konstruerade som BookmarkStart(doc, name) / BookmarkEnd(doc, name). Varje länkar tillbaka till sitt logiska Bookmark-objekt — BookmarkStart.Bookmark returnerar det, och Bookmark i sin tur exponerar BookmarkStart och BookmarkEnd egenskaper som pekar på dess två gränsnoder. Eftersom BookmarkStart och BookmarkEnd är vanliga noder, stödjer de standardnodoperationer såsom GetText(), Clone(isCloneChildren) och GetAncestor(ancestorType), och kan hittas genom att gå igenom trädet som vilken annan nodtyp som helst.
Ta bort bokmärken
Anropa Bookmark.Remove() för att ta bort ett enskilt bokmärkess start- och slutmarkörer — detta tar bort själva bokmärket, inte dokumentinnehållet som det omsluter. För att ta bort bokmärken massivt, använd BookmarkCollection.Remove(bookmark), Remove(bookmarkName), RemoveAt(index) eller Clear() för att ta bort alla bokmärken i intervallet på en gång.
Tips och bästa praxis
- Föredra
BookmarkCollectionindexer (bookmarks["BookmarkName"]) framför manuell iteration när du redan känner till det önskade bokmärkets namn. - Para alltid ett
StartBookmark(name)-anrop med ett matchandeEndBookmark(name)-anrop med samma namn — ett oparat anrop lämnar bokmärket ofullständigt. - Kontrollera
Bookmark.IsColumninnan du läserFirstColumnellerLastColumn— de två egenskaperna är endast meningsfulla för kolumnbokmärken skapade medStartColumnBookmark/EndColumnBookmark. Bookmark.Remove()tar bara bort bokmärkesmarkörerna, inte den omslutna texten, så att ta bort ett bokmärke aldrig raderar dokumentinnehåll.- Använd
DocumentBuilder.MoveToBookmark()för att hoppa byggarens markör till en känd plats istället för att manuellt söka i nodträdet efter enBookmarkStart.
Vanliga problem
| Problem | Orsak | Åtgärd |
|---|---|---|
BookmarkCollection indexer returnerar null för en namnuppslagning | Bokmärkesnamnet finns inte i det sökta intervallet | Lista namn först via GetEnumerator() för att bekräfta det exakta, skiftlägeskänsliga namnet |
| Infogat innehåll är inte bokmärkt | EndBookmark() anropades aldrig, eller anropades med ett annat namn än StartBookmark() | Matcha alltid StartBookmark(name) med EndBookmark(name) med den identiska namnsträngen |
| Kolumnens bokmärkesdata ser fel ut | FirstColumn/LastColumn läses utan att först kontrollera IsColumn | Tolkar endast FirstColumn/LastColumn när Bookmark.IsColumn är true |
FAQ
Hur får jag alla bokmärken i ett dokument?
Läs doc.Range.Bookmarks, vilket returnerar en BookmarkCollection som täcker hela dokumentet.
Kan jag bokmärka en del av en tabell efter kolumn istället för efter textintervall?
Ja — använd DocumentBuilder.StartColumnBookmark(bookmarkName) och EndColumnBookmark(bookmarkName). Det resulterande bokmärket har IsColumn satt till true, med FirstColumn/LastColumn som markerar kolumnintervallet.
Tar bort ett bokmärke den text som det markerar?
Nej. Bookmark.Remove() tar bara bort BookmarkStart/BookmarkEnd-markörnoderna; dokumentinnehållet däremellan lämnas orört.
Hur flyttar jag DocumentBuilder-markören till ett befintligt bokmärke?
Anropa DocumentBuilder.MoveToBookmark(bookmarkName) eller MoveToBookmark(bookmarkName, isStart, isAfter) för att styra om markören placeras i början eller slutet av bokmärket.
Vad är skillnaden mellan BookmarkCollection.Remove()-överladdningarna?
Remove(bookmark) tar ett Bookmark-objekt, Remove(bookmarkName) tar dess namn, och RemoveAt(index) tar dess position i samlingen — alla tre tar bort ett enskilt bokmärke, medan Clear() tar bort alla bokmärken i samlingen.
API Reference Sammanfattning
| Klass / Metod | Beskrivning |
|---|---|
Bookmark | Representerar ett enskilt bokmärke; exponerar Name, Text, IsColumn, FirstColumn, LastColumn och Remove() |
BookmarkCollection | Bokmärken i en Range; indexerar efter namn, Remove(), RemoveAt(), Clear(), Count |
BookmarkStart / BookmarkEnd | Dokumentnoder som markerar ett bokmärkes gränser; länka tillbaka via Bookmark.BookmarkStart/Bookmark.BookmarkEnd |
Range.Bookmarks | Returns the BookmarkCollection for a given range, including doc.Range.Bookmarks for the whole document |
DocumentBuilder.StartBookmark() / EndBookmark() | Omslut infogat innehåll i ett namngivet bokmärke |
DocumentBuilder.StartColumnBookmark() / EndColumnBookmark() | Markera ett intervall av tabellkolumner som ett bokmärke |
DocumentBuilder.MoveToBookmark() | Positionerar byggarens markör vid ett befintligt bokmärke |