Bekerja dengan SDT Kontrol Konten
Di Microsoft Word, Anda bisa membuat formulir dengan memulai dengan templat dan menambahkan kontrol konten, termasuk kotak centang, kotak teks, pemilih tanggal, dan daftar drop-down. Di Aspose.Words, Tag Dokumen Terstruktur atau kontrol konten dari dokumen apa pun yang dimuat ke Aspose.Words diimpor sebagai node StructuredDocumentTag. Tag dokumen terstruktur (SDT atau kontrol konten) memungkinkan penyematan semantik yang ditentukan pelanggan serta perilaku dan tampilannya ke dalam dokumen.
StructuredDocumentTag dapat muncul dalam dokumen di tempat berikut:
- Tingkat blok – Di antara paragraf dan tabel, sebagai turunan dari Badan, HeaderFooter, Komentar, Catatan Kaki, atau simpul Bentuk
- Tingkat baris – Di antara baris dalam tabel, sebagai anak dari simpul Tabel
- Tingkat sel – Di antara sel-sel dalam baris tabel, sebagai anak dari simpul Baris
- Tingkat sebaris – Di antara konten sebaris di dalam, sebagai turunan dari Paragraf
- Bersarang di dalam StructuredDocumentTag lainnya
Memasukkan Kontrol Konten ke dalam Dokumen
Dalam versi Aspose.Words ini, jenis SDT atau kontrol konten berikut dapat dibuat:
- Checkbox
- DropDownList
- ComboBox
- Date
- BuildingBlockGallery
- Group
Picture
- RichText
- PlainText
Contoh kode berikut menunjukkan cara membuat kontrol konten tipe kotak centang:
// 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); |
Contoh kode berikut menunjukkan cara membuat kontrol konten kotak teks kaya tipe:
// 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); |
Contoh kode berikut menunjukkan cara membuat kontrol konten dari tipe kotak kombo:
// 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); |
Cara Memperbarui Kontrol Konten
Bagian ini menjelaskan cara memperbarui nilai SDT atau kontrol konten secara terprogram.
Contoh kode berikut menunjukkan cara menyetel status kotak centang saat ini:
// 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); |
Contoh kode berikut menunjukkan cara mengubah kontrol konten tipe kotak teks biasa, daftar drop-down, dan gambar:
// 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); |
Mengikat Kontrol Konten ke Bagian XML Kustom
Anda dapat mengikat kontrol konten dengan data XML (bagian XML khusus) di dokumen Word.
Contoh kode berikut menunjukkan cara mengikat kontrol konten ke bagian XML kustom:
// 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); |
Pemetaan XML Rentang Tag Dokumen Terstruktur
Anda bisa mendapatkan pemetaan rentang tag dokumen terstruktur ini ke data XML di bagian XML khusus dari dokumen saat ini menggunakan Properti StructuredDocumentTagRangeStart.XmlMapping. Namun, metode SetMapping dapat digunakan untuk memetakan rentang tag dokumen terstruktur ke data XML.
Contoh kode berikut menunjukkan cara mengatur pemetaan 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"); |
Hapus Isi Kontrol Konten
Anda dapat menghapus konten kontrol konten dengan menampilkan placeholder. Metode StructuredDocumentTag.Clear menghapus konten tag dokumen terstruktur ini dan menampilkan placeholder jika ditentukan. Namun, tidak mungkin menghapus konten kontrol konten jika ada revisi. Jika kontrol konten tidak memiliki tempat penampung, lima spasi disisipkan seperti di Microsoft Word (kecuali bagian berulang, item bagian berulang, grup, kotak centang, kutipan). Jika kontrol konten dipetakan ke XML kustom, simpul XML yang direferensikan akan dihapus.
Contoh kode berikut menunjukkan cara menghapus konten dari kontrol konten:
// 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); |
Ubah Latar Belakang Kontrol Konten dan Warna Batas
Properti StructuredDocumentTag.Color
memungkinkan Anda mendapatkan atau mengatur warna kontrol konten. Warna mempengaruhi kontrol konten dalam dua situasi:
- MS Word menyorot latar belakang kontrol konten ketika mouse bergerak di atas kontrol konten. Ini membantu mengidentifikasi kontrol konten. Warna highlightnya sedikit “lebih lembut” dibandingkan Color. Misalnya MS Word menyorot latar belakang dengan warna merah jambu, sedangkan Color berwarna Merah.
- Saat Anda berinteraksi (mengedit, memilih, dll) dengan kontrol konten, batas kontrol konten diwarnai dengan Color.
Contoh kode berikut menunjukkan cara mengubah warna kontrol konten:
// 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); |
Cara Mengatur Gaya untuk Memformat Teks yang Diketik ke dalam Kontrol Konten
Jika Anda ingin mengatur gaya kontrol konten, Anda dapat menggunakan properti StructuredDocumentTag.Style
atau StructuredDocumentTag.StyleName
. Saat Anda mengetikkan teks ke dalam kontrol konten di dokumen keluaran, teks yang diketik akan memiliki gaya “Kutipan”.
Contoh kode berikut menunjukkan cara mengatur gaya kontrol konten:
// 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); |
Bekerja dengan Kontrol Konten Bagian Berulang
Kontrol konten bagian berulang memungkinkan pengulangan konten yang terkandung di dalamnya. Dengan menggunakan Aspose.Words, node tag dokumen terstruktur dari bagian berulang dan jenis item bagian berulang dapat dibuat dan untuk tujuan ini, Jenis enumerasi SdtType menyediakan properti RepeatingSectionItem.
Contoh kode berikut menunjukkan cara mengikat kontrol konten bagian berulang ke 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"); |