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-tempat berikut:

  • Tingkat blok - Di antara paragraf dan tabel, sebagai anak dari simpul Body, HeaderFooter, Comment, Footnote, atau Shape
  • Tingkat baris - Di antara baris dalam tabel, sebagai anak dari node Table
  • Tingkat sel - Di antara sel dalam baris tabel, sebagai anak dari node Row
  • Tingkat sebaris - Di antara konten sebaris di dalam, sebagai anak Paragraph
  • Bersarang di dalam StructuredDocumentTag lain

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-Python-via-.NET
doc = aw.Document()
builder = aw.DocumentBuilder(doc)
sdtCheckBox = aw.markup.StructuredDocumentTag(doc, aw.markup.SdtType.CHECKBOX, aw.markup.MarkupLevel.INLINE)
builder.insert_node(sdtCheckBox)
doc.save(docs_base.artifacts_dir + "WorkingWithSdt.check_box_type_content_control.docx", aw.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-Python-via-.NET
doc = aw.Document()
sdtRichText = aw.markup.StructuredDocumentTag(doc, aw.markup.SdtType.RICH_TEXT, aw.markup.MarkupLevel.BLOCK)
para = aw.Paragraph(doc)
run = aw.Run(doc)
run.text = "Hello World"
run.font.color = drawing.Color.green
para.runs.add(run)
sdtRichText.child_nodes.add(para)
doc.first_section.body.append_child(sdtRichText)
doc.save(docs_base.artifacts_dir + "WorkingWithSdt.rich_text_box_content_control.docx")

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-Python-via-.NET
doc = aw.Document()
sdt = aw.markup.StructuredDocumentTag(doc, aw.markup.SdtType.COMBO_BOX, aw.markup.MarkupLevel.BLOCK)
sdt.list_items.add(aw.markup.SdtListItem("Choose an item", "-1"))
sdt.list_items.add(aw.markup.SdtListItem("Item 1", "1"))
sdt.list_items.add(aw.markup.SdtListItem("Item 2", "2"))
doc.first_section.body.append_child(sdt)
doc.save(docs_base.artifacts_dir + "WorkingWithSdt.combo_box_content_control.docx")

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-Python-via-.NET
doc = aw.Document(docs_base.my_dir + "Structured document tags.docx")
# Get the first content control from the document.
sdtCheckBox = doc.get_child(aw.NodeType.STRUCTURED_DOCUMENT_TAG, 0, True).as_structured_document_tag()
if (sdtCheckBox.sdt_type == aw.markup.SdtType.CHECKBOX) :
sdtCheckBox.checked = True
doc.save(docs_base.artifacts_dir + "WorkingWithSdt.current_state_of_check_box.docx")

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-Python-via-.NET
doc = aw.Document(docs_base.my_dir + "Structured document tags.docx")
for sdt in doc.get_child_nodes(aw.NodeType.STRUCTURED_DOCUMENT_TAG, True) :
sdt = sdt.as_structured_document_tag()
if (sdt.sdt_type == aw.markup.SdtType.PLAIN_TEXT) :
sdt.remove_all_children()
para = sdt.append_child(aw.Paragraph(doc)).as_paragraph()
run = aw.Run(doc, "new text goes here")
para.append_child(run)
elif (sdt.sdt_type == aw.markup.SdtType.DROP_DOWN_LIST) :
secondItem = sdt.list_items[2]
sdt.list_items.selected_value = secondItem
elif (sdt.sdt_type == aw.markup.SdtType.PICTURE) :
shape = sdt.get_child(NodeType.shape, 0, True).as_shape()
if (shape.has_image) :
shape.image_data.set_image(docs_base.images_dir + "Watermark.png")
doc.save(docs_base.artifacts_dir + "WorkingWithSdt.modify_content_controls.docx")

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-Python-via-.NET
doc = aw.Document()
xmlPart = doc.custom_xml_parts.add(str(uuid.uuid4()), "<root><text>Hello, World!</text></root>")
sdt = aw.markup.StructuredDocumentTag(doc, aw.markup.SdtType.PLAIN_TEXT, aw.markup.MarkupLevel.BLOCK)
doc.first_section.body.append_child(sdt)
sdt.xml_mapping.set_mapping(xmlPart, "/root[1]/text[1]", "")
doc.save(docs_base.artifacts_dir + "WorkingWithSdt.bind_sd_tto_custom_xml_part.doc")

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.xml_mapping. Namun, metode set_mapping 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-Python-via-.NET
doc = aw.Document(docs_base.my_dir + "Multi-section structured document tags.docx")
# Construct an XML part that contains data and add it to the document's CustomXmlPart collection.
xmlPartId = str(uuid.uuid4())
xmlPartContent = "<root><text>Text element #1</text><text>Text element #2</text></root>"
xmlPart = doc.custom_xml_parts.add(xmlPartId, xmlPartContent)
print(xmlPart.data.decode("utf-8"))
# Create a StructuredDocumentTag that will display the contents of our CustomXmlPart in the document.
sdtRangeStart = doc.get_child(aw.NodeType.STRUCTURED_DOCUMENT_TAG_RANGE_START, 0, True).as_structured_document_tag_range_start()
# If we set a mapping for our StructuredDocumentTag,
# it will only display a part of the CustomXmlPart that the XPath points to.
# This XPath will point to the contents second "<text>" element of the first "<root>" element of our CustomXmlPart.
sdtRangeStart.xml_mapping.set_mapping(xmlPart, "/root[1]/text[2]", None)
doc.save(docs_base.artifacts_dir + "WorkingWithSdt.structured_document_tag_range_start_xml_mapping.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 placeholder, lima spasi disisipkan seperti di MS 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-Python-via-.NET
doc = aw.Document(docs_base.my_dir + "Structured document tags.docx")
sdt = doc.get_child(aw.NodeType.STRUCTURED_DOCUMENT_TAG, 0, True).as_structured_document_tag()
sdt.clear()
doc.save(docs_base.artifacts_dir + "WorkingWithSdt.clear_contents_control.doc")

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:

  1. 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 pink, sedangkan color berwarna merah.
  2. 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-Python-via-.NET
doc = aw.Document(docs_base.my_dir + "Structured document tags.docx")
sdt = doc.get_child(aw.NodeType.STRUCTURED_DOCUMENT_TAG, 0, True).as_structured_document_tag()
sdt.color = drawing.Color.red
doc.save(docs_base.artifacts_dir + "WorkingWithSdt.set_content_control_color.docx")

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.style_name. 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-Python-via-.NET
doc = aw.Document(docs_base.my_dir + "Structured document tags.docx")
sdt = doc.get_child(aw.NodeType.STRUCTURED_DOCUMENT_TAG, 0, True).as_structured_document_tag()
style = doc.styles.get_by_style_identifier(aw.StyleIdentifier.QUOTE)
sdt.style = style
doc.save(docs_base.artifacts_dir + "WorkingWithSdt.set_content_control_style.docx")

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 tipe item bagian berulang dapat dibuat dan untuk tujuan ini, tipe enumerasi SdtType menyediakan properti REPEATING_SECTION_ITEM.

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-Python-via-.NET
doc = aw.Document()
builder = aw.DocumentBuilder(doc)
xmlPart = doc.custom_xml_parts.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 = builder.start_table()
builder.insert_cell()
builder.write("Title")
builder.insert_cell()
builder.write("Author")
builder.end_row()
builder.end_table()
repeatingSectionSdt =aw.markup.StructuredDocumentTag(doc, aw.markup.SdtType.REPEATING_SECTION, aw.markup.MarkupLevel.ROW)
repeatingSectionSdt.xml_mapping.set_mapping(xmlPart, "/books[1]/book", "")
table.append_child(repeatingSectionSdt)
repeatingSectionItemSdt = aw.markup.StructuredDocumentTag(doc, aw.markup.SdtType.REPEATING_SECTION_ITEM, aw.markup.MarkupLevel.ROW)
repeatingSectionSdt.append_child(repeatingSectionItemSdt)
row = aw.tables.Row(doc)
repeatingSectionItemSdt.append_child(row)
titleSdt = aw.markup.StructuredDocumentTag(doc, aw.markup.SdtType.PLAIN_TEXT, aw.markup.MarkupLevel.CELL)
titleSdt.xml_mapping.set_mapping(xmlPart, "/books[1]/book[1]/title[1]", "")
row.append_child(titleSdt)
authorSdt = aw.markup.StructuredDocumentTag(doc, aw.markup.SdtType.PLAIN_TEXT, aw.markup.MarkupLevel.CELL)
authorSdt.xml_mapping.set_mapping(xmlPart, "/books[1]/book[1]/author[1]", "")
row.append_child(authorSdt)
doc.save(docs_base.artifacts_dir + "WorkingWithSdt.creating_table_repeating_section_mapped_to_custom_xml_part.docx")