Werken met Content Control SDT

In Microsoft Word, U kunt een formulier aanmaken door te beginnen met een sjabloon en inhoudsopties toe te voegen, waaronder selectievakjes, tekstvakjes, datumkiezers en drop-downlijsten. In Aspose.Words een gestructureerde document label of inhoudscontrole van een document geladen in Aspose.Words wordt geïmporteerd als een StructuredDocumentTag knooppunt. Gestructureerde documenttags (SDT of content control) maken het mogelijk om door de klant gedefinieerde semantiek en zijn gedrag en uiterlijk in een document in te sluiten.

Gestructureerddocument Tag kan voorkomen in een document op de volgende plaatsen:

  • Blok-niveau onder de paragrafen en tabellen, als kind van een lichaam, HeaderFooter, Commentaar, Voetnoot of een Shape knooppunt
  • Rij-niveau onder rijen in een tabel, als kind van een Tafelknooppunt
  • Cell-level onder cellen in een tabel rij, als kind van een rij knooppunt
  • Inline-level onder inline-inhoud binnen, als kind van een alinea
  • Genest in een ander gestructureerd document Tag

Inhoudscontrole in een document invoegen

In deze versie van Aspose.Words, de volgende soorten SDT of inhoudscontrole kunnen worden gecreëerd:

  • Checkbox
  • DropDownList
  • ComboBox
  • Date
  • BuildingBlockGallery
  • Group
  • Picture
  • RichText
  • PlainText

Het volgende voorbeeld van code laat zien hoe content control van type checkbox te maken:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET
// The path to the documents directory.
string dataDir = RunExamples.GetDataDir_WorkingWithDocument();
// Open the empty document
Document doc = new Document();
DocumentBuilder builder = new DocumentBuilder(doc);
StructuredDocumentTag SdtCheckBox = new StructuredDocumentTag(doc, SdtType.Checkbox, MarkupLevel.Inline);
// Insert content control into the document
builder.InsertNode(SdtCheckBox);
dataDir = dataDir + "CheckBoxTypeContentControl_out.docx";
doc.Save(dataDir, SaveFormat.Docx);

Het volgende voorbeeld van code laat zien hoe inhoudscontrole van het type rijke tekstvak te maken:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET
// The path to the documents directory.
string dataDir = RunExamples.GetDataDir_WorkingWithDocument();
Document doc = new Document();
StructuredDocumentTag sdtRichText = new StructuredDocumentTag(doc, SdtType.RichText, MarkupLevel.Block);
Paragraph para = new Paragraph(doc);
Run run = new Run(doc);
run.Text = "Hello World";
run.Font.Color = Color.Green;
para.Runs.Add(run);
sdtRichText.ChildNodes.Add(para);
doc.FirstSection.Body.AppendChild(sdtRichText);
dataDir = dataDir + "RichTextBoxContentControl_out.docx";
doc.Save(dataDir);

Het volgende voorbeeld van code laat zien hoe content control van het type combo box te maken:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET
// The path to the documents directory.
string dataDir = RunExamples.GetDataDir_WorkingWithDocument();
Document doc = new Document();
StructuredDocumentTag sdt = new StructuredDocumentTag(doc, SdtType.ComboBox, MarkupLevel.Block);
sdt.ListItems.Add(new SdtListItem("Choose an item", "-1"));
sdt.ListItems.Add(new SdtListItem("Item 1", "1"));
sdt.ListItems.Add(new SdtListItem("Item 2", "2"));
doc.FirstSection.Body.AppendChild(sdt);
dataDir = dataDir + "ComboBoxContentControl_out.docx";
doc.Save(dataDir);

Hoe contentbeheer bijwerken

Deze sectie legt uit hoe u de waarden van SDT of inhoudscontrole programmatisch kunt bijwerken.

Het volgende voorbeeld van code laat zien hoe u de huidige status van het selectievakje kunt instellen:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET
// Open an existing document
Document doc = new Document(dataDir + "CheckBoxTypeContentControl.docx");
DocumentBuilder builder = new DocumentBuilder(doc);
// Get the first content control from the document
StructuredDocumentTag SdtCheckBox = (StructuredDocumentTag)doc.GetChild(NodeType.StructuredDocumentTag, 0, true);
// StructuredDocumentTag.Checked property gets/sets current state of the Checkbox SDT
if (SdtCheckBox.SdtType == SdtType.Checkbox)
SdtCheckBox.Checked = true;
dataDir = dataDir + "SetCurrentStateOfCheckBox_out.docx";
doc.Save(dataDir);

Het volgende voorbeeld van code laat zien hoe u de inhoudscontrole van het type platte tekstvak, drop-down lijst en afbeelding kunt wijzigen:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET
// Open an existing document
Document doc = new Document(dataDir + "CheckBoxTypeContentControl.docx");
foreach (StructuredDocumentTag sdt in doc.GetChildNodes(NodeType.StructuredDocumentTag, true))
{
if (sdt.SdtType == SdtType.PlainText)
{
sdt.RemoveAllChildren();
Paragraph para = sdt.AppendChild(new Paragraph(doc)) as Paragraph;
Run run = new Run(doc, "new text goes here");
para.AppendChild(run);
}
else if (sdt.SdtType == SdtType.DropDownList)
{
SdtListItem secondItem = sdt.ListItems[2];
sdt.ListItems.SelectedValue = secondItem;
}
else if (sdt.SdtType == SdtType.Picture)
{
Shape shape = (Shape)sdt.GetChild(NodeType.Shape, 0, true);
if (shape.HasImage)
{
shape.ImageData.SetImage(dataDir + "Watermark.png");
}
}
}
dataDir = dataDir + "ModifyContentControls_out.docx";
doc.Save(dataDir);

Binding Content Control to Custom XML Parts

U kunt content controls binden met XML data (custom XML part) in Word-documenten.

Het volgende voorbeeld van code laat zien hoe content control te binden aan aangepaste XML-onderdelen:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET
Document doc = new Document();
CustomXmlPart xmlPart = doc.CustomXmlParts.Add(Guid.NewGuid().ToString("B"), "<root><text>Hello, World!</text></root>");
StructuredDocumentTag sdt = new StructuredDocumentTag(doc, SdtType.PlainText, MarkupLevel.Block);
doc.FirstSection.Body.AppendChild(sdt);
sdt.XmlMapping.SetMapping(xmlPart, "/root[1]/text[1]", "");
dataDir = dataDir + "BindSDTtoCustomXmlPart_out.doc";
// Save the document to disk.
doc.Save(dataDir);

XMLMapping van het tagbereik van gestructureerde documenten

U kunt de mapping van dit gestructureerde document tag bereik naar XML gegevens in een aangepaste XML deel van het huidige document met behulp van de GestructureerdeDocumentTagRangeStart.XmlMapping eigenschap. De SetMapping methode kan worden gebruikt om een gestructureerd document tag bereik in kaart te brengen naar XML gegevens.

Het volgende voorbeeld van code laat zien hoe je XML mapping kunt instellen:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET
Document doc = new Document(dataDir + "input.docx");
StructuredDocumentTagRangeStart sdtRangeStart = (StructuredDocumentTagRangeStart)doc.GetChild(NodeType.StructuredDocumentTagRangeStart, 0, true);
sdtRangeStart.XmlMapping.SetMapping(doc.CustomXmlParts[0], "/Root/Element", null);
doc.Save(dataDir + "output.docx");

Duidelijke inhoud van een inhoudscontrole

U kunt de inhoud van een inhoudscontrole wissen met het weergeven van een plaatshouder. De StructuredDocumentTag.Clear methode ontruimt inhoud van dit gestructureerde document tag en toont een plaatshouder als het is gedefinieerd. Echter, Het is niet mogelijk om de inhoud van een inhoudscontrole te wissen als er herzieningen zijn. Als een inhoudscontrole geen plaatshouder heeft, worden vijf spaties ingevoegd zoals in Microsoft Word (behalve het herhalen van secties, het herhalen van sectie-items, groepen, check-boxen, citaten). Als een inhoudscontrole is toegewezen aan aangepaste XML, wordt de referentie XML-node gewist.

Het volgende voorbeeld van code laat zien hoe je de inhoud van de inhoudscontrole kunt wissen:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET
Document doc = new Document(dataDir + "input.docx");
StructuredDocumentTag sdt = (StructuredDocumentTag)doc.GetChild(NodeType.StructuredDocumentTag, 0, true);
sdt.Clear();
dataDir = dataDir + "ClearContentsControl_out.doc";
// Save the document to disk.
doc.Save(dataDir);

Achtergrond en randkleuren van inhoudscontrole wijzigen

De StructuredDocumentTag.Color eigenschap kunt u de kleur van de inhoud controle te krijgen of instellen. De kleur beïnvloedt inhoudscontrole in twee situaties:

  1. MS Word benadrukt de achtergrond van de inhoudscontrole wanneer de muis beweegt over de inhoudscontrole. Dit helpt om de inhoudscontrole te identificeren. De kleur van het markeren is een beetje “zachter” dan de Color. Bijvoorbeeld, MS Word benadrukt de achtergrond met de roze kleur, wanneer Color is Red.
  2. Wanneer u interageert (bewerken, plukken etc) met de inhoudscontrole, wordt de rand van de inhoudscontrole gekleurd met de Color.

Het volgende voorbeeld van code laat zien hoe u de kleur van de inhoudscontrole kunt wijzigen:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET
Document doc = new Document(dataDir + "input.docx");
StructuredDocumentTag sdt = (StructuredDocumentTag)doc.GetChild(NodeType.StructuredDocumentTag, 0, true);
sdt.Color = Color.Red;
dataDir = dataDir + "SetContentControlColor_out.docx";
// Save the document to disk.
doc.Save(dataDir);

Hoe stijl instellen om tekst te formatteren in de inhoudscontrole

Als u de stijl van inhoudscontrole wilt instellen, kunt u deze gebruiken StructuredDocumentTag.Style of StructuredDocumentTag.StyleName eigenschappen. Wanneer u de tekst intypt in de inhoudscontrole in het uitvoerdocument, heeft de getypte tekst de stijl “Quote.”

Het volgende voorbeeld van code laat zien hoe je de stijl van inhoudscontrole kunt instellen:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET
Document doc = new Document(dataDir + "input.docx");
StructuredDocumentTag sdt = (StructuredDocumentTag)doc.GetChild(NodeType.StructuredDocumentTag, 0, true);
Style style = doc.Styles[StyleIdentifier.Quote];
sdt.Style = style;
dataDir = dataDir + "SetContentControlStyle_out.docx";
// Save the document to disk.
doc.Save(dataDir);

Werken met het herhalen van sectie Content Control

De controle van de inhoud van de herhaalsectie maakt het mogelijk de inhoud ervan te herhalen. Gebruik Aspose.Words, de gestructureerde documenttagnodes van de herhalende sectie en het herhalen van sectie-itemtypen kunnen worden aangemaakt en voor dit doel; SdtType opsommingstype levert RepeatingSectionItem eigendom.

Het volgende voorbeeld van code laat zien hoe je een repeterende sectie inhoudscontrole aan een tabel bindt.

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET
Document doc = new Document();
DocumentBuilder builder = new DocumentBuilder(doc);
CustomXmlPart xmlPart = doc.CustomXmlParts.Add("Books",
"<books><book><title>Everyday Italian</title><author>Giada De Laurentiis</author></book>" +
"<book><title>Harry Potter</title><author>J K. Rowling</author></book>" +
"<book><title>Learning XML</title><author>Erik T. Ray</author></book></books>");
Table table = builder.StartTable();
builder.InsertCell();
builder.Write("Title");
builder.InsertCell();
builder.Write("Author");
builder.EndRow();
builder.EndTable();
StructuredDocumentTag repeatingSectionSdt =
new StructuredDocumentTag(doc, SdtType.RepeatingSection, MarkupLevel.Row);
repeatingSectionSdt.XmlMapping.SetMapping(xmlPart, "/books[1]/book", "");
table.AppendChild(repeatingSectionSdt);
StructuredDocumentTag repeatingSectionItemSdt =
new StructuredDocumentTag(doc, SdtType.RepeatingSectionItem, MarkupLevel.Row);
repeatingSectionSdt.AppendChild(repeatingSectionItemSdt);
Row row = new Row(doc);
repeatingSectionItemSdt.AppendChild(row);
StructuredDocumentTag titleSdt =
new StructuredDocumentTag(doc, SdtType.PlainText, MarkupLevel.Cell);
titleSdt.XmlMapping.SetMapping(xmlPart, "/books[1]/book[1]/title[1]", "");
row.AppendChild(titleSdt);
StructuredDocumentTag authorSdt =
new StructuredDocumentTag(doc, SdtType.PlainText, MarkupLevel.Cell);
authorSdt.XmlMapping.SetMapping(xmlPart, "/books[1]/book[1]/author[1]", "");
row.AppendChild(authorSdt);
doc.Save(dataDir + "Document.docx");