Praca z kontrolą zawartości SDT

W Microsoft Word, Możesz utworzyć formularz, zaczynając od szablonu i dodając kontrolę zawartości, w tym pola wyboru, pola tekstowe, znaczniki daty i listy rozwijane. W Aspose.Words, > Strukturalny znacznik dokumentu lub kontrola zawartości z dowolnego dokumentu załadowanego do Aspose.Words jest importowany jako węzeł StructuredDocumentTag. Strukturalne znaczniki dokumentów (SDT lub control content) umożliwiają osadzanie semantyki zdefiniowanej przez użytkownika, jak również jej zachowania i wygląd w dokumencie.

StructuredDocument Znacznik może wystąpić w dokumencie w następujących miejscach:

  • Poziom blokady - Wśród akapitów i tabel, jako dziecko ciała, HeaderFooter, Komentarz, Footnote lub węzeł kształtowy.
  • Row- poziom - Wśród rzędów w tabeli, jako dziecko z węzła stołowego.
  • Poziom komórkowy - Pośród komórek w rzędzie stołowym, jako dziecko węzła wiersza.
  • Poziom inline- Wśród inline treści wewnątrz, jako dziecko paragrafu.
  • Wewnątrz innego StructuredDocumentTag.

Włączenie kontroli zawartości do dokumentu

W tej wersji Aspose.Words, można utworzyć następujące rodzaje SDT lub kontroli zawartości:

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

Poniższy przykład kodu pokazuje, jak utworzyć kontrolę treści w polu wyboru typu:

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

Poniższy przykład kodu pokazuje, jak utworzyć kontrolę treści typu bogatego pola tekstowego:

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

Poniższy przykład kodu pokazuje, jak utworzyć kontrolę treści w polu combo typu:

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

Jak zaktualizować kontrolę zawartości

W tej sekcji wyjaśniono, w jaki sposób aktualizować wartości SDT lub kontroli zawartości programowo.

Poniższy przykład kodu pokazuje jak ustawić aktualny stan pola wyboru:

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

Poniższy przykład kodu pokazuje, jak modyfikować sterowanie treścią zwykłego pola tekstowego, listy rozwijanej i obrazka:

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

Wiążąca kontrola zawartości do własnych części XML

Możesz powiązać sterowanie treścią z danymi XML (* niestandardowa część XML *) w dokumentach Word

Poniższy przykład kodu pokazuje, jak powiązać kontrolę zawartości z niestandardowymi częściami 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);

Wyczyść zawartość kontroli zawartości

Możesz wyczyścić zawartość sterowania treścią wyświetlając uchwyt. StructuredDocumentTag.clear () Metoda oczyszcza zawartość tego usystematyzowanego znacznika dokumentu i wyświetla właściciela miejsca, jeśli jest on zdefiniowany. Jednakże, Nie jest możliwe wyczyszczenie zawartości kontroli zawartości, jeśli zawiera ona zmiany. Jeżeli sterownik zawartości nie ma uchwytu, to w MS Word umieszcza się pięć spacji (z wyjątkiem powtarzania sekcji, powtarzania elementów sekcji, grup, pól wyboru, cytowania). Jeżeli kontrola zawartości jest przyporządkowana do własnego XML, odnośny węzeł XML jest oczyszczony.

Poniższy przykład kodu pokazuje jak usunąć zawartość kontroli zawartości:

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

Zmiana kontroli treści Tło i kolory granic

W StructuredDocumentTag.Color właściwość pozwala uzyskać lub ustawić kolor kontroli zawartości. Kolor wpływa na kontrolę zawartości w dwóch sytuacjach:

  1. MS Word podkreśla tło kontroli zawartości, gdy mysz porusza się nad kontrolą zawartości. Pomaga to w identyfikacji kontroli zawartości. Kolor podświetlania jest nieco “miększy” niż Color. Na przykład MS Word podkreśla tło różowym kolorem, kiedy Color Red.
  2. Podczas interakcji (edycja, wybieranie itp.) z kontrolą zawartości, granica kontroli treści jest kolorowa z Color.

Poniższy przykład kodu pokazuje jak zmienić kolor kontroli zawartości:

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

Jak ustawić styl do formatowania tekstu wpisanego do kontroli zawartości

Jeśli chcesz ustawić styl kontroli zawartości, możesz użyć StructuredDocumentTag.Style lub StructuredDocumentTag.StyleName nieruchomości. Po wpisaniu tekstu do kontroli treści w dokumencie wyjściowym, wpisany tekst będzie miał styl “Cyt”.

Poniższy przykład kodu pokazuje jak ustawić styl sterowania treścią:

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

Praca z powtarzającą się kontrolą treści sekcji

Regulacja powtarzania zawartości sekcji pozwala na powtarzanie zawartości w niej zawartej. Stosowanie Aspose.Words, można utworzyć ustrukturyzowane węzły znaczników dokumentów powtarzającej się sekcji i powtarzających się typów pozycji sekcji i w tym celu, Typ zapasu SdtType zapewnia członka REPEATING _ SEKCJA _ ITEM.

Poniższy przykład kodu pokazuje, jak powiązać powtarzającą się kontrolę zawartości sekcji z 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");