Hoe te werken met Word-links en verwijzingen in .NET
Deze gids toont hoe je hyperlinks, kruisverwijzingen naar bladwijzers, velden met gevraagde waarden en citatievelden invoegt in Aspose.Words FOSS voor .NET, gebruikmakend van FieldHyperlink, FieldRef, FieldPageRef, FieldCitation, en de andere link- en referentie Field subklassen in de Aspose.Words.Fields namespace. Het behandelt het invoegen van een eenvoudige hyperlink, het maken van bladwijzers en het kruisverwijzen daarvan, het vragen om waarden tijdens een veldupdate, en het citeren van bibliografische bronnen.
Stapsgewijze gids
Stap 1: Installeer het pakket
Aspose.Words FOSS voor .NET publiceert nog geen NuGet-pakket – bouw de bibliotheek in plaats daarvan vanuit de bron. Clone https://github.com/aspose-words-foss/Aspose.Words-FOSS-for-.NET.git, bouw vervolgens Aspose.Words.sln in Release-configuratie met de .NET SDK en verwijs naar de resulterende Aspose.Words-assembly vanuit je project. De bibliotheek target .NET Standard 2.0, dus hij draait op .NET Framework 4.6.2+ en .NET 6/8/10.
Stap 2: Importeer vereiste klassen
Voeg een using Aspose.Words;-directive toe voor Document en DocumentBuilder, en een using Aspose.Words.Fields;-directive voor FieldHyperlink, FieldRef, FieldPageRef, FieldNoteRef, FieldStyleRef, FieldSet, FieldAsk, FieldFillIn, FieldCitation, FieldBibliography, en de andere veldklassen die deze gids behandelt.
Stap 3: Een hyperlink invoegen
Voor een eenvoudige hyperlink roep je DocumentBuilder.InsertHyperlink(displayText, urlOrBookmark, isBookmark) aan – geef isBookmark: false op voor een URL-doel of true om naar een bladwijzer in hetzelfde document te linken. Schakel over naar het rechtstreeks construeren van een FieldHyperlink wanneer eigenschappen die de snelkoppeling niet blootlegt nodig zijn: Address en SubAddress bevatten de doel-URL of de locatie in het document, ScreenTip stelt de zweeftooltip in, OpenInNewWindow en IsImageMap zijn weergave-vlaggen, en Target geeft een browserframe een naam.
Stap 4: Een bladwijzer maken om te refereren
Roep DocumentBuilder.StartBookmark(bookmarkName) aan vóór de inhoud die de bladwijzer moet omvatten, en DocumentBuilder.EndBookmark(bookmarkName) erna, met dezelfde naam voor beide oproepen. DocumentBuilder.MoveToBookmark(bookmarkName) verplaatst de cursor naar een bladwijzer die al bestaat – handig om naar een locatie te navigeren voordat je een kruisverwijzingsveld er dichtbij invoegt.
Stap 5: Een kruisverwijzing naar die bladwijzer invoegen
FieldRef (het REF veld), FieldPageRef (PAGEREF), en FieldNoteRef (NOTEREF) lossen elk inhoud op bij een benoemde bladwijzer via hun BookmarkName eigenschap. Stel InsertHyperlink in om de verwijzing klikbaar te maken, en InsertRelativePosition om een relatieve positie (“boven” / “onder”) te rapporteren in plaats van de verwezen tekst zelf. FieldRef ondersteunt bovendien alinea-nummeringsopties – InsertParagraphNumber, InsertParagraphNumberInFullContext, InsertParagraphNumberInRelativeContext, NumberSeparator – en IncludeNoteOrComment. FieldStyleRef (STYLEREF) lost op naar de dichtstbijzijnde alinea die is opgemaakt met een gegeven StyleName in plaats van een bladwijzer, met SearchFromBottom om achterwaarts te zoeken vanaf de positie van het veld. FieldSet (SET) definieert een bladwijzer-tekstwaarde – BookmarkName en BookmarkText – die een REF veld elders kan oplossen.
Stap 6: Een waarde opvragen tijdens een update
FieldAsk (ASK) en FieldFillIn (FILLIN) vraagt een waarde van degene die het veld bijwerkt: stel PromptText naar de tekst die aan de gebruiker wordt getoond, DefaultResponse voor een fallback-waarde, en PromptOnceOnMailMerge om herhaaldelijk vragen tijdens een mail-merge te beperken. FieldAsk slaat bovendien zijn antwoord op bij BookmarkName zodat andere velden ernaar kunnen verwijzen. Voor ongecontroleerde veldupdates, lever antwoorden programmatisch in plaats van interactief te vragen; zie de veldenhandleiding voor de callback-interface die dit doet.
Stap 7: Verwijs naar externe of gekoppelde inhoud
FieldDde (DDE) en FieldDdeAuto (DDEAUTO) koppelen naar inhoud in een andere toepassing via ProgId, SourceFullName en SourceItem, waarbij InsertAsText, InsertAsHtml, InsertAsPicture, InsertAsRtf, InsertAsUnicode en InsertAsBitmap de ingevoegde weergave selecteren, en AutoUpdate / IsLinked het vernieuwingsgedrag regelen. FieldLink (LINK) is het OLE-link-equivalent, met toevoeging van FormatUpdateType. FieldImport (IMPORT) en FieldIncludePicture (INCLUDEPICTURE) halen een externe afbeelding op via SourceFullName en GraphicFilter. FieldInclude (INCLUDE) en FieldIncludeText (INCLUDETEXT) halen externe documentinhoud op, met BookmarkName om het opgenomen bereik af te bakenen en LockFields om te voorkomen dat het wordt vernieuwd; FieldIncludeText ondersteunt bovendien XML-bronnen via Encoding, MimeType, NamespaceMappings, XPath en XslTransformation.
Stap 8: Verwijs naar bouwblokken en glossariumvermeldingen
FieldAutoText (AUTOTEXT), FieldAutoTextList (AUTOTEXTLIST) en FieldGlossary (GLOSSARY) verwijzen allemaal naar een benoemde bouwblokvermelding via EntryName; FieldAutoTextList voegt ListStyle en ScreenTip toe voor de lijst-stijl weergave.
Stap 9: Citaat- en bibliografievervelden invoegen
FieldCitation (CITATION) en FieldBibliography (BIBLIOGRAPHY) render content afkomstig van de bibliografische gegevens van het document. Stel FieldCitation.SourceTag (of de alternatieve AnotherSourceTag) om te identificeren welke bron het citeert, en gebruik Prefix, Suffix, PageNumber, VolumeNumber, en de Suppress* vlaggen (SuppressAuthor, SuppressTitle, SuppressYear) om te bepalen hoe de citatie wordt opgemaakt. FieldBibliography.SourceTag, FilterLanguageId, en FormatLanguageId bepalen welke bronnen verschijnen in de gerenderde bibliografie en in welke taal. Deze velden renderen pas correct zodra de overeenkomst Source records bestaan – zie de bibliografiegids voor het bouwen daarvan.
Veelvoorkomende problemen en oplossingen
REF-, PAGEREF- of NOTEREF-veld toont een foutresultaat De BookmarkName het doel bestaat niet in het document. Maak de bladwijzer met DocumentBuilder.StartBookmark() / EndBookmark() voordat het veld wordt bijgewerkt.
ASK- of FILLIN-veld blokkeert een ongecontroleerde update Er is geen callback toegewezen om een antwoord programmatisch te leveren. Wijs de veld-update-callback toe die beschreven staat in de veldenhandleiding, of stel DefaultResponse op het veld zodat het een fallback-waarde heeft.
CITATION- of BIBLIOGRAPHY-veld wordt leeg weergegeven Het SourceTag komt niet overeen met enige Source in de bibliografische gegevens van het document. Voeg de overeenkomende toe Source – zie de bibliografiegids.
DDE, DDEAUTO, of LINK-veld wordt niet vernieuwd Deze velden verwijzen naar een externe OLE-bron die niet beschikbaar is buiten de oorspronkelijke Windows/OLE-context. Beschouw het opgeslagen resultaat van het veld als de laatst bekende waarde in die situatie.
Een hyperlink ingevoegd met InsertHyperlink mist een eigenschap die ik nodig heb DocumentBuilder.InsertHyperlink() is een snelkoppeling die niet elke FieldHyperlink eigenschap. Construeer of haal de FieldHyperlink direct om eigenschappen in te stellen zoals ScreenTip or IsImageMap.
Veelgestelde vragen
Wat is het verschil tussen FieldRef en FieldStyleRef?
FieldRef verwijst naar inhoud op een benoemde bladwijzer (BookmarkName); FieldStyleRef verwijst daarentegen naar de dichtstbijzijnde alinea die is opgemaakt met een gegeven StyleName, onafhankelijk van bladwijzers.
Hoe voeg ik een eenvoudige hyperlink in zonder handmatig een Field te bouwen?
Roep DocumentBuilder.InsertHyperlink(displayText, urlOrBookmark, isBookmark) aan.
Zijn deze link- en referentie-veldklassen in een aparte namespace dan andere velden?
Nee – FieldHyperlink, FieldRef, FieldCitation en de rest van de hier behandelde klassen zijn gewone Field subklassen in de Aspose.Words.Fields namespace, dezelfde namespace die wordt gebruikt voor elk ander veldtype.
Hoe verhouden citation fields zich tot het bibliography data model?
FieldCitation and FieldBibliography inhoud weergeven door op te zoeken SourceTag tegen de Source records beschreven in de bibliografiehandleiding – deze veldklassen verwerken weergave, terwijl de Source and Contributor klassen bevatten de onderliggende gegevens.
Hoe maak ik een bookmark aan voordat ik ernaar verwijs?
Roep DocumentBuilder.StartBookmark(bookmarkName) aan vóór de content, en DocumentBuilder.EndBookmark(bookmarkName) erna, met dezelfde naam voor beide aanroepen.