Bookmarks

Bookmarks

Hướng dẫn này cho thấy cách đọc, chèn, điều hướng tới và xóa dấu trang trong tài liệu Word bằng Aspose.Words FOSS cho .NET. Một dấu trang đánh dấu một vị trí hoặc phạm vi nội dung có tên để có thể tra cứu, điều hướng tới, hoặc dùng làm điểm chèn cho các chỉnh sửa tiếp theo. Aspose.Words FOSS cho .NET biểu diễn dấu trang bằng các lớp Bookmark, BookmarkStart, và BookmarkEnd, và cung cấp các phương thức DocumentBuilder để tạo và tìm kiếm chúng khi soạn thảo hoặc chỉnh sửa tài liệu.


Đọc Dấu trang

Mỗi Range công khai các dấu trang mà nó chứa thông qua thuộc tính Bookmarks, trả về một BookmarkCollection. Vì Document tự nó công khai một Range, doc.Range.Bookmarks trả về mọi dấu trang trong tài liệu. Tra cứu một dấu trang cụ thể theo tên bằng bộ chỉ mục BookmarkCollection — bookmarks[bookmarkName] — kiểm tra số lượng tồn tại với Count, hoặc duyệt toàn bộ bộ sưu tập bằng GetEnumerator(). Mỗi Bookmark công khai Name của nó và văn bản nó bao quanh thông qua Text.


Chèn Dấu trang với DocumentBuilder

DocumentBuilder là cách thường dùng để tạo dấu trang khi viết tài liệu. Gọi StartBookmark(bookmarkName) trước khi chèn nội dung, sau đó EndBookmark(bookmarkName) sau đó — bộ xây dựng sẽ bao bọc mọi thứ viết ở giữa thành phạm vi đã được đánh dấu. Đối với một phạm vi các cột bảng, sử dụng StartColumnBookmark(bookmarkName) và EndColumnBookmark(bookmarkName) thay thế; Bookmark.IsColumn kết quả là true, với FirstColumn và LastColumn xác định phạm vi cột đã đánh dấu. Để đặt lại vị trí của bộ xây dựng tại một dấu trang hiện có cho các chỉnh sửa tiếp theo, gọi MoveToBookmark(bookmarkName), hoặc phiên bản tải quá tải MoveToBookmark(bookmarkName, isStart, isAfter) để kiểm soát đầu nào của dấu trang mà con trỏ sẽ đặt.


Cấu trúc Dấu trang trong Cây tài liệu

Một dấu trang được biểu diễn trong cây tài liệu như một cặp nút: BookmarkStart và BookmarkEnd, cả hai được tạo thành BookmarkStart(doc, name) / BookmarkEnd(doc, name). Mỗi nút liên kết trở lại đối tượng Bookmark logic của nó — BookmarkStart.Bookmark trả về nó, và Bookmark lại mở ra các thuộc tính BookmarkStart và BookmarkEnd chỉ tới hai nút biên của nó. Vì BookmarkStart và BookmarkEnd là các nút thông thường, chúng hỗ trợ các thao tác nút tiêu chuẩn như GetText(), Clone(isCloneChildren), và GetAncestor(ancestorType), và có thể được định vị bằng cách duyệt cây như bất kỳ loại nút nào khác.


Xóa Dấu Trang

Gọi Bookmark.Remove() để xóa các dấu bắt đầu và kết thúc của một dấu trang — việc này chỉ xóa dấu trang chứ không xóa nội dung tài liệu mà nó bao quanh. Để xóa nhiều dấu trang cùng lúc, sử dụng BookmarkCollection.Remove(bookmark), Remove(bookmarkName), RemoveAt(index) hoặc Clear() để loại bỏ mọi dấu trang trong phạm vi một cách đồng thời.


Mẹo và Thực Hành Tốt Nhất

  • Ưu tiên bộ chỉ mục BookmarkCollection (bookmarks["BookmarkName"]) hơn việc lặp thủ công khi bạn đã biết tên dấu trang mục tiêu.
  • Luôn luôn ghép một lời gọi StartBookmark(name) với một lời gọi EndBookmark(name) tương ứng sử dụng cùng một tên — một cặp không khớp sẽ để lại dấu trang không hoàn chỉnh.
  • Kiểm tra Bookmark.IsColumn trước khi đọc FirstColumn hoặc LastColumn — hai thuộc tính đó chỉ có ý nghĩa đối với dấu trang cột được tạo bằng StartColumnBookmark/EndColumnBookmark.
  • Bookmark.Remove() chỉ xóa các dấu hiệu của dấu trang, không phải văn bản được bao quanh, vì vậy việc xóa dấu trang sẽ không bao giờ xóa nội dung tài liệu.
  • Sử dụng DocumentBuilder.MoveToBookmark() để chuyển con trỏ của builder đến vị trí đã biết thay vì phải tìm kiếm thủ công trong cây nút để tìm BookmarkStart.

Các vấn đề thường gặp

Vấn đềNguyên nhânCách khắc phục
BookmarkCollection indexer trả về null cho việc tra cứu tênTên bookmark không tồn tại trong phạm vi đang được tìm kiếmLiệt kê các tên trước qua GetEnumerator() để xác nhận tên chính xác, phân biệt chữ hoa chữ thường
Nội dung chèn không có bookmarkEndBookmark() chưa bao giờ được gọi, hoặc đã được gọi với một tên khác so với StartBookmark()Luôn khớp StartBookmark(name) với EndBookmark(name) bằng cách sử dụng chuỗi tên giống hệt
Dữ liệu bookmark của cột có vẻ saiFirstColumn/LastColumn được đọc mà không kiểm tra IsColumn trướcChỉ diễn giải FirstColumn/LastColumn khi Bookmark.IsColumn là true

FAQ

Làm sao để lấy tất cả các bookmark trong một tài liệu?

Đọc doc.Range.Bookmarks, nó sẽ trả về một BookmarkCollection bao phủ toàn bộ tài liệu.

Tôi có thể đánh dấu phần của một bảng theo cột thay vì theo phạm vi văn bản không?

Có — sử dụng DocumentBuilder.StartColumnBookmark(bookmarkName) và EndColumnBookmark(bookmarkName). Bookmark kết quả có IsColumn được đặt thành true, với FirstColumn/LastColumn đánh dấu phạm vi cột.

Việc xóa một bookmark có xóa bỏ văn bản mà nó đánh dấu không?

Không. Bookmark.Remove() chỉ xóa các nút đánh dấu BookmarkStart/BookmarkEnd; nội dung tài liệu ở giữa được để nguyên.

Làm thế nào để di chuyển con trỏ DocumentBuilder tới một dấu trang hiện có?

Gọi DocumentBuilder.MoveToBookmark(bookmarkName), hoặc MoveToBookmark(bookmarkName, isStart, isAfter) để kiểm soát việc con trỏ đặt ở đầu hay cuối dấu trang.

Sự khác nhau giữa các overload BookmarkCollection.Remove() là gì?

Remove(bookmark) nhận một đối tượng Bookmark, Remove(bookmarkName) nhận tên của nó, và RemoveAt(index) nhận vị trí của nó trong bộ sưu tập — cả ba đều xóa một dấu trang duy nhất, trong khi Clear() xóa mọi dấu trang trong bộ sưu tập.


Tóm tắt API Reference

Lớp / Phương thứcMô tả
BookmarkBiểu diễn một bookmark duy nhất; cung cấp Name, Text, IsColumn, FirstColumn, LastColumn và Remove()
BookmarkCollectionDấu trang trong một Range; chỉ mục theo tên, Remove(), RemoveAt(), Clear(), Count
BookmarkStart / BookmarkEndCác nút tài liệu đánh dấu ranh giới của dấu trang; liên kết trở lại qua Bookmark.BookmarkStart/Bookmark.BookmarkEnd
Range.BookmarksTrả về BookmarkCollection cho một phạm vi cho trước, bao gồm doc.Range.Bookmarks cho toàn bộ tài liệu
DocumentBuilder.StartBookmark() / EndBookmark()Bao bọc nội dung đã chèn trong một dấu trang có tên
DocumentBuilder.StartColumnBookmark() / EndColumnBookmark()Đánh dấu một phạm vi các cột bảng làm dấu trang
DocumentBuilder.MoveToBookmark()Đặt con trỏ của builder tại một dấu trang hiện có

Xem thêm

 Tiếng Việt