Jak pracować z odnośnikami i odwołaniami w Word w .NET
Ten przewodnik pokazuje, jak wstawiać hiperłącza, odnośniki krzyżowe do zakładek, pola z wartościami podawanymi na żądanie oraz pola cytowań w Aspose.Words FOSS dla .NET, używając FieldHyperlink, FieldRef, FieldPageRef, FieldCitation, oraz inne klasy linków i odwołań Field podklasy w Aspose.Words.Fields przestrzeni nazw. Obejmuje wstawianie prostego hiperłącza, tworzenie zakładek i odwoływanie się do nich, podpowiadanie wartości podczas aktualizacji pola oraz cytowanie źródeł bibliograficznych.
Przewodnik krok po kroku
Krok 1: Zainstaluj pakiet
Aspose.Words FOSS dla .NET nie publikuje jeszcze pakietu NuGet — zamiast tego zbuduj bibliotekę ze źródeł. Sklonuj https://github.com/aspose-words-foss/Aspose.Words-FOSS-for-.NET.git, a następnie zbuduj Aspose.Words.sln w konfiguracji Release przy użyciu SDK .NET i odwołaj się do powstałego zestawu Aspose.Words w swoim projekcie. Biblioteka jest przeznaczona dla .NET Standard 2.0, więc działa na .NET Framework 4.6.2+ oraz .NET 6/8/10.
Krok 2: Zaimportuj wymagane klasy
Dodaj dyrektywę using Aspose.Words; dla Document i DocumentBuilder oraz dyrektywę using Aspose.Words.Fields; dla FieldHyperlink, FieldRef, FieldPageRef, FieldNoteRef, FieldStyleRef, FieldSet, FieldAsk, FieldFillIn, FieldCitation, FieldBibliography oraz pozostałych klas pól, które omawia ten przewodnik.
Krok 3: Wstaw hiperłącze
Aby utworzyć proste hiperłącze, wywołaj DocumentBuilder.InsertHyperlink(displayText, urlOrBookmark, isBookmark) — przekaż isBookmark: false jako docelowy adres URL lub true, aby połączyć się z zakładką w tym samym dokumencie. Przejdź do tworzenia FieldHyperlink bezpośrednio, gdy potrzebne są właściwości, których skrót nie udostępnia: Address i SubAddress przechowują docelowy adres URL lub lokalizację w dokumencie, ScreenTip ustawia podpowiedź po najechaniu, OpenInNewWindow i IsImageMap są flagami wyświetlania, a Target określa ramkę przeglądarki.
Krok 4: Utwórz zakładkę do odwołania
Wywołaj DocumentBuilder.StartBookmark(bookmarkName) przed treścią, którą ma obejmować zakładka, oraz DocumentBuilder.EndBookmark(bookmarkName) po niej, używając tej samej nazwy w obu wywołaniach. DocumentBuilder.MoveToBookmark(bookmarkName) przenosi kursor do istniejącej już zakładki — przydatne do nawigacji do miejsca przed wstawieniem pola odwołania krzyżowego w jego pobliżu.
Krok 5: Wstaw odwołanie krzyżowe do tej zakładki
FieldRef (pole REF), FieldPageRef (PAGEREF) i FieldNoteRef (NOTEREF) każdy odwołuje się do treści w nazwanej zakładce za pomocą ich właściwości BookmarkName. Ustaw InsertHyperlink, aby odwołanie było klikalne, oraz InsertRelativePosition, aby zgłaszało pozycję względną („powyżej” / „poniżej”) zamiast samego cytowanego tekstu. FieldRef dodatkowo obsługuje opcje numeracji akapitów — InsertParagraphNumber, InsertParagraphNumberInFullContext, InsertParagraphNumberInRelativeContext, NumberSeparator — oraz IncludeNoteOrComment. FieldStyleRef (STYLEREF) odwołuje się do najbliższego akapitu sformatowanego przy użyciu podanego StyleName zamiast zakładki, przy czym SearchFromBottom umożliwia wyszukiwanie wstecz od pozycji pola. FieldSet (SET) definiuje wartość tekstową zakładki — BookmarkName i BookmarkText — którą może odczytać pole REF w innym miejscu.
Krok 6: Zapytaj o wartość podczas aktualizacji
FieldAsk (ASK) oraz FieldFillIn (FILLIN) żądaj wartości od osoby aktualizującej pole: ustaw PromptText do tekstu wyświetlanego użytkownikowi, DefaultResponse jako wartość awaryjną, oraz PromptOnceOnMailMerge aby ograniczyć powtarzające się pytania podczas mail merge. FieldAsk dodatkowo zapisuje swoją odpowiedź w BookmarkName aby inne pola mogły się do niego odwoływać. Dla nieinteraktywnych aktualizacji pól, dostarczaj odpowiedzi programowo zamiast wyświetlać interaktywne zapytania; zobacz przewodnik po polach dla interfejsu wywołania zwrotnego, który to robi.
Krok 7: Odwoływanie się do treści zewnętrznych lub powiązanych
FieldDde (DDE) i FieldDdeAuto (DDEAUTO) odwołują się do treści w innej aplikacji za pośrednictwem ProgId, SourceFullName i SourceItem, przy czym InsertAsText, InsertAsHtml, InsertAsPicture, InsertAsRtf, InsertAsUnicode i InsertAsBitmap wybierają wstawioną reprezentację, a AutoUpdate / IsLinked kontrolują zachowanie odświeżania. FieldLink (LINK) jest odpowiednikiem łącza OLE, dodając FormatUpdateType. FieldImport (IMPORT) i FieldIncludePicture (INCLUDEPICTURE) wstawiają zewnętrzną grafikę za pośrednictwem SourceFullName i GraphicFilter. FieldInclude (INCLUDE) i FieldIncludeText (INCLUDETEXT) wstawiają zewnętrzną zawartość dokumentu, przy czym BookmarkName określa zakres włączonego fragmentu, a LockFields zapobiega jego odświeżeniu; FieldIncludeText dodatkowo obsługuje źródła XML poprzez Encoding, MimeType, NamespaceMappings, XPath i XslTransformation.
Krok 8: Odwoływanie się do bloków konstrukcyjnych i wpisów słownika
FieldAutoText (AUTOTEXT), FieldAutoTextList (AUTOTEXTLIST) i FieldGlossary (GLOSSARY) odwołują się do nazwanej pozycji bloku konstrukcyjnego poprzez EntryName; FieldAutoTextList dodaje ListStyle i ScreenTip dla prezentacji w stylu listy.
Krok 9: Wstaw pola cytowania i bibliografii
FieldCitation (CITATION) FieldBibliography (BIBLIOGRAPHY) renderuj treść pochodzącą z danych bibliografii dokumentu. Ustaw FieldCitation.SourceTag (lub alternatywny AnotherSourceTag) aby określić, które źródło jest cytowane, i użyj Prefix, Suffix, PageNumber, VolumeNumber, i Suppress* flagi (SuppressAuthor, SuppressTitle, SuppressYear) aby kontrolować, jak cytat jest formatowany. FieldBibliography.SourceTag, FilterLanguageId, oraz FormatLanguageId kontrolują, które źródła pojawiają się w wygenerowanej bibliografii i w jakim języku. Te pola renderują się poprawnie tylko wtedy, gdy pasujące Source rekordy istnieją – zobacz the przewodnik bibliograficzny do ich budowy.
Typowe problemy i rozwiązania
Pole REF, PAGEREF lub NOTEREF wyświetla wynik błędu Ten BookmarkName cel, do którego się odwołuje, nie istnieje w dokumencie. Utwórz zakładkę za pomocą DocumentBuilder.StartBookmark() / EndBookmark() przed aktualizacją pola.
Pole ASK lub FILLIN blokuje automatyczną aktualizację Nie przypisano funkcji zwrotnej, aby dostarczyć odpowiedź programowo. Przypisz funkcję zwrotną aktualizacji pola opisaną w the przewodnik po polach, lub ustaw DefaultResponse na polu, aby miał wartość domyślną.
Pole CITATION lub BIBLIOGRAPHY jest renderowane jako puste Ten SourceTag nie pasuje do żadnego Source w danych bibliograficznych dokumentu. Dodaj pasujący Source – zobacz przewodnik po bibliografii.
Pole DDE, DDEAUTO lub LINK nie odświeża się Pola te odwołują się do zewnętrznego źródła OLE, które nie jest dostępne poza oryginalnym kontekstem Windows/OLE. Traktuj zapisany wynik pola jako ostatnio znaną wartość w takiej sytuacji.
Odnośnik wstawiony za pomocą InsertHyperlink nie zawiera właściwości, której potrzebuję DocumentBuilder.InsertHyperlink() jest skrótem, który nie udostępnia wszystkich FieldHyperlink właściwość. Utwórz lub pobierz FieldHyperlink bezpośrednio, aby ustawić właściwości, takie jak ScreenTip or IsImageMap.
Najczęściej zadawane pytania
Jaka jest różnica między FieldRef a FieldStyleRef?
FieldRef odwołuje się do treści w nazwanej zakładce (BookmarkName); FieldStyleRef natomiast odwołuje się do najbliższego akapitu sformatowanego przy użyciu podanego StyleName, niezależnie od zakładek.
Jak wstawić prosty hiperłącze bez ręcznego tworzenia pola?
Wywołaj DocumentBuilder.InsertHyperlink(displayText, urlOrBookmark, isBookmark).
Czy te klasy pól linku i odniesienia znajdują się w osobnej przestrzeni nazw niż inne pola?
Nie — FieldHyperlink, FieldRef, FieldCitation oraz pozostałe klasy opisane tutaj są zwykłymi podklasami Field w przestrzeni nazw Aspose.Words.Fields, tej samej przestrzeni nazw używanej dla każdego innego typu pola.
Jak pola cytowań odnoszą się do modelu danych bibliografii?
FieldCitation and FieldBibliography renderuj zawartość, wyszukując SourceTag przeciwko Source rekordy opisane w przewodnik bibliograficzny – te klasy pól obsługują renderowanie, podczas gdy Source and Contributor klasy przechowują podstawowe dane.
Jak utworzyć zakładkę przed jej odwołaniem?
Wywołaj DocumentBuilder.StartBookmark(bookmarkName) przed treścią, a DocumentBuilder.EndBookmark(bookmarkName) po niej, używając tej samej nazwy dla obu wywołań.