Работа с Content Control SDT

В Microsoft Word, Вы можете создать форму, начав с шаблона и добавив элементы управления контентом, включая галочки, текстовые поля, датчики и выпадающие списки. в Aspose.Words Тег структурированного документа или управление контентом из любого документа, загруженного в Aspose.Words Импортируется как узел структурированного документа. Теги структурированных документов (SDT или контент-контроль) позволяют встраивать в документ определенную клиентом семантику, а также ее поведение и внешний вид.

Структурированный документ Тег может появиться в документе в следующих местах:

  • Block-level - Среди абзацев и таблиц, как ребенок Тела, HeaderFooter, Комментарий, Сноска или Узел формы
  • Row-level - Среди строк в таблице, как ребенок столового узла
  • Уровень клеток - Среди клеток в строке таблицы, как ребенок узла Row
  • Inline-level - Среди встроенного контента внутри, как ребенок параграфа
  • Внутри другого структурированного документа Тег

Включение контроля контента в документ

В этой версии Aspose.Words, Могут быть созданы следующие типы SDT или контроля контента:

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

Следующий пример кода показывает, как создать контроль содержимого контрольного ящика типа:

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

Следующий пример кода показывает, как создать управление контентом в текстовом поле:

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

Следующий пример кода показывает, как создать управление содержимым комбинированной коробки типа:

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

Как обновить контроль контента

В этом разделе объясняется, как программно обновлять значения SDT или управления контентом.

Следующий пример кода показывает, как установить текущее состояние чекбокса:

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

Следующий пример кода показывает, как изменить элементы управления контентом в виде простого текстового поля, выпадающего списка и изображения:

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

Обязательный контроль контента для пользовательских частей XML

Вы можете связать элементы управления контентом с данными XML (обычная часть XML) в документах Word.

Следующий пример кода показывает, как привязать управление контентом к пользовательским частям XML:

// 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-картирование тегов структурированных документов

Вы можете получить отображение этого структурированного диапазона тегов документа на данные XML в пользовательской XML-части текущего документа, используя Структурированный документTagRangeStart.XmlMapping. Однако, SetMapping Способ может быть использован для отображения диапазона структурированных тегов документа на данные XML.

Следующий пример кода показывает, как настроить отображение 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");

Четкое содержание контроля контента

Вы можете очистить содержимое управления контентом с отображением заполнителя. The StructuredDocumentTag.Clear метод очищает содержимое этого структурированного тега документа и отображает заполнитель, если он определен. Однако, Невозможно очистить содержимое контроля содержимого, если оно имеет изменения. Если контент-контроль не имеет заполнителя, вставляются пять пробелов. Microsoft Word (кроме повторяющихся разделов, повторяющихся элементов раздела, групп, чек-боксов, цитат). Если управление контентом отображается на пользовательский XML, ссылающийся узел 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");
StructuredDocumentTag sdt = (StructuredDocumentTag)doc.GetChild(NodeType.StructuredDocumentTag, 0, true);
sdt.Clear();
dataDir = dataDir + "ClearContentsControl_out.doc";
// Save the document to disk.
doc.Save(dataDir);

Изменение фона управления контентом и цвета границ

The StructuredDocumentTag.Color Собственность позволяет получить или установить цвет управления контентом. Цвет влияет на контроль контента в двух ситуациях:

  1. MS Word выделяет фон управления контентом, когда мышь перемещается по управлению контентом. Это помогает определить контроль контента. Цвет выделения немного “мягче”, чем у Color. Например, MS Word выделяет фон розовым цветом, когда Color Красный.
  2. Когда вы взаимодействуете (редактирование, выбор и т.д.) с контролем контента, граница контроля контента окрашена в цвет. Color.

Следующий пример кода показывает, как изменить цвет управления контентом:

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

Как настроить стиль для форматирования текста, введённого в контент-контроль

Если вы хотите установить стиль управления контентом, вы можете использовать StructuredDocumentTag.Style или StructuredDocumentTag.StyleName свойств. Когда вы вводите текст в управление контентом в выходном документе, типизированный текст будет иметь стиль “цитата”.

Следующий пример кода показывает, как установить стиль управления контентом:

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

Работа с повторным контролем контента раздела

Контроль содержимого повторяющегося раздела позволяет повторять содержимое, содержащееся в нем. использовать Aspose.Words, узлы структурированных тегов документа повторяющегося раздела и повторяющихся типов элементов раздела могут быть созданы и для этой цели; Тип перечисления SdtType обеспечивает RepeatingSectionItem собственность.

Следующий пример кода показывает, как привязать повторяющийся раздел управления контентом к таблице.

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