Arbeta med strukturerade dokumenttaggar (innehållskontroller)
Arbeta med strukturerade dokumenttaggar (innehållskontroller)
En strukturerad dokumenttagg (SDT), känd i Word-UI som en innehållskontroll, omsluter ett stycke dokumentinnehåll med typad, begränsad redigeringsbeteende – en kryssruta, en datumväljare, en rullgardinslista eller en vanlig- eller riktext-platshållare. Aspose.Words FOSS för .NET modellerar dessa genom den Aspose.Words.Markup namnrymd, rubricerad av den StructuredDocumentTag klass. Den här sidan behandlar att infoga innehållskontroller, konfigurera varje typ, hitta och ta bort dem samt binda dem till anpassade XML-data.
Objektmodellen för strukturerade dokumenttaggar
StructuredDocumentTag är en CompositeNode som också implementerar IMarkupNode, ITrackableNode och IStructuredDocumentTag. SdtType identifierar vilken typ av kontroll det är. Tag och Title innehåller de identifierande strängar som författare anger i Word; Placeholder (en BuildingBlock) och PlaceholderName tillhandahåller den uppmaningstext som visas när kontrollen är tom, rapporterad via IsShowingPlaceholderText. LockContentControl förhindrar att kontrollen tas bort, och LockContents förhindrar att dess innehåll redigeras, oberoende av varandra.
Infoga innehållskontroller
DocumentBuilder.InsertStructuredDocumentTag(SdtType) infogar en ny kontroll vid markören, men endast för sju av SdtType-värdena: PlainText, RichText, Checkbox, DropDownList, ComboBox, Picture och Date. RepeatingSection och RepeatingSectionItem kan inte infogas vid en textmarkör på detta sätt – de omsluter i stället hela stycken eller tabellrader. De återstående SdtType-värdena som finns i Word-filer men som inte finns i Word-gränssnittet som infogbara typer – None, Bibliography, Citation, Equation, BuildingBlockGallery, DocPartObj, Group och EntityPicker – stöds inte av denna infogningsmetod.
Typ-specifikt innehåll
En kryssrutan kontrolls tillstånd är StructuredDocumentTag.Checked; SetCheckedSymbol() och SetUncheckedSymbol() anger de glyfer som visas för varje tillstånd. En datumkontroll lagrar sitt värde i FullDate, med DateDisplayFormat och DateDisplayLocale som styr hur den renderas, DateStorageFormat (en SdtDateStorageFormat) som styr hur den lagras när den är bunden till XML data, och CalendarType (en SdtCalendarType) som väljer kalendersystemet. En rullgardinslista eller kombinationsruta visar sina val via ListItems, en SdtListItemCollection av SdtListItem (DisplayText, Value) med en SelectedValue. En rentextkontrolls Multiline egenskap tillåter eller förbjuder radbrytningar inuti den.
Utseende och låsning
Appearance (SdtAppearance) styr hur kontrollen visuellt avgränsas i Word. Color anger dess markeringsfärg, och ContentsFont / EndCharacterFont styr typsnittet som tillämpas på dess innehåll och dess avslutande tecken. LockContentControl och LockContents är oberoende växlar – den första hindrar borttagning av själva kontrollen, den andra hindrar redigering av vad som finns i den.
Hitta och ta bort innehållskontroller
Range.StructuredDocumentTags returnerar en StructuredDocumentTagCollection som är avgränsad till det intervallet, med GetById(), GetByTag() och GetByTitle() för riktad sökning tillsammans med Remove() och RemoveAt(). På en enskild StructuredDocumentTag tar Remove() bort kontrollen och dess innehåll tillsammans, RemoveSelfOnly() tar bara bort omslaget och behåller dess innehåll i dokumentet, och Clear() tömmer kontrollens innehåll samtidigt som kontrollen själv behålls.
XML databindning
StructuredDocumentTag.XmlMapping är en XmlMapping instans som beskriver en bindning till en anpassad XML del i dokumentet: CustomXmlPart, XPath, PrefixMappings, StoreItemId och IsMapped. SetMapping() etablerar bindningen till en befintlig anpassad XML del och Delete() tar bort den.
Flersektion (intervall) innehållskontroller
En innehållskontroll som sträcker sig över mer än en sektion – rapporterad av IsMultiSection – representeras inte av en enda StructuredDocumentTag node utan av ett par StructuredDocumentTagRangeStart och StructuredDocumentTagRangeEnd noder, kopplade genom StructuredDocumentTagRangeStart.RangeEnd. Både enskilda nod- och intervallformer implementerar det gemensamma IStructuredDocumentTag interface, så kod som bara behöver Tag, Title, SdtType, Placeholder och liknande identifierande egenskaper kan fungera med båda formerna enhetligt.
Tips och bästa praxis
- Kontrollera
DocumentBuilder.InsertStructuredDocumentTag()s supported-type-lista innan du förlitar dig på den – endastPlainText,RichText,Checkbox,DropDownList,ComboBox,PictureochDatekan infogas vid markören; andra typer kastar ett undantag. - Använd
RemoveSelfOnly()istället förRemove()när du vill ”platta till” en innehållskontroll – behåll dess innehåll i dokumentet men ta bort kontrollomslaget. - Fyll i
ListItemsinnan du förväntar dig att enDropDownListellerComboBoxkontroll ska visa val, och sättSelectedValueför att välja den aktiva. - Programmera mot
IStructuredDocumentTagsnarare änStructuredDocumentTagdirekt om din kod måste hantera både vanliga och flersektions- (intervall-) innehållskontroller på samma sätt. XmlMapping.SetMapping()binder till en anpassad XML-del som redan måste finnas i dokumentets anpassade XML datalager – lägg till eller ladda XML-data innan du mappar en kontroll till den.
Vanliga problem
| Problem | Orsak | Lösning |
|---|---|---|
InsertStructuredDocumentTag() kastar NotImplementedException | Den begärda SdtType (till exempel Citation, Equation eller BuildingBlockGallery) är inte en av de sju infogbara typerna | Använd någon av PlainText, RichText, Checkbox, DropDownList, ComboBox, Picture, Date |
InsertStructuredDocumentTag() kastar InvalidOperationException | RepeatingSection eller RepeatingSectionItem begärdes vid en textmarkör | Dessa typer omsluter hela stycken eller tabellrader, inte en markörposition |
| Att ta bort en innehållskontroll raderar också texten i den | Remove() raderar kontrollen och dess innehåll samtidigt | Anropa RemoveSelfOnly() istället för att behålla innehållet |
| Kryssrutan visar inte den förväntade symbolen | Anpassade markerade/omarkerade glyfer var inte inställda | Anropa SetCheckedSymbol() och SetUncheckedSymbol() |
FAQ
Vilka typer av innehållskontroller 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?
Använd Range.StructuredDocumentTags.GetByTag(), eller GetByTitle() / GetById() om du matchar på dem istället.
Hur tar jag bort en innehållskontroll men behåller dess innehåll?
Anropa StructuredDocumentTag.RemoveSelfOnly() snarare än Remove().
Hur binder jag en innehållskontroll till anpassad XML-data?
Anropa XmlMapping.SetMapping() på kontrollen och peka den på en befintlig anpassad XML del samt ett XPath-uttryck i den.
Vad är skillnaden mellan en enkel StructuredDocumentTag och en med intervall?
En innehållskontroll som sträcker sig över mer än en dokumentsektion representeras som ett StructuredDocumentTagRangeStart / StructuredDocumentTagRangeEnd-par istället för en enskild nod; båda formerna implementerar IStructuredDocumentTag.
API Reference Sammanfattning
| Klass / Gränssnitt / Enum | Beskrivning |
|---|---|
StructuredDocumentTag | Innehållsstyrningsnod; SdtType, Tag, Title, Remove(), RemoveSelfOnly(), Clear() |
IStructuredDocumentTag | Gemensamt gränssnitt som delas av vanliga och flersektionsinnehållskontroller |
StructuredDocumentTagCollection | Innehållskontroller i ett intervall, via Range.StructuredDocumentTags; GetById(), GetByTag(), GetByTitle() |
StructuredDocumentTagRangeStart / StructuredDocumentTagRangeEnd | Start/slut-par som representerar en flersektionsinnehållskontroll |
SdtType | Enum som identifierar typen av innehållskontroll |
SdtAppearance | Visuell avgränsningsstil för en innehållskontroll |
SdtCalendarType / SdtDateStorageFormat | Kalendersystem och lagringsformat för en datumkontroll |
SdtListItem / SdtListItemCollection | Alternativ för en rullgardinslista eller kombinationsruta |
XmlMapping | Anpassad XML databindning för en innehållskontroll; SetMapping(), Delete() |
DocumentBuilder.InsertStructuredDocumentTag | Infogar en stödd innehållskontrolltyp vid markören |