Bookmarks
Bookmarks
Ten przewodnik pokazuje, jak odczytywać, wstawiać, przechodzić do i usuwać zakładki w dokumencie Word przy użyciu Aspose.Words FOSS dla .NET. Zakładka oznacza nazwane miejsce lub zakres treści, aby można było je odnaleźć, przejść do niego lub użyć jako punkt wstawiania dalszych edycji. Aspose.Words FOSS dla .NET reprezentuje zakładki za pomocą klas Bookmark, BookmarkStart i BookmarkEnd, oraz udostępnia metody DocumentBuilder do tworzenia i lokalizowania ich podczas tworzenia lub edytowania dokumentu.
Odczytywanie zakładek
Każdy Range udostępnia zakładki, które zawiera, poprzez własność Bookmarks, która zwraca BookmarkCollection. Ponieważ Document sam udostępnia Range, doc.Range.Bookmarks zwraca wszystkie zakładki w dokumencie. Odszukaj konkretną zakładkę po nazwie za pomocą indeksatora BookmarkCollection — bookmarks[bookmarkName] — sprawdź, ile ich jest za pomocą Count, lub przejdź całą kolekcję przy użyciu GetEnumerator(). Każdy Bookmark udostępnia swój Name oraz tekst, który otacza, poprzez Text.
Wstawianie zakładek przy użyciu DocumentBuilder
DocumentBuilder jest typowym sposobem tworzenia zakładek podczas pisania dokumentu. Wywołaj StartBookmark(bookmarkName) przed wstawieniem treści, a następnie EndBookmark(bookmarkName) po niej — konstruktor otacza wszystko napisane pomiędzy jako zakres zakładki. Dla zakresu kolumn tabeli użyj zamiast tego StartColumnBookmark(bookmarkName) i EndColumnBookmark(bookmarkName); powstały Bookmark.IsColumn jest true, przy czym FirstColumn i LastColumn identyfikują zaznaczony zakres kolumn. Aby przemieścić konstruktor do istniejącej zakładki w celu dalszych edycji, wywołaj MoveToBookmark(bookmarkName), lub przeciążenie MoveToBookmark(bookmarkName, isStart, isAfter), aby kontrolować, który koniec zakładki zostanie ustawiony kursorem.
Struktura zakładek w drzewie dokumentu
Zakładka jest reprezentowana w drzewie dokumentu jako para węzłów: BookmarkStart i BookmarkEnd, oba utworzone jako BookmarkStart(doc, name) / BookmarkEnd(doc, name). Każdy odwołuje się do swojego logicznego obiektu Bookmark — BookmarkStart.Bookmark zwraca go, a Bookmark z kolei udostępnia właściwości BookmarkStart i BookmarkEnd wskazujące na jego dwa węzły graniczne. Ponieważ BookmarkStart i BookmarkEnd są zwykłymi węzłami, obsługują standardowe operacje na węzłach, takie jak GetText(), Clone(isCloneChildren) i GetAncestor(ancestorType), i mogą być odnajdywane poprzez przechodzenie drzewa jak każdy inny typ węzła.
Usuwanie zakładek
Wywołaj Bookmark.Remove(), aby usunąć znaczniki początkowy i końcowy pojedynczej zakładki — usuwa to samą zakładkę, a nie zawartość dokumentu, którą otacza. Aby usunąć zakładki masowo, użyj BookmarkCollection.Remove(bookmark), Remove(bookmarkName), RemoveAt(index) lub Clear(), aby jednorazowo usunąć wszystkie zakładki w danym zakresie.
Wskazówki i najlepsze praktyki
- Preferuj indeksator
BookmarkCollection(bookmarks["BookmarkName"]) zamiast ręcznej iteracji, gdy już znasz nazwę docelowej zakładki. - Zawsze łącz wywołanie
StartBookmark(name)z pasującym wywołaniemEndBookmark(name)używając tej samej nazwy — nieparowane wywołanie pozostawia zakładkę niekompletną. - Sprawdź
Bookmark.IsColumnprzed odczytaniemFirstColumnlubLastColumn— te dwie właściwości mają sens tylko dla zakładek kolumnowych tworzonych przy użyciuStartColumnBookmark/EndColumnBookmark. Bookmark.Remove()usuwa tylko znaczniki zakładki, a nie otaczający tekst, więc usunięcie zakładki nigdy nie usuwa zawartości dokumentu.- Użyj
DocumentBuilder.MoveToBookmark(), aby przenieść kursor kreatora do znanej lokalizacji zamiast ręcznego przeszukiwania drzewa węzłów w poszukiwaniuBookmarkStart.
Typowe problemy
| Problem | Przyczyna | Poprawka |
|---|---|---|
BookmarkCollection indeksator zwraca null przy wyszukiwaniu nazwy | Nazwa zakładki nie istnieje w przeszukiwanym zakresie | Najpierw wyświetl listę nazw za pomocą GetEnumerator(), aby potwierdzić dokładną, uwzględniającą wielkość liter nazwę |
| Wstawiona zawartość nie jest oznaczona zakładką | EndBookmark() nigdy nie został wywołany, lub został wywołany z inną nazwą niż StartBookmark() | Zawsze dopasowuj StartBookmark(name) do EndBookmark(name) przy użyciu identycznego ciągu nazwy |
| Dane zakładki kolumny wyglądają nieprawidłowo | FirstColumn/LastColumn odczytywane bez wcześniejszego sprawdzenia IsColumn | Interpretuj FirstColumn/LastColumn tylko wtedy, gdy Bookmark.IsColumn jest true |
FAQ
Jak uzyskać wszystkie zakładki w dokumencie?
Przeczytaj doc.Range.Bookmarks, które zwraca BookmarkCollection obejmujący cały dokument.
Czy mogę dodać zakładkę do części tabeli według kolumny zamiast według zakresu tekstowego?
Tak — użyj DocumentBuilder.StartColumnBookmark(bookmarkName) i EndColumnBookmark(bookmarkName). Wynikowa zakładka ma IsColumn ustawione na true, przy czym FirstColumn/LastColumn oznaczają zakres kolumn.
Czy usunięcie zakładki usuwa oznaczony przez nią tekst?
Nr. Bookmark.Remove() usuwa tylko węzły znacznika BookmarkStart/BookmarkEnd; zawartość dokumentu pomiędzy nimi pozostaje nietknięta.
Jak przenieść kursor DocumentBuilder do istniejącej zakładki?
Wywołaj DocumentBuilder.MoveToBookmark(bookmarkName) lub MoveToBookmark(bookmarkName, isStart, isAfter), aby kontrolować, czy kursor trafi na początek czy koniec zakładki.
Jaka jest różnica między przeciążeniami BookmarkCollection.Remove()?
Remove(bookmark) przyjmuje obiekt Bookmark, Remove(bookmarkName) przyjmuje jego nazwę, a RemoveAt(index) przyjmuje jego pozycję w kolekcji — wszystkie trzy usuwają pojedynczą zakładkę, podczas gdy Clear() usuwa wszystkie zakładki w kolekcji.
Podsumowanie API Reference
| Klasa / Metoda | Opis |
|---|---|
Bookmark | Reprezentuje pojedynczą zakładkę; udostępnia Name, Text, IsColumn, FirstColumn, LastColumn oraz Remove() |
BookmarkCollection | Zakładki w Range; indeksowane według nazwy, Remove(), RemoveAt(), Clear(), Count |
BookmarkStart / BookmarkEnd | Węzły dokumentu oznaczające granice zakładki; odnośnik powrotny przez Bookmark.BookmarkStart/Bookmark.BookmarkEnd |
Range.Bookmarks | Zwraca BookmarkCollection dla danego zakresu, w tym doc.Range.Bookmarks dla całego dokumentu |
DocumentBuilder.StartBookmark() / EndBookmark() | Otocz wstawioną treść nazwanej zakładką |
DocumentBuilder.StartColumnBookmark() / EndColumnBookmark() | Oznacz zakres kolumn tabeli jako zakładkę |
DocumentBuilder.MoveToBookmark() | Ustawia kursor kreatora na istniejącej zakładce |