İç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, Body, HeaderFooter, Comment, Footnote veya Shape düğümünün alt öğesi olarak
  • Satır düzeyi - Bir Table düğümünün alt öğesi olarak bir tablodaki satırlar arasında
  • Hücre düzeyi - Bir Row düğümünün alt öğesi olarak bir tablo satırındaki hücreler arasında
  • Satır içi düzey - Bir Paragraph‘in alt öğesi olarak içerideki satır içi içerik arasında
  • Başka bir StructuredDocumentTag‘in içine yerleştirilmiş

İç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-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)

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

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

İçerik Kontrolleri nasıl güncellenir?

Bu bölümde SDT veya içerik kontrolü 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-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")

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

İç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-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")

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

Bu yapılandırılmış belge etiketi aralığının, StructuredDocumentTagRangeStart.xml_mapping özelliğini 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 set_mapping 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-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")

İç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, MS 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-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")

İç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-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")

İç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.style_name ö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-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")

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 bu amaçla SdtType numaralandırma türü REPEATING_SECTION_ITEM ö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-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")