İçerik Kontrolü SDT ile Çalışma

Microsoft Word’te bir şablonla başlayıp onay kutuları, metin kutuları, tarih seçiciler ve açılır listeler dahil içerik kontrolleri ekleyerek bir form oluşturabilirsiniz. Aspose.Words’de, Aspose.Words’ye yüklenen herhangi bir belgedeki Yapılandırılmış Belge Etiketi veya içerik kontrolü, StructuredDocumentTag düğümü olarak içe aktarılır. Yapılandırılmış belge etiketleri (SDT veya içerik kontrolü), müşteri tanımlı anlambilimin yanı sıra davranışının ve görünümünün bir belgeye yerleştirilmesine olanak tanır.

StructuredDocumentTag bir belgede aşağıdaki yerlerde bulunabilir:

  • Blok düzeyinde – Paragraflar ve tablolar arasında, bir Gövde, ÜstbilgiFooter, Yorum, Dipnot veya Şekil düğümünün alt öğesi olarak
  • Satır düzeyi – Bir Tablo düğümünün alt öğesi olarak, bir tablodaki satırlar arasında
  • Hücre düzeyi – Bir Satır düğümünün alt öğesi olarak, bir tablo satırındaki hücreler arasında
  • Satır içi düzey – Bir Paragrafın alt öğesi olarak içerideki satır içi içerik arasında
  • Başka bir StructuredDocumentTag’in içine yerleştirilmiştir

İçerik Kontrollerini Belgeye Ekleme

Aspose.Words’in bu sürümünde aşağıdaki SDT türleri veya içerik kontrolü oluşturulabilir:

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

Aşağıdaki kod örneği, tür onay kutusunun içerik denetiminin nasıl oluşturulacağını gösterir:

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

Aşağıdaki kod örneği, tür zengin metin kutusunun içerik denetiminin nasıl oluşturulacağını gösterir:

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

Aşağıdaki kod örneği, tür birleşik giriş kutusunun içerik denetiminin nasıl oluşturulacağını gösterir:

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

İçerik Kontrolleri Nasıl Güncellenir?

Bu bölümde SDT veya içerik denetimi değerlerinin programlı olarak nasıl güncelleneceği açıklanmaktadır.

Aşağıdaki kod örneği, onay kutusunun geçerli durumunun nasıl ayarlanacağını gösterir:

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

Aşağıdaki kod örneği, düz metin kutusu, açılır liste ve resim türündeki içerik denetimlerinin nasıl değiştirileceğini gösterir:

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

İçerik Denetimini Özel XML Parçalarına Bağlama

İçerik kontrollerini Word belgelerindeki XML verileriyle (özel XML bölümü) bağlayabilirsiniz.

Aşağıdaki kod örneği, içerik denetiminin özel XML bölümlerine nasıl bağlanacağını gösterir:

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

Yapılandırılmış Belge Etiket Aralığının XML Eşlemesi

Bu yapılandırılmış belge etiketi aralığının, StructuredDocumentTagRangeStart.XmlMapping özelliği‘i kullanarak geçerli belgenin özel bir XML bölümündeki XML verileriyle eşlenmesini sağlayabilirsiniz. Ancak, yapılandırılmış bir belge etiketi aralığını XML verileriyle eşlemek için SetMapping yöntemi kullanılabilir.

Aşağıdaki kod örneği, XML eşlemesinin nasıl ayarlanacağını gösterir:

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

İçerik Denetiminin İçeriğini Temizleme

Bir yer tutucu görüntüleyerek içerik denetiminin içeriğini temizleyebilirsiniz. StructuredDocumentTag.Clear yöntemi, bu yapılandırılmış belge etiketinin içeriğini temizler ve tanımlanmışsa bir yer tutucu görüntüler. Ancak bir içerik denetiminin içeriğinde düzeltmeler varsa, bunların temizlenmesi mümkün değildir. İçerik kontrolünün yer tutucusu yoksa Microsoft Word’deki gibi beş boşluk eklenir (yinelenen bölümler, yinelenen bölüm öğeleri, gruplar, onay kutuları, alıntılar hariç). Bir içerik denetimi özel XML ile eşlenirse başvurulan XML düğümü temizlenir.

Aşağıdaki kod örneği, içerik denetimi içeriğinin nasıl temizleneceğini gösterir:

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

İçerik Kontrolü Arka Planını ve Kenarlık Renklerini Değiştirme

StructuredDocumentTag.Color özelliği, içerik kontrolünün rengini almanıza veya ayarlamanıza olanak tanır. Renk, içerik kontrolünü iki durumda etkiler:

  1. MS Word, fare içerik kontrolünün üzerine geldiğinde içerik kontrolünün arka planını vurgular. Bu, içerik kontrolünün tanımlanmasına yardımcı olur. Vurgulamanın rengi Color‘ten biraz “daha yumuşaktır”. Örneğin, MS Word, Color Kırmızı olduğunda arka planı pembe renkle vurgular.
  2. İçerik kontrolüyle etkileşimde bulunduğunuzda (düzenleme, seçme vb.), içerik kontrolünün çerçevesi Color ile renklendirilir.

Aşağıdaki kod örneği, içerik denetiminin renginin nasıl değiştirileceğini gösterir:

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

İçerik Denetimine Yazılan Metni Biçimlendirmek için Stil Nasıl Ayarlanır

İçerik kontrolünün stilini ayarlamak istiyorsanız StructuredDocumentTag.Style veya StructuredDocumentTag.StyleName özelliklerini kullanabilirsiniz. Çıktı belgesindeki içerik kontrolüne metni yazdığınızda, yazılan metin “Alıntı” stiline sahip olacaktır.

Aşağıdaki kod örneği, içerik denetimi stilinin nasıl ayarlanacağını gösterir:

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

Tekrarlanan Bölüm İçeriği Denetimiyle Çalışma

Tekrarlanan bölüm içerik kontrolü, içinde yer alan içeriğin tekrarlanmasına olanak tanır. Aspose.Words kullanılarak yinelenen bölüm ve yinelenen bölüm öğe türlerinin yapılandırılmış belge etiketi düğümleri oluşturulabilir ve SdtType numaralandırma türü bu amaçla RepeatingSectionItem özelliği sağlar.

Aşağıdaki kod örneği, yinelenen bölüm içerik denetiminin bir tabloya nasıl bağlanacağını gösterir.

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