Bookmarks
Bookmarks
У цьому посібнику показано, як читати, вставляти, переходити до та видаляти закладки у документі Word за допомогою Aspose.Words FOSS для .NET. Закладка позначає іменоване місце або діапазон вмісту, щоб його можна було знайти, перейти до нього або використати як точку вставки для подальших правок. Aspose.Words FOSS для .NET представляє закладки за допомогою класів Bookmark, BookmarkStart та BookmarkEnd і надає DocumentBuilder методи для їх створення та пошуку під час написання або редагування документа.
Читання закладок
Кожен Range надає доступ до закладок, які він містить, через властивість Bookmarks, що повертає BookmarkCollection. Оскільки Document сам по собі надає Range, doc.Range.Bookmarks повертає всі закладки в документі. Знайти конкретну закладку за назвою можна за допомогою індексатора BookmarkCollection — bookmarks[bookmarkName] — перевірити, скільки їх існує, за допомогою Count, або пройти всю колекцію за допомогою GetEnumerator(). Кожен Bookmark відкриває свій Name та текст, який він охоплює, через Text.
Вставка закладок за допомогою DocumentBuilder
DocumentBuilder — це звичайний спосіб створювати закладки під час написання документа. Викличте StartBookmark(bookmarkName) перед вставкою вмісту, потім EndBookmark(bookmarkName) після нього — будівник обгортає все, що написано між ними, у діапазон закладки. Для діапазону стовпців таблиці використовуйте StartColumnBookmark(bookmarkName) та EndColumnBookmark(bookmarkName) замість цього; отриманий Bookmark.IsColumn є true, причому FirstColumn і LastColumn визначають позначений діапазон стовпців. Щоб перемістити будівник до існуючої закладки для подальших правок, викличте MoveToBookmark(bookmarkName) або перегрузку MoveToBookmark(bookmarkName, isStart, isAfter), щоб керувати тим, куди курсор буде розташований у кінці закладки.
Структура закладки у дереві документа
Закладка представляється у дереві документа як пара вузлів: BookmarkStart і BookmarkEnd, обидва створені як BookmarkStart(doc, name) / BookmarkEnd(doc, name). Кожен посилається назад на свій логічний об’єкт Bookmark — BookmarkStart.Bookmark повертає його, а Bookmark у свою чергу відкриває властивості BookmarkStart та BookmarkEnd, що вказують на його два граничні вузли. Оскільки BookmarkStart і BookmarkEnd є звичайними вузлами, вони підтримують стандартні операції над вузлами, такі як GetText(), Clone(isCloneChildren) і GetAncestor(ancestorType), і їх можна знайти, проходячи дерево, як будь-який інший тип вузлів.
Видалення закладок
Викличте Bookmark.Remove(), щоб видалити початковий та кінцевий маркери однієї закладки — це видаляє саму закладку, а не вміст документа, який вона охоплює. Щоб видалити закладки масово, використайте BookmarkCollection.Remove(bookmark), Remove(bookmarkName), RemoveAt(index) або Clear(), щоб одночасно усунути всі закладки у вказаному діапазоні.
Поради та найкращі практики
- Віддавайте перевагу індексатору
BookmarkCollection(bookmarks["BookmarkName"]) замість ручної ітерації, коли ви вже знаєте назву цільової закладки. - Завжди поєднуйте виклик
StartBookmark(name)з відповідним викликомEndBookmark(name), використовуючи те саме ім’я — непарний виклик залишає закладку неповною. - Перевірте
Bookmark.IsColumnперед читаннямFirstColumnабоLastColumn— ці дві властивості мають сенс лише для колонкових закладок, створених за допомогоюStartColumnBookmark/EndColumnBookmark. Bookmark.Remove()видаляє лише маркери закладки, а не включений текст, тому видалення закладки ніколи не стирає вміст документа.- Використовуйте
DocumentBuilder.MoveToBookmark(), щоб перемістити курсор будівельника до відомого місця замість того, щоб вручну шукати в дереві вузлівBookmarkStart.
Типові проблеми
| Проблема | Причина | Виправлення |
|---|---|---|
BookmarkCollection індексатор повертає null під час пошуку за іменем | Назва закладки не існує в діапазоні, який шукається | Спочатку виведіть список імен за допомогою GetEnumerator(), щоб підтвердити точну, чутливу до регістру назву |
| Вставлений вміст не має закладки | EndBookmark() ніколи не був викликаний, або був викликаний з іншим ім’ям, ніж StartBookmark() | Завжди співставляйте StartBookmark(name) з EndBookmark(name), використовуючи ідентичний рядок назви |
| Дані закладки стовпця виглядають неправильно | FirstColumn/LastColumn читаються без попередньої перевірки IsColumn | Інтерпретувати FirstColumn/LastColumn лише коли Bookmark.IsColumn є true |
FAQ
Як отримати всі закладки в документі?
Прочитайте doc.Range.Bookmarks, який повертає BookmarkCollection, що охоплює весь документ.
Чи можу я закладати частину таблиці за колонкою замість за діапазоном тексту?
Так — використовуйте DocumentBuilder.StartColumnBookmark(bookmarkName) та EndColumnBookmark(bookmarkName). Отримана закладка має IsColumn, встановлене в true, при цьому FirstColumn/LastColumn позначають діапазон колонок.
Чи видалення закладки видаляє текст, який вона позначає?
№ Bookmark.Remove() видаляє лише вузли маркерів BookmarkStart/BookmarkEnd; вміст документа між ними залишається незмінним.
Як перемістити курсор DocumentBuilder до існуючої закладки?
Викличте DocumentBuilder.MoveToBookmark(bookmarkName) або MoveToBookmark(bookmarkName, isStart, isAfter), щоб контролювати, чи курсор буде розташований на початку чи в кінці закладки.
У чому різниця між перевантаженнями BookmarkCollection.Remove()?
Remove(bookmark) приймає об’єкт Bookmark, Remove(bookmarkName) — його ім’я, а RemoveAt(index) — його позицію в колекції — усі три видаляють одну закладку, тоді як Clear() видаляє всі закладки в колекції.
API Reference Підсумок
| Клас / Метод | Опис |
|---|---|
Bookmark | Представляє одну закладку; надає Name, Text, IsColumn, FirstColumn, LastColumn та Remove() |
BookmarkCollection | Закладки у Range; індексатор за назвою, Remove(), RemoveAt(), Clear(), Count |
BookmarkStart / BookmarkEnd | Вузли документу, що позначають межі закладки; посилання назад через Bookmark.BookmarkStart/Bookmark.BookmarkEnd |
Range.Bookmarks | Повертає BookmarkCollection для заданого діапазону, включаючи doc.Range.Bookmarks для всього документа |
DocumentBuilder.StartBookmark() / EndBookmark() | Обгорнути вставлений вміст у названу закладку |
DocumentBuilder.StartColumnBookmark() / EndColumnBookmark() | Позначити діапазон стовпців таблиці як закладку |
DocumentBuilder.MoveToBookmark() | Розташовує курсор будівельника на існуючій закладці |