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

Bir şablondan içerik denetimlerini ve onay kutularını, metin kutularını, tarih seçicilerini ve açılır listeleri ekleyerek bir formu oluşturmak için Microsoft Word ‘de başlayabilirsiniz. Aspose.Words’da bir yapılandırılmış belge etiketi veya herhangi bir belge yüklenen Aspose.Words içeriği kontrol bir StructuredDocumentTag düğümü olarak içe aktarılır. Yapılandırılmış belge etiketleri (SDT veya içerik kontrolü) müşteri tanımlı semantiği, davranışını ve görünümünü bir belgeye gömerek bunu mümkün kılar.

Yapılandırılmış belge etiketi bir belgede aşağıdaki yerlerde ortaya çıkabilir:

  • Blok seviyesi - Paragraflar ve tablolar arasında, bir Body, HeaderFooter, Comment, Footnote veya bir Shape düğümünün çocuğu olarak.
  • Satır Seviyesi - Bir tablodaki satırlar arasında, Tablo düğümüne bir alt öğe olarak.
  • Hücre düzeyinde - Bir tablo satırındaki hücreler arasında, bir satır düğümüne alt öğe olarak.
  • İnline seviyesi - İç içe geçmiş içerik içinde, bir Paragrafın alt öğesi olarak.
  • İçerisinde başka bir StructuredDocumentTag’de gömülü.

Bir Belgeye İçerik Kontrolü Yerleştirilmesi

Bu Aspose.Words sürümünde, aşağıdaki türlerde SDT veya içerik kontrolü oluşturulabilir:

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

Aşağıdaki kod örneği, türünü onay kutusuna ayarlayarak içerik kontrol oluşturmayı nasıl yapıldığını göstermektedir:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java
// The path to the documents directory.
String dataDir = Utils.getDataDir(CheckBoxTypeContentControl.class);
// Open the document.
Document doc = new Document();
DocumentBuilder builder = new DocumentBuilder(doc);
StructuredDocumentTag stdCheckBox = new StructuredDocumentTag(doc, SdtType.CHECKBOX, MarkupLevel.INLINE);
builder.insertNode(stdCheckBox);
doc.save(dataDir + "output.doc");

Aşağıdaki kod örneği nasıl bir zengin metin kutusunun içerik kontrolünü oluşturacağını göstermektedir:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java
// The path to the documents directory.
String dataDir = Utils.getDataDir(RichTextBoxContentControl.class);
// Open the document.
Document doc = new Document();
DocumentBuilder builder = new DocumentBuilder(doc);
StructuredDocumentTag sdtRichText = new StructuredDocumentTag(doc, SdtType.RICH_TEXT, MarkupLevel.BLOCK);
Paragraph para = new Paragraph(doc);
Run run = new Run(doc);
run.setText("Hello World");
run.getFont().setColor(Color.MAGENTA);
para.getRuns().add(run);
sdtRichText.getChildNodes().add(para);
doc.getFirstSection().getBody().appendChild(sdtRichText);
doc.save(dataDir + "output.doc");

Aşağıdaki kod örneğinde, combo kutusunu nasıl içerik kontrolü oluşturulacağını göstermektedir

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java
// The path to the documents directory.
String dataDir = Utils.getDataDir(ComboBoxContentControl.class);
// Open the document.
Document doc = new Document();
DocumentBuilder builder = new DocumentBuilder(doc);
StructuredDocumentTag sdt = new StructuredDocumentTag(doc, SdtType.COMBO_BOX, MarkupLevel.BLOCK);
sdt.getListItems().add(new SdtListItem("Choose an item", "3"));
sdt.getListItems().add(new SdtListItem("Item 1", "1"));
sdt.getListItems().add(new SdtListItem("Item 2", "2"));
doc.getFirstSection().getBody().appendChild(sdt);
doc.save(dataDir + "output.doc");

İçerik Kontrollerini Güncelleme Nasıl Yapılır?

Bu bölüm, SDT değerlerini veya içerik kontrolünü programlı olarak nasıl güncelleyeceğinizi açıklar.

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

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java
// The path to the documents directory.
String dataDir = Utils.getDataDir(SetCurrentStateOfCheckBox.class);
// Open the document.
Document doc = new Document(dataDir + "CheckBoxTypeContentControl.docx");
DocumentBuilder builder = new DocumentBuilder(doc);
StructuredDocumentTag SdtCheckBox = (StructuredDocumentTag) doc.getChild(NodeType.STRUCTURED_DOCUMENT_TAG, 0, true);
//StructuredDocumentTag.Checked property gets/sets current state of the Checkbox SDT
if (SdtCheckBox.getSdtType() == SdtType.CHECKBOX)
SdtCheckBox.setChecked(true);
doc.save(dataDir + "output.doc");

Aşağıdaki kod örneği düz metin kutusunda, açılır menüde ve resim kutusunda içerik kontrollerini nasıl değiştireceğinizi göstermektedir:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java
// The path to the documents directory.
String dataDir = Utils.getDataDir(ModifyContentControls.class);
// Open the document.
Document doc = new Document(dataDir + "CheckBoxTypeContentControl.docx");
for (Object t : doc.getChildNodes(NodeType.STRUCTURED_DOCUMENT_TAG, true)) {
StructuredDocumentTag std = (StructuredDocumentTag) t;
if (std.getSdtType() == SdtType.PLAIN_TEXT) {
std.removeAllChildren();
Paragraph para = (Paragraph) std.appendChild(new Paragraph(doc));
Run run = new Run(doc, "new text goes here");
para.appendChild(run);
}
if (std.getSdtType() == SdtType.DROP_DOWN_LIST) {
SdtListItem secondItem = std.getListItems().get(2);
std.getListItems().setSelectedValue(secondItem);
}
if (std.getSdtType() == SdtType.PICTURE) {
Shape shape = (Shape) std.getChild(NodeType.SHAPE, 0, true);
if (shape.hasImage()) {
shape.getImageData().setImage(dataDir + "Watermark.png");
}
}
doc.save(dataDir + "output.doc");

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

Word belgeleri içinde XML verileri ile birlikte içerik denetimleri bağlayabilirsiniz

Aşağıdaki kod örneği içeriği nasıl bağlayacağınızı özel XML parçalarına gösterir:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java
// The path to the documents directory.
String dataDir = Utils.getDataDir(BindingContentControlwithXML.class);
Document doc = new Document();
CustomXmlPart xmlPart = doc.getCustomXmlParts().add(UUID.fromString("38400000-8cf0-11bd-b23e-10b96e4ef00d").toString(), "<root><text>Hello, World!</text></root>");
StructuredDocumentTag sdt = new StructuredDocumentTag(doc, SdtType.PLAIN_TEXT, MarkupLevel.BLOCK);
doc.getFirstSection().getBody().appendChild(sdt);
sdt.getXmlMapping().setMapping(xmlPart, "/root[1]/text[1]", "");
dataDir = dataDir + "BindSDTtoCustomXmlPart_out.doc";
// Save the document to disk.
doc.save(dataDir);

İçerik Kontrolü İçindeki İçeriği Temizle

İçerik kontrolünün içeriğini bir yer tutucu görüntüleyerek temizleyebilirsiniz. StructuredDocumentTag.clear() yöntemi bu yapılandırılmış belge etiketi içindeki içeriği temizler ve bir yer tutucu görüntüler, ancak içerik kontrolü revizyonları varsa içerik kontrolünün içeriğini temizlemek mümkün değildir. İçerik kontrolü bir yer tutucuya sahip değilse, MS Word’de olduğu gibi (tekrarlayan bölümler, tekrarlayan bölüm öğeleri, gruplar, onay kutuları ve alıntılar hariç) beş boşluk eklenir. İçerik kontrolü özel XML’e eşlendiğinde referans verilen XML düğümü temizlenir.

Aşağıdaki örnek kod, içerik kontrolünün içeriğini nasıl temizleyeceğinizi gösterir:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java
// The path to the documents directory.
String dataDir = Utils.getDataDir(ClearContentsControl.class);
Document doc = new Document(dataDir + "input.docx");
StructuredDocumentTag sdt = (StructuredDocumentTag) doc.getChild(NodeType.STRUCTURED_DOCUMENT_TAG, 0, true);
sdt.clear();
dataDir = dataDir + "ClearContentsControl_out.doc";
// Save the document to disk.
doc.save(dataDir);

İçerik Kontrol Değişiklikleri Arka Plan ve Sınır Renkleri

StructuredDocumentTag.Color özelliği, içerik kontrolünün rengini almak veya ayarlamanızı sağlar. Renk iki durumda içerik kontrolünü etkiler:

  1. MS Word, fare ile içerik kontrolüne geçtiğinde arka planı vurgular. Bu, içeriği tanımlamak için yardımcı olur. Vurgulamanın rengi, Color‘dan biraz daha yumuşaktır. Örneğin, MS Word, Color kırmızı olduğunda pembe renkte bir arka plan vurgulamaktadır.
  2. İçerik kontrol ile etkileşime girdiğinizde (düzenleme, seçme vb.) içerik kontrolün kenarı Color ile renklendirilir.

Aşağıdaki kod örneği, içeriği nasıl değiştireceğinizi gösterir kontrol rengi:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java
// The path to the documents directory.
Document doc = new Document(dataDir + "input.docx");
StructuredDocumentTag sdt = (StructuredDocumentTag) doc.getChild(NodeType.STRUCTURED_DOCUMENT_TAG, 0, true);
sdt.setColor(Color.RED);
dataDir = dataDir + "SetContentControlColor_out.docx";
// Save the document to disk.
doc.save(dataDir);

İçerik Kontrolüne Girilen Yazıya Biçim Verme Nasıl Ayarlanır?

İçerik denetiminin stilini ayarlamak istiyorsanız, StructuredDocumentTag.Style veya StructuredDocumentTag.StyleName özelliklerini kullanabilirsiniz. Çıktı belgesindeki içerik denetimine metni girdiğinizde girilen metin “Alıntı” stiliyle görünecektir.

Aşağıdaki kod örneği, içerik kontrolünün stilini nasıl ayarlayacağını göstermektedir:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java
Document doc = new Document(dataDir + "input.docx");
StructuredDocumentTag sdt = (StructuredDocumentTag) doc.getChild(NodeType.STRUCTURED_DOCUMENT_TAG, 0, true);
Style style = doc.getStyles().getByStyleIdentifier(StyleIdentifier.QUOTE);
sdt.setStyle(style);
dataDir = dataDir + "SetContentControlStyle_out.docx";
doc.save(dataDir);

Tekrarlayan Bölüm İçerik Kontrolü ile Çalışmak

Tekrarlayan bölüm içerik kontrolü tekrarlanan içerikleri içerir. Yapılandırılmış belge etiketi düğümleri tekrarlayan bölüm ve tekrarlayan bölüm öğesi türleri oluşturmak için Aspose.Words kullanılır ve bu amaçla, SdtType enumeration type REPEATING_SECTION_ITEM üyesi sağlar.

Aşağıdaki kod örneği bir tekrarlayan bölüm içerik kontrolünü bir tabloya nasıl bağlayacağınızı göstermektedir:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java
Document doc = new Document();
DocumentBuilder builder = new DocumentBuilder(doc);
CustomXmlPart xmlPart = doc.getCustomXmlParts().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.REPEATING_SECTION, MarkupLevel.ROW);
repeatingSectionSdt.getXmlMapping().setMapping(xmlPart, "/books[1]/book", "");
table.appendChild(repeatingSectionSdt);
StructuredDocumentTag repeatingSectionItemSdt =
new StructuredDocumentTag(doc, SdtType.REPEATING_SECTION_ITEM, MarkupLevel.ROW);
repeatingSectionSdt.appendChild(repeatingSectionItemSdt);
Row row = new Row(doc);
repeatingSectionItemSdt.appendChild(row);
StructuredDocumentTag titleSdt =
new StructuredDocumentTag(doc, SdtType.PLAIN_TEXT, MarkupLevel.CELL);
titleSdt.getXmlMapping().setMapping(xmlPart, "/books[1]/book[1]/title[1]", "");
row.appendChild(titleSdt);
StructuredDocumentTag authorSdt =
new StructuredDocumentTag(doc, SdtType.PLAIN_TEXT, MarkupLevel.CELL);
authorSdt.getXmlMapping().setMapping(xmlPart, "/books[1]/book[1]/author[1]", "");
row.appendChild(authorSdt);
doc.save(dataDir + "Document.docx");