Bookmarks
Bookmarks
Acest ghid arată cum să citești, să inserezi, să navighezi la și să elimini marcaje într-un document Word cu Aspose.Words FOSS pentru .NET. Un marcaj marchează o locație numită sau un interval de conținut astfel încât să poată fi căutat, navigat sau utilizat ca punct de inserare pentru editări ulterioare. Aspose.Words FOSS pentru .NET reprezintă marcajele cu clasele Bookmark, BookmarkStart și BookmarkEnd, și oferă metodele DocumentBuilder pentru crearea și localizarea lor în timpul redactării sau editării unui document.
Citirea marcajelor
Fiecare Range expune marcajele pe care le conține prin proprietatea Bookmarks, care returnează un BookmarkCollection. Deoarece Document însuși expune un Range, doc.Range.Bookmarks returnează toate marcajele din document. Caută un marcaj specific după nume cu indexatorul BookmarkCollection — bookmarks[bookmarkName] — verifică câte există cu Count, sau parcurge întreaga colecție cu GetEnumerator(). Fiecare Bookmark expune Name și textul pe care îl încapsulează prin Text.
Inserarea marcajelor cu DocumentBuilder
DocumentBuilder este metoda obișnuită de a crea marcaje în timpul redactării unui document. Apelează StartBookmark(bookmarkName) înainte de a insera conținut, apoi EndBookmark(bookmarkName) după acesta — constructorul învelește tot ce este scris între ele ca interval marcat. Pentru un interval de coloane de tabel, folosește StartColumnBookmark(bookmarkName) și EndColumnBookmark(bookmarkName) în schimb; Bookmark.IsColumn rezultat este true, cu FirstColumn și LastColumn care identifică intervalul de coloane marcat. Pentru a repoziționa constructorul la un marcaj existent pentru editări ulterioare, apelează MoveToBookmark(bookmarkName), sau suprasarcina MoveToBookmark(bookmarkName, isStart, isAfter) pentru a controla care capăt al marcajului este poziționat cursorul.
Structura marcajului în arborele documentului
Un marcaj este reprezentat în arborele documentului ca o pereche de noduri: BookmarkStart și BookmarkEnd, ambele construite ca BookmarkStart(doc, name) / BookmarkEnd(doc, name). Fiecare leagă înapoi la obiectul său logic Bookmark — BookmarkStart.Bookmark îl returnează, iar Bookmark la rândul său expune proprietățile BookmarkStart și BookmarkEnd care indică cele două noduri de frontieră. Deoarece BookmarkStart și BookmarkEnd sunt noduri obișnuite, ele suportă operațiile standard ale nodurilor, cum ar fi GetText(), Clone(isCloneChildren) și GetAncestor(ancestorType), și pot fi localizate prin parcurgerea arborelui ca orice alt tip de nod.
Ștergerea marcajelor
Apelă Bookmark.Remove() pentru a șterge markerii de început și sfârșit ai unui singur marcaj — aceasta elimină marcajul în sine, nu conținutul documentului pe care îl închide. Pentru a elimina marcajele în bloc, folosește BookmarkCollection.Remove(bookmark), Remove(bookmarkName), RemoveAt(index) sau Clear() pentru a elimina toate marcajele din interval simultan.
Sfaturi și bune practici
- Preferă indexatorul
BookmarkCollection(bookmarks["BookmarkName"]) în locul iterării manuale când știi deja numele marcajului țintă. - Întotdeauna asociază un apel
StartBookmark(name)cu un apelEndBookmark(name)corespunzător folosind același nume — o pereche necorespunzătoare lasă marcajul incomplet. - Verifică
Bookmark.IsColumnînainte de a citiFirstColumnsauLastColumn— aceste două proprietăți sunt semnificative doar pentru marcajele de coloană create cuStartColumnBookmark/EndColumnBookmark. Bookmark.Remove()șterge doar markerii de marcaj, nu textul închis, astfel că eliminarea unui marcaj nu șterge niciodată conținutul documentului.- Folosește
DocumentBuilder.MoveToBookmark()pentru a muta cursorul builder-ului la o locație cunoscută în loc să cauți manual în arborele de noduri unBookmarkStart.
Probleme comune
| Problemă | Cauză | Remediere |
|---|---|---|
BookmarkCollection indexer returnează null pentru o căutare de nume | Numele semnului de carte nu există în intervalul căutat | Listează mai întâi numele prin GetEnumerator() pentru a confirma numele exact, sensibil la majuscule |
| Conținutul inserat nu are semn de carte | EndBookmark() nu a fost niciodată apelat, sau a fost apelat cu un nume diferit de StartBookmark() | Potrivește întotdeauna StartBookmark(name) cu EndBookmark(name) utilizând șirul de nume identic |
| Datele de marcaj din coloană par incorecte | FirstColumn/LastColumn citite fără a verifica mai întâi IsColumn | Interpretează FirstColumn/LastColumn numai când Bookmark.IsColumn este true |
FAQ
Cum pot obține toate semnele de carte dintr-un document?
Citește doc.Range.Bookmarks, care returnează un BookmarkCollection ce acoperă întregul document.
Pot să marchez cu semn de carte o parte a unui tabel pe coloană în loc de pe un interval de text?
Da — folosește DocumentBuilder.StartColumnBookmark(bookmarkName) și EndColumnBookmark(bookmarkName). Semnul de carte rezultat are IsColumn setat la true, cu FirstColumn/LastColumn care marchează intervalul de coloană.
Înlăturarea unui semn de carte șterge textul pe care îl marchează?
Nr. Bookmark.Remove() elimină doar nodurile marcator BookmarkStart/BookmarkEnd; conținutul documentului dintre ele rămâne neatins.
Cum pot muta cursorul DocumentBuilder la un semn de carte existent?
Apelați DocumentBuilder.MoveToBookmark(bookmarkName), sau MoveToBookmark(bookmarkName, isStart, isAfter) pentru a controla dacă cursorul se plasează la începutul sau la sfârșitul semnului de carte.
Care este diferența dintre suprasarcinile BookmarkCollection.Remove()?
Remove(bookmark) primește un obiect Bookmark, Remove(bookmarkName) primește numele său, iar RemoveAt(index) primește poziția acestuia în colecție — toate trei elimină un singur semn de carte, în timp ce Clear() elimină toate semnele de carte din colecție.
API Reference Rezumat
| Clasă / Metodă | Descriere: |
|---|---|
Bookmark | Reprezintă un singur marcaj; expune Name, Text, IsColumn, FirstColumn, LastColumn și Remove() |
BookmarkCollection | Marcaje într-un Range; indexate după nume, Remove(), RemoveAt(), Clear(), Count |
BookmarkStart / BookmarkEnd | Noduri de document care marchează limitele unui marcaj; legătură înapoi prin Bookmark.BookmarkStart/Bookmark.BookmarkEnd |
Range.Bookmarks | Returnează BookmarkCollection pentru o gamă dată, inclusiv doc.Range.Bookmarks pentru întregul document |
DocumentBuilder.StartBookmark() / EndBookmark() | Înfășoară conținutul inserat într-un marcaj numit |
DocumentBuilder.StartColumnBookmark() / EndColumnBookmark() | Marcați un interval de coloane de tabel ca marcaj |
DocumentBuilder.MoveToBookmark() | Plasează cursorul constructorului la un marcaj existent |