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:
- 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.
- 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") |