Lucrul cu controlul conținutului SDT

În Microsoft Word, puteți crea un formular începând cu un șablon și adăugând controale de conținut, inclusiv checkboxes, casete de text, Selectoare de date și liste derulante. În Aspose.Words, o etichetă de Document structurată sau un control de conținut din orice document încărcat în Aspose.Words este importat ca nod StructuredDocumentTag. Etichetele structurate ale documentelor (SDT sau controlul conținutului) permit încorporarea semanticii definite de client, precum și a comportamentului și aspectului acesteia într-un document.

StructuredDocumentTag poate apărea într-un document în următoarele locuri:

  • Nivel de bloc - printre paragrafe și tabele, ca un copil al unui corp, HeaderFooter, Comentariu, notă de subsol sau un nod de formă.
  • Nivel de rând-printre rândurile dintr-un tabel, ca un copil al unui nod de tabel.
  • Nivel de celulă - printre celulele dintr-un rând de tabel, ca un copil al unui nod de rând.
  • Nivel Inline - printre conținutul inline din interior, ca un copil al unui paragraf.
  • Cuibărit în interiorul altui StructuredDocumentTag.

Inserarea controalelor de conținut într-un Document

În această versiune de Aspose.Words, pot fi create următoarele tipuri de SDT sau control de conținut:

  • Checkbox
  • DropDownList
  • ComboBox
  • Data
  • BuildingBlockGallery
  • Grupul
  • Picture
  • RichText
  • PlainText

Următorul exemplu de cod arată cum se creează controlul conținutului de tip checkbox:

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

Următorul exemplu de cod arată cum să creați controlul conținutului de tip casetă text îmbogățit:

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

Următorul exemplu de cod arată cum se creează controlul conținutului casetei combo de tip:

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

Cum să actualizați controalele de conținut

Această secțiune explică modul de actualizare programatică a valorilor SDT sau controlul conținutului.

Următorul exemplu de cod arată cum să setați starea curentă a checkbox:

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

Următorul exemplu de cod arată modul de modificare a controalelor de conținut de tip casetă text simplu, listă derulantă și imagine:

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

Controlul conținutului obligatoriu la piese personalizate XML

Puteți lega controalele de conținut cu XML date (custom XML part) în documentele Word.

Următorul exemplu de cod arată cum să legați controlul conținutului la părțile personalizate XML:

// 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);

Ștergeți conținutul unui Control de conținut

Puteți șterge conținutul unui control de conținut cu afișarea unui substituent. StructuredDocumentTag.clear() metoda șterge conținutul acestei etichete de document structurat și afișează un substituent dacă este definit. Cu toate acestea, nu este posibil să ștergeți conținutul unui control de conținut dacă are revizuiri. Dacă un control de conținut nu are un substituent, se introduc cinci spații ca în MS Word (cu excepția secțiunilor repetate, a elementelor de secțiune repetate, a grupurilor, a casetelor de selectare, a citărilor). Dacă un control de conținut este mapat la personalizat XML, nodul XML la care se face referire este șters.

Următorul exemplu de cod arată cum să ștergeți conținutul controlului conținutului:

// 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);

Schimbați fundalul de Control al conținutului și culorile de margine

Proprietatea StructuredDocumentTag.Color vă permite să obțineți sau să setați culoarea controlului conținutului. Culoarea afectează controlul conținutului în două situații:

  1. MS Word evidențiază fundalul controlului de conținut atunci când mouse-ul se deplasează peste controlul de conținut. Acest lucru ajută la identificarea controlului conținutului. Culoarea evidențierii este puțin “mai moale” decât Color. De exemplu, MS Word evidențiază fundalul cu culoarea roz, când Color este roșu.
  2. Când interacționați (editare, cules etc.) cu controlul conținutului, marginea controlului conținutului este colorată cu Color.

Următorul exemplu de cod arată cum să schimbați culoarea controlului conținutului:

// 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);

Cum să setați stilul la formatarea textului introdus în controlul conținutului

Dacă doriți să setați stilul de control al conținutului, puteți utiliza StructuredDocumentTag.Style sau StructuredDocumentTag.StyleName proprietăți. Când introduceți textul în controlul conținutului în documentul de ieșire, textul tastat va avea stilul “Citat”.

Următorul exemplu de cod arată cum să setați stilul de control al conținutului:

// 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);

Lucrul cu controlul conținutului secțiunii repetate

Controlul conținutului secțiunii repetitive permite repetarea conținutului conținut în acesta. Folosind Aspose.Words, nodurile de etichete de document structurate ale secțiunii repetitive și tipurile de elemente ale secțiunii repetitive pot fi create și în acest scop, SdtType enumeration type oferă REPEATING_SECTION_ITEM membru.

Următorul exemplu de cod arată cum să legați un control de conținut al secțiunii repetate la un tabel:

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