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 BookmarkCollection indexer (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 matchande EndBookmark(name)-anrop med samma namn — ett oparat anrop lämnar bokmärket ofullständigt.
  • Kontrollera Bookmark.IsColumn innan du läser FirstColumn eller LastColumn — de två egenskaperna är endast meningsfulla för kolumnbokmärken skapade med StartColumnBookmark/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 en BookmarkStart.

Vanliga problem

ProblemOrsakÅtgärd
BookmarkCollection indexer returnerar null för en namnuppslagningBokmärkesnamnet finns inte i det sökta intervalletLista namn först via GetEnumerator() för att bekräfta det exakta, skiftlägeskänsliga namnet
Infogat innehåll är inte bokmärktEndBookmark() 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 utFirstColumn/LastColumn läses utan att först kontrollera IsColumnTolkar 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 / MetodBeskrivning
BookmarkRepresenterar ett enskilt bokmärke; exponerar Name, Text, IsColumn, FirstColumn, LastColumn och Remove()
BookmarkCollectionBokmärken i en Range; indexerar efter namn, Remove(), RemoveAt(), Clear(), Count
BookmarkStart / BookmarkEndDokumentnoder som markerar ett bokmärkes gränser; länka tillbaka via Bookmark.BookmarkStart/Bookmark.BookmarkEnd
Range.BookmarksReturns 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

Se även

 Svenska