Cách làm việc với các liên kết và tham chiếu Word trong .NET
Hướng dẫn này cho thấy cách chèn siêu liên kết, tham chiếu chéo tới dấu trang, trường giá trị được nhắc, và trường trích dẫn trong Aspose.Words FOSS cho .NET, sử dụng FieldHyperlink, FieldRef, FieldPageRef, FieldCitation, và các liên kết và tham chiếu khác Field lớp con trong Aspose.Words.Fields không gian tên. Nó bao gồm việc chèn một siêu liên kết đơn giản, tạo dấu trang và tham chiếu chéo chúng, yêu cầu giá trị khi cập nhật trường, và trích dẫn các nguồn thư mục.
Hướng dẫn từng bước
Bước 1: Cài đặt gói
Aspose.Words FOSS cho .NET hiện chưa phát hành gói NuGet – thay vào đó hãy biên dịch thư viện từ mã nguồn. Nhân bản https://github.com/aspose-words-foss/Aspose.Words-FOSS-for-.NET.git, sau đó biên dịch Aspose.Words.sln trong cấu hình Release với SDK .NET và tham chiếu assembly Aspose.Words kết quả từ dự án của bạn. Thư viện nhắm tới .NET Standard 2.0, vì vậy nó chạy trên .NET Framework 4.6.2+ và .NET 6/8/10.
Bước 2: Nhập các lớp cần thiết
Thêm một chỉ thị using Aspose.Words; cho Document và DocumentBuilder, và một chỉ thị using Aspose.Words.Fields; cho FieldHyperlink, FieldRef, FieldPageRef, FieldNoteRef, FieldStyleRef, FieldSet, FieldAsk, FieldFillIn, FieldCitation, FieldBibliography, và các lớp trường khác mà hướng dẫn này đề cập.
Bước 3: Chèn Siêu liên kết
Đối với một siêu liên kết đơn giản, gọi DocumentBuilder.InsertHyperlink(displayText, urlOrBookmark, isBookmark) – truyền isBookmark: false cho mục tiêu URL hoặc true để liên kết tới một dấu trang trong cùng tài liệu. Hạ xuống để xây dựng một FieldHyperlink trực tiếp khi cần các thuộc tính mà phím tắt không tiết lộ: Address và SubAddress chứa URL mục tiêu hoặc vị trí trong tài liệu, ScreenTip đặt chú giải khi di chuột, OpenInNewWindow và IsImageMap là các cờ hiển thị, và Target đặt tên cho một khung trình duyệt.
Bước 4: Tạo Dấu trang để Tham chiếu
Gọi DocumentBuilder.StartBookmark(bookmarkName) trước nội dung mà dấu trang nên bao phủ, và DocumentBuilder.EndBookmark(bookmarkName) sau đó, sử dụng cùng một tên cho cả hai lời gọi. DocumentBuilder.MoveToBookmark(bookmarkName) di chuyển con trỏ tới một dấu trang đã tồn tại – hữu ích để điều hướng tới vị trí trước khi chèn một trường tham chiếu chéo gần đó.
Bước 5: Chèn Tham chiếu chéo tới Dấu trang đó
FieldRef (trường REF), FieldPageRef (PAGEREF), và FieldNoteRef (NOTEREF) mỗi đều giải quyết nội dung tại một dấu trang có tên thông qua thuộc tính BookmarkName của chúng. Đặt InsertHyperlink để làm cho tham chiếu có thể nhấp, và InsertRelativePosition để báo cáo vị trí tương đối (“trên” / “dưới”) thay vì văn bản được tham chiếu. FieldRef còn hỗ trợ các tùy chọn đánh số đoạn – InsertParagraphNumber, InsertParagraphNumberInFullContext, InsertParagraphNumberInRelativeContext, NumberSeparator – và IncludeNoteOrComment. FieldStyleRef (STYLEREF) giải quyết tới đoạn gần nhất được định dạng bằng một StyleName cho trước thay vì dấu trang, với SearchFromBottom để tìm ngược lại từ vị trí của trường. FieldSet (SET) định nghĩa một giá trị văn bản đã được đánh dấu – BookmarkName và BookmarkText – mà một trường REF ở nơi khác có thể giải quyết.
Bước 6: Yêu cầu Giá trị Khi Cập nhật
FieldAsk (ASK) và FieldFillIn (FILLIN) yêu cầu một giá trị từ người cập nhật trường: đặt PromptText đối với văn bản hiển thị cho người dùng, DefaultResponse cho giá trị dự phòng, và PromptOnceOnMailMerge để giới hạn việc nhắc lại liên tục trong quá trình ghép thư. FieldAsk ngoài ra còn lưu câu trả lời của nó tại BookmarkName để các trường khác có thể tham chiếu đến nó. Đối với việc cập nhật trường tự động, hãy cung cấp câu trả lời bằng cách lập trình thay vì nhắc người dùng tương tác; xem phần hướng dẫn các trường cho giao diện callback thực hiện việc này.
Bước 7: Tham chiếu nội dung bên ngoài hoặc liên kết
FieldDde (DDE) và FieldDdeAuto (DDEAUTO) liên kết tới nội dung trong một ứng dụng khác thông qua ProgId, SourceFullName, và SourceItem, với InsertAsText, InsertAsHtml, InsertAsPicture, InsertAsRtf, InsertAsUnicode, và InsertAsBitmap chọn biểu diễn được chèn, và AutoUpdate / IsLinked kiểm soát hành vi làm mới. FieldLink (LINK) là tương đương OLE-link, bổ sung FormatUpdateType. FieldImport (IMPORT) và FieldIncludePicture (INCLUDEPICTURE) kéo vào một đồ họa bên ngoài qua SourceFullName và GraphicFilter. FieldInclude (INCLUDE) và FieldIncludeText (INCLUDETEXT) kéo vào nội dung tài liệu bên ngoài, với BookmarkName để xác định phạm vi vùng được chèn và LockFields để ngăn không cho nó được làm mới; FieldIncludeText cũng hỗ trợ các nguồn XML qua Encoding, MimeType, NamespaceMappings, XPath, và XslTransformation.
Bước 8: Tham chiếu các khối xây dựng và mục bảng chú giải
FieldAutoText (AUTOTEXT), FieldAutoTextList (AUTOTEXTLIST), và FieldGlossary (GLOSSARY) đều tham chiếu một mục khối xây dựng có tên thông qua EntryName; FieldAutoTextList thêm ListStyle và ScreenTip cho cách trình bày kiểu danh sách của nó.
Bước 9: Chèn các trường trích dẫn và thư mục
FieldCitation (CITATION) và FieldBibliography (BIBLIOGRAPHY) hiển thị nội dung được lấy từ dữ liệu thư mục của tài liệu. Đặt FieldCitation.SourceTag (hoặc thay thế AnotherSourceTag) để xác định nguồn nào nó trích dẫn, và sử dụng Prefix, Suffix, PageNumber, VolumeNumber, và Suppress* cờ (SuppressAuthor, SuppressTitle, SuppressYear) để kiểm soát cách trích dẫn được định dạng. FieldBibliography.SourceTag, FilterLanguageId, và FormatLanguageId kiểm soát nguồn nào xuất hiện trong thư mục đã hiển thị và ngôn ngữ nào. Các trường này chỉ hiển thị đúng khi khớp Source các bản ghi tồn tại – xem the hướng dẫn thư mục để xây dựng chúng.
Các vấn đề phổ biến và cách khắc phục
Trường REF, PAGEREF hoặc NOTEREF hiển thị kết quả lỗi Trường BookmarkName mục tiêu của nó không tồn tại trong tài liệu. Tạo bookmark với DocumentBuilder.StartBookmark() / EndBookmark() trước khi cập nhật trường.
Trường ASK hoặc FILLIN chặn việc cập nhật không có giám sát Không có callback nào được chỉ định để cung cấp câu trả lời một cách lập trình. Gán callback cập nhật trường được mô tả trong hướng dẫn các trường, hoặc đặt DefaultResponse trên trường để nó có giá trị dự phòng.
Trường CITATION hoặc BIBLIOGRAPHY hiển thị trống The SourceTag không khớp với bất kỳ Source trong dữ liệu thư mục của tài liệu. Thêm mục phù hợp Source – xem phần hướng dẫn thư mục.
Trường DDE, DDEAUTO hoặc LINK không làm mới Các trường này tham chiếu tới một nguồn OLE bên ngoài không khả dụng ngoài ngữ cảnh Windows/OLE gốc. Hãy xem kết quả đã lưu của trường như là giá trị cuối cùng đã biết trong trường hợp đó.
Một siêu liên kết được chèn bằng InsertHyperlink thiếu một thuộc tính tôi cần DocumentBuilder.InsertHyperlink() là một phím tắt không hiển thị mọi FieldHyperlink thuộc tính. Tạo hoặc lấy FieldHyperlink trực tiếp để đặt các thuộc tính như ScreenTip or IsImageMap.
Câu hỏi thường gặp
Sự khác nhau giữa FieldRef và FieldStyleRef là gì?
FieldRef giải quyết tới nội dung tại một bookmark có tên (BookmarkName); FieldStyleRef thay vào đó giải quyết tới đoạn văn gần nhất được định dạng với một StyleName nhất định, độc lập với các bookmark.
Làm thế nào để chèn một siêu liên kết đơn giản mà không phải tự tạo Field bằng tay?
Gọi DocumentBuilder.InsertHyperlink(displayText, urlOrBookmark, isBookmark).
Các lớp trường liên kết và tham chiếu này có ở một không gian tên riêng biệt so với các trường khác không?
Không – FieldHyperlink, FieldRef, FieldCitation, và các lớp còn lại được đề cập ở đây đều là các lớp con Field thông thường trong không gian tên Aspose.Words.Fields, cùng không gian tên được sử dụng cho mọi loại trường khác.
Các trường trích dẫn liên quan như thế nào đến mô hình dữ liệu thư mục tham khảo?
FieldCitation and FieldBibliography hiển thị nội dung bằng cách tra cứu SourceTag đối với Source các bản ghi được mô tả trong hướng dẫn thư mục – các lớp trường này xử lý việc hiển thị, trong khi Source and Contributor các lớp chứa dữ liệu nền.
Làm thế nào để tạo một dấu trang trước khi tham chiếu tới nó?
Gọi DocumentBuilder.StartBookmark(bookmarkName) trước nội dung, và DocumentBuilder.EndBookmark(bookmarkName) sau nó, sử dụng cùng một tên cho cả hai lời gọi.