Hur man arbetar med strukturerade dokumenttaggar i .NET
Den här guiden visar hur du infogar, konfigurerar, hittar, tar bort och binder data till strukturerade dokumenttaggar (innehållskontroller) i Aspose.Words FOSS för .NET, med StructuredDocumentTag klass i Aspose.Words.Markup namnutrymme. Den täcker vilka innehållskontrolltyper DocumentBuilder kan infoga, ställa in typ-specifikt innehåll såsom kryssrute-status eller rullgardinsval, lokalisera kontroller efter tagg eller titel, ta bort en kontroll med eller utan dess innehåll, och mappa en kontroll till anpassade XML-data.
Steg-för-steg-guide
Steg 1: Installera paketet
Aspose.Words FOSS för .NET har ännu inte publicerat ett NuGet-paket – bygg biblioteket från källkoden istället. Klona https://github.com/aspose-words-foss/Aspose.Words-FOSS-for-.NET.git, bygg sedan Aspose.Words.sln i Release-konfiguration med .NET-SDK:n och referera den resulterande Aspose.Words-assemblyn i ditt projekt. Biblioteket riktar sig mot .NET Standard 2.0, så det körs på .NET Framework 4.6.2+ och .NET 6/8/10.
Steg 2: Importera erforderliga klasser
Lägg till en using Aspose.Words;-direktiv för Document och DocumentBuilder, samt en using Aspose.Words.Markup;-direktiv för StructuredDocumentTag, SdtType, SdtListItem, SdtListItemCollection, XmlMapping och de andra innehållskontrollklasser som den här guiden täcker.
Steg 3: Kontrollera vilka innehållskontrolltyper du kan infoga
Innan du infogar, kontrollera om mål-SdtType är en av de sju typer som accepteras av DocumentBuilder.InsertStructuredDocumentTag(SdtType): PlainText, RichText, Checkbox, DropDownList, ComboBox, Picture och Date. RepeatingSection och RepeatingSectionItem kan inte infogas vid en textmarkör med denna metod – de omsluter hela stycken eller tabellrader istället. De återstående SdtType-värdena som kan förekomma i en Word-fil men som inte finns i Word-gränssnittet som infogbara typer – None, Bibliography, Citation, Equation, BuildingBlockGallery, DocPartObj, Group och EntityPicker – accepteras inte alls av denna infogningsmetod.
Steg 4: Infoga en innehållskontroll vid markören
Anropa DocumentBuilder.InsertStructuredDocumentTag(SdtType) med en av de sju stödda typerna för att infoga en ny kontroll vid byggarens aktuella markörposition; anropet returnerar den nya StructuredDocumentTag. Ställ in Tag och Title på den returnerade kontrollen för att ge den identifierande strängar som författare ser i Word, och ange PlaceholderName (stödd av en Placeholder BuildingBlock) för den uppmaningstext som Word visar medan kontrollen är tom – IsShowingPlaceholderText rapporterar om den uppmaningen för närvarande visas.
Steg 5: Konfigurera typ-specifikt innehåll
För en kryssrutan-kontroll, läs eller ange StructuredDocumentTag.Checked, och anropa SetCheckedSymbol() / SetUncheckedSymbol() för att anpassa de symboler som visas för varje tillstånd. För en datumkontroll, ange FullDate, med DateDisplayFormat och DateDisplayLocale som styr hur den renderas, DateStorageFormat (SdtDateStorageFormat) som styr hur den lagras när den är bunden till XML-data, och CalendarType (SdtCalendarType) som väljer kalendersystemet. För en rullgardinslista eller kombinationsruta, fyll i ListItems – ett SdtListItemCollection av SdtListItem (DisplayText, Value) – innan du anger SelectedValue för att välja det aktiva alternativet. För en ren-text-kontroll är Multiline en bool-egenskap på StructuredDocumentTag som kan anges för att konfigurera kontrollen.
Steg 6: Kontrollera utseende och låsning
Ange Appearance (SdtAppearance) för att styra hur kontrollen visuellt avgränsas i Word, och Color för att sätta dess markeringsfärg. ContentsFont och EndCharacterFont styr typsnittet som tillämpas på kontrollens innehåll och dess avslutande tecken. LockContentControl och LockContents är oberoende växlar – ange LockContentControl för att blockera borttagning av själva kontrollen, och LockContents för att blockera redigering av dess innehåll, utan att påverka den andra.
Steg 7: Hitta och ta bort innehållskontroller
Läs Range.StructuredDocumentTags – ett StructuredDocumentTagCollection avgränsat till det intervallet – och anropa GetById(), GetByTag() eller GetByTitle() för att lokalisera en specifik kontroll, eller Remove() / RemoveAt() på samlingen för att ta bort en efter referens eller index. På en enskild kontroll, anropa Remove() för att radera kontrollen tillsammans med dess innehåll, RemoveSelfOnly() för att bara radera omslaget medan du behåller dess innehåll i dokumentet, eller Clear() för att tömma dess innehåll medan kontrollen själv förblir på plats.
Steg 8: Binda en kontroll till anpassad XML Data
Läs StructuredDocumentTag.XmlMapping – en XmlMapping instans – och anropa SetMapping(customXmlPart, xPath, prefixMapping) för att binda kontrollen till en befintlig anpassad XML-del som redan finns i dokumentets anpassade XML datalager, med hjälp av ett XPath-uttryck för att välja det bundna elementet. XmlMapping.IsMapped rapporterar om en bindning för närvarande är aktiv, CustomXmlPart och StoreItemId identifierar den bundna datadelen, och Delete() tar bort mappningen.
Steg 9: Hantera innehållskontroller som sträcker sig över flera sektioner
En innehållskontroll som sträcker sig över mer än en dokumentsektion – rapporterad av IsMultiSection – representeras inte av en enda StructuredDocumentTag-nod utan av ett StructuredDocumentTagRangeStart / StructuredDocumentTagRangeEnd-par, kopplat genom StructuredDocumentTagRangeStart.RangeEnd. Programmera mot det delade IStructuredDocumentTag-gränssnittet (Tag, Title, Placeholder, PlaceholderName, Appearance, IsShowingPlaceholderText, RemoveSelfOnly()) när koden behöver hantera både enstaka nod- och intervallformer enhetligt, snarare än att grenbryta på den konkreta typen.
Vanliga problem och lösningar
InsertStructuredDocumentTag kastar NotImplementedException Den begärda SdtType – till exempel Citation, Equation, eller BuildingBlockGallery – är inte en av de sju infogbara typerna. Använd PlainText, RichText, Checkbox, DropDownList, ComboBox, Picture, eller Date istället.
InsertStructuredDocumentTag kastar InvalidOperationException RepeatingSection or RepeatingSectionItem begärdes vid en textmarkör. Dessa två typer omsluter hela stycken eller tabellrader snarare än att infogas vid en markörposition.
Att ta bort en innehållskontroll tar också bort texten inuti den Remove() tar bort kontrollen och dess innehåll tillsammans. Anropa RemoveSelfOnly() istället för att behålla innehållet i dokumentet och bara ta bort omslaget.
Kryssrutan visar inte den förväntade symbolen Anpassade ikoner för markerad och omarkerad har aldrig ställts in. Anropa SetCheckedSymbol() and SetUncheckedSymbol() på kontrollen.
En rullgardinslista eller kombinationsruta visar inga val ListItems fylldes aldrig. Lägg till SdtListItem poster till kontrollens ListItems samling innan du förväntar dig att val ska visas, sedan ange SelectedValue för att välja den aktiva.
Vanliga frågor
Vilka innehållskontrolltyper kan jag infoga direkt med DocumentBuilder?
PlainText, RichText, Checkbox, DropDownList, ComboBox, Picture och Date. Andra SdtType-värden stöds inte av InsertStructuredDocumentTag().
Hur hittar jag alla innehållskontroller med en specifik tagg?
Läs Range.StructuredDocumentTags och anropa GetByTag(), eller GetByTitle() / GetById() om du matchar på de identifierarna istället.
Hur tar jag bort en innehållskontroll men behåller dess innehåll i dokumentet?
Anropa StructuredDocumentTag.RemoveSelfOnly() istället för Remove().
Hur binder jag en innehållskontroll till anpassade XML data?
Anropa XmlMapping.SetMapping() på kontrollens XmlMapping, och peka den på en befintlig anpassad XML-del samt ett XPath-uttryck i den.
Hur skiljer sig en innehållskontroll som sträcker sig över flera sektioner från en vanlig sådan?
Den representeras som ett StructuredDocumentTagRangeStart / StructuredDocumentTagRangeEnd-par istället för en enskild StructuredDocumentTag-nod; båda formerna implementerar IStructuredDocumentTag, så IsMultiSection talar om för dig vilken form du arbetar med.