Praca z Content Control SDT
W Microsoft Word możesz utworzyć formularz, zaczynając od szablonu i dodając elementy sterujące zawartością, w tym pola wyboru, pola tekstowe, selektory dat i listy rozwijane. W formacie Aspose.Words znacznik dokumentu strukturalnego lub kontrola zawartości z dowolnego dokumentu załadowanego do Aspose.Words jest importowana jako węzeł StructuredDocumentTag. Ustrukturyzowane znaczniki dokumentów (SDT lub kontrola treści) pozwalają na osadzenie w dokumencie semantyki zdefiniowanej przez klienta, a także jego zachowania i wyglądu.
StructuredDocumentTag może występować w dokumencie w następujących miejscach:
- Na poziomie bloku – pomiędzy akapitami i tabelami, jako element podrzędny węzła treści, nagłówka, stopki, komentarza, przypisu lub węzła kształtu
- Na poziomie wiersza – Wśród wierszy tabeli, jako element podrzędny węzła tabeli
- Na poziomie komórki – Wśród komórek w wierszu tabeli, jako element podrzędny węzła Wiersz
- Poziom wbudowany - wśród treści wbudowanej w środku, jako element podrzędny akapitu
- Zagnieżdżone w innym StructuredDocumentTag
Wstawianie elementów sterujących zawartością do dokumentu
W tej wersji Aspose.Words można utworzyć następujące typy SDT lub kontroli treści:
- Checkbox
- DropDownList
- ComboBox
- Date
- BuildingBlockGallery
- Group
Picture
- RichText
- PlainText
Poniższy przykład kodu pokazuje, jak utworzyć pole wyboru kontroli treści 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); |
Poniższy przykład kodu pokazuje, jak utworzyć kontrolę zawartości pola tekstu sformatowanego 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); |
Poniższy przykład kodu pokazuje, jak utworzyć kontrolę zawartości pola kombi 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 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 zaktualizować kontrolę zawartości
W tej sekcji wyjaśniono, jak programowo zaktualizować wartości SDT lub kontroli zawartości.
Poniższy przykład kodu pokazuje, jak ustawić bieżący stan pola wyboru:
// 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); |
Poniższy przykład kodu pokazuje, jak modyfikować kontrolki zawartości typu zwykłego pola tekstowego, listy rozwijanej i obrazu:
// 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); |
Powiązanie kontroli zawartości z niestandardowymi częściami XML
Możesz powiązać kontrolki treści z danymi XML (niestandardową częścią XML) w dokumentach Word.
Poniższy przykład kodu pokazuje, jak powiązać kontrolę zawartości z niestandardowymi częściami 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); |
Mapowanie XML zakresu znaczników dokumentu strukturalnego
Możesz uzyskać mapowanie zakresu znaczników dokumentu strukturalnego na dane XML w niestandardowej części XML bieżącego dokumentu za pomocą Właściwość StructuredDocumentTagRangeStart.XmlMapping. Jednakże metody SetMapping można użyć do odwzorowania zakresu znaczników dokumentu strukturalnego na dane XML.
Poniższy przykład kodu pokazuje, jak ustawić mapowanie 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"); |
Wyczyść zawartość kontroli zawartości
Możesz wyczyścić zawartość kontrolki zawartości, wyświetlając symbol zastępczy. Metoda StructuredDocumentTag.Clear czyści zawartość tego znacznika dokumentu strukturalnego i wyświetla symbol zastępczy, jeśli jest zdefiniowany. Jednakże nie jest możliwe wyczyszczenie zawartości kontrolki zawartości, jeśli zawiera ona wersje. Jeśli kontrolka treści nie ma symbolu zastępczego, wstawianych jest pięć spacji, jak w Microsoft Word (z wyjątkiem sekcji powtarzających się, elementów sekcji powtarzających się, grup, pól wyboru i cytatów). Jeśli formant zawartości jest mapowany na niestandardowy kod XML, węzeł XML, do którego następuje odwołanie, zostaje wyczyszczony.
Poniższy przykład kodu pokazuje, jak wyczyścić zawartość kontroli treści:
// 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); |
Zmień kolory tła i obramowania kontroli zawartości
Właściwość StructuredDocumentTag.Color
pozwala uzyskać lub ustawić kolor kontroli treści. Kolor wpływa na kontrolę treści w dwóch sytuacjach:
- MS Word podświetla tło kontroli treści, gdy mysz porusza się nad kontrolą treści. Pomaga to zidentyfikować kontrolę treści. Kolor podświetlenia jest nieco “miększy” niż Color. Na przykład MS Word podświetla tło kolorem różowym, gdy Color ma kolor czerwony.
- Kiedy wchodzisz w interakcję (edytujesz, wybierasz itp.) z kontrolą treści, granica kontroli treści jest kolorowana przez Color.
Poniższy przykład kodu pokazuje, jak zmienić kolor kontrolki zawartości:
// 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 ustawić styl, aby sformatować tekst wpisywany w kontroli zawartości
Jeśli chcesz ustawić styl kontroli treści, możesz użyć właściwości StructuredDocumentTag.Style
lub StructuredDocumentTag.StyleName
. Kiedy wpiszesz tekst do kontroli zawartości w dokumencie wyjściowym, wpisany tekst będzie miał styl “Cytat”.
Poniższy przykład kodu pokazuje, jak ustawić styl kontroli treści:
// 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); |
Praca z kontrolą zawartości sekcji powtarzalnych
Kontrola zawartości sekcji powtarzalnej pozwala na powtarzanie zawartej w niej treści. Za pomocą Aspose.Words można utworzyć węzły znaczników dokumentu strukturalnego dla sekcji powtarzalnych i typów elementów sekcji powtarzalnych i w tym celu Typ wyliczeniowy SdtType udostępnia właściwość RepeatingSectionItem.
Poniższy przykład kodu pokazuje, jak powiązać kontrolkę zawartości sekcji powtarzanej z tabelą.
// 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"); |