Práce s řízením obsahu SDT

In Microsoft Word, si můžete vytvořit formulář tím, že začnete s šablonou a přidáváním ovládacích prvků obsahu, včetně zaškrtávacích boxů, textových krabic, sběračů dat a seznamů drop-downů. In Aspose.Words,? Strukturovaná značka dokumentu nebo kontrola obsahu z jakéhokoli dokumentu naloženého do Aspose.Words je dovážen jako uzel StructedDocumentTag. Strukturované značky dokumentů (SDT nebo kontrola obsahu) umožňují vkládání sémantik definovaných zákazníků, jakož i jeho chování a vzhled do dokumentu.

Strukturovaný dokument Značka se může objevit v dokumentu na následujících místech:

  • Block-level - Mezi odstavci a tabulky, jako dítě těla, HeaderFooter, Komentář, Poznámka pod čarou nebo Tvar uzel
  • Row-level - Mezi řádky v tabulce jako dítě uzel tabulky
  • Cell-level - Mezi buňkami v řadě tabulky, jako dítě uzel řádku
  • Mezi inline obsah uvnitř, jako dítě odstavce
  • Nested inside another StrucatedDocument Značka

Vkládání kontrol obsahu do dokumentu

V této verzi Aspose.Words, lze vytvořit tyto typy SDT nebo řízení obsahu:

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

Následující příklad kódu ukazuje, jak vytvořit kontrolu obsahu zaškrtávacího políčka typu:

// 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);

Následující příklad kódu ukazuje, jak vytvořit kontrolu obsahu textového pole bohatého typu:

// 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);

Následující příklad kódu ukazuje, jak vytvořit kontrolu obsahu typu kombo pole:

// 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);

Jak aktualizovat kontrolu obsahu

Tato sekce vysvětluje, jak programově aktualizovat hodnoty SDT nebo řízení obsahu.

Následující příklad kódu ukazuje, jak nastavit aktuální stav zaškrtávacího políčka:

// 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);

Následující příklad kódu ukazuje, jak upravit ovládání obsahu textového pole typu, seznamu drop-down a obrázku:

// 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);

Řízení obsahu vazby na vlastní XML části

Ovládání obsahu můžete navázat pomocí XML dat (custom XML part) v dokumentech Word.

Následující příklad kódu ukazuje, jak přivázat kontrolu obsahu na vlastní XML části:

// 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);

XML Mapování strukturovaného rozsahu značek dokumentů

Mapování tohoto strukturovaného rozsahu tagů dokumentů na XML data můžete získat ve vlastní XML části aktuálního dokumentu pomocí Strukturovaný dokumentTagRangeStart.XmlMaping vlastnost. Nicméně SetMapping metoda může být použita pro mapování strukturovaného rozsahu značek dokumentů na XML data.

Následující příklad kódu ukazuje, jak nastavit mapování XML:

// 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");

Jasný obsah kontroly obsahu

Obsah kontroly obsahu můžete vymazat zobrazením zástupce. • StructuredDocumentTag.Clear metoda vymaže obsah této strukturované značky dokumentu a pokud je definován, zobrazí zástupce. Nicméně, Není možné odstranit obsah kontroly obsahu, pokud má revize. Pokud kontrola obsahu nemá žádné místodržitele, vloží se pět míst jako v Microsoft Word (kromě opakujících se sekcí, opakujících se sekcí, skupin, check-boxů, citací). Pokud je kontrola obsahu mapována na vlastní XML, referenční XML uzel je vymazán.

Následující příklad kódu ukazuje, jak odstranit obsah kontroly obsahu:

// 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);

Změnit kontrolní pozadí obsahu a barvy okraje

StructuredDocumentTag.Color vlastnost umožňuje získat nebo nastavit barvu kontroly obsahu. Barva ovlivňuje kontrolu obsahu ve dvou situacích:

  1. MS Word zdůrazňuje pozadí kontroly obsahu, když se myš pohybuje přes kontrolu obsahu. To pomáhá identifikovat kontrolu obsahu. Barva zvýraznění je trochu “měkčí” než Color. Například, MS Word zdůrazňuje pozadí s růžovou barvou, když Color je Red.
  2. Při interakci (editace, výběr atd.) s kontrolou obsahu je hranice kontroly obsahu zbarvena Color.

Následující příklad kódu ukazuje, jak změnit barvu kontroly obsahu:

// 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);

Jak nastavit styl pro formátování textu zadaného do kontroly obsahu

Pokud chcete nastavit styl kontroly obsahu, můžete použít StructuredDocumentTag.Style nebo StructuredDocumentTag.StyleName vlastnosti. Když zadáte text do kontroly obsahu ve výstupním dokumentu, bude mít zadaný text styl “Quote.”

Následující příklad kódu ukazuje, jak nastavit styl kontroly obsahu:

// 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);

Práce s kontrolou obsahu v sekci opakování

Ovládání obsahu opakované sekce umožňuje opakování obsahu obsaženého v něm. Použití Aspose.Words, mohou být vytvořeny strukturované uzly značky dokumentů opakující se sekce a opakující se typy položek oddílu a pro tento účel, Typ výčtu SdtType poskytuje RepeatingSectionItem majetek.

Následující příklad kódu ukazuje, jak přivázat kontrolu obsahu opakované části k tabulce.

// 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");