Práce s ovládáním obsahu SDT
In Microsoft Word, si můžete vytvořit formulář tím, že začnete s šablonou a přidáváním ovládacích prvků obsahu, včetně zaškrtávacích boxů, textových boxů, sběračů dat a seznamů drop-downů. In Aspose.Words, Strukturovaná značka dokumentu nebo kontrola obsahu z jakéhokoli dokumentu naloženého do Aspose.Words je dovážen jako uzel StructuredDocumentTag. Strukturované značky dokumentů (SDT nebo kontrola obsahu) umožňují vložit do dokumentu jak sémantika, tak i chování a vzhled zákazníka.
Strukturovaný dokument Značka se může objevit v dokumentu na následujících místech:
- Block-level - Mezi odstavci a tabulky, jako dítě těla, HeaderFooter, Komentář, Poznámka pod čarou nebo Tvar uzel.
- Row-level - Mezi řádky v tabulce, jako dítě uzel stolu.
- Mezi buňkami v řadě, jako dítě uzelu v řadě.
- Mezi inline obsah uvnitř, jako dítě odstavce.
- Nested inside another StructuredDocumentTag.
Vkládání kontrol obsahu do dokumentu
V této verzi Aspose.Words, lze vytvořit tyto typy SDT nebo řízení obsahu:
- Checkbox
- DropDownList
- ComboBox
- Date
- BuildingBlockGallery
- Group
Picture
- RichText
- PlainText
Následující příklad kódu ukazuje, jak vytvořit kontrolu obsahu zaškrtávacího políčka:
// 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"); |
Následující příklad kódu ukazuje, jak vytvořit kontrolu obsahu textového pole bohatého na typ:
// 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"); |
Následující příklad kódu ukazuje, jak vytvořit kontrolu obsahu typu kombo box:
// 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 aktualizovat kontrolu obsahu
Tato sekce vysvětluje, jak aktualizovat hodnoty SDT nebo řízení obsahu programově.
Následující příklad kódu ukazuje, jak nastavit aktuální stav zaškrtávacího políčka:
// 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"); |
Následující příklad kódu ukazuje, jak změnit ovládání obsahu textového pole typu, seznamu drop-down a obrázku:
// 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"); |
Řízení obsahu vazby na vlastní XML části
Ovládání obsahu můžete navázat pomocí XML dat (custom XML part) v dokumentech Word
Následující příklad kódu ukazuje, jak navázat kontrolu obsahu na vlastní XML části:
// 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); |
Jasný obsah kontroly obsahu
Obsah kontroly obsahu můžete vymazat zobrazením majitele. Strukturovaný dokumentTag.clear() metoda vymaže obsah této strukturované značky dokumentu a pokud je definován, zobrazí umísťovatele. Nicméně, Není možné odstranit obsah kontroly obsahu, pokud má revize. Pokud kontrola obsahu nemá žádný držák, vloží se pět mezer jako v MS Word (s výjimkou opakování sekcí, opakování položek sekcí, skupin, check-boxů, citací). Pokud je kontrola obsahu mapována na vlastní XML, referenční XML uzel je vymazán.
Následující příklad kódu ukazuje, jak odstranit obsah kontroly obsahu:
// 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); |
Změnit pozadí kontroly obsahu a barvy okraje
The StructuredDocumentTag.Color
vlastnost umožňuje získat nebo nastavit barvu ovládání obsahu. Barva ovlivňuje kontrolu obsahu ve dvou situacích:
- MS Word zdůrazňuje pozadí kontroly obsahu, když se myš pohybuje přes kontrolu obsahu. To pomáhá identifikovat kontrolu obsahu. Barva zvýraznění je trochu “měkčí” než Color. Například MS Word zdůrazňuje pozadí s růžovou barvou, když Color Červená.
- Při interakci (editace, výběr atd.) s kontrolou obsahu je hranice kontroly obsahu barevná Color.
Následující příklad kódu ukazuje, jak změnit barvu kontroly obsahu:
// 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 nastavit styl pro formátování textu zadaného do kontroly obsahu
Pokud chcete nastavit styl kontroly obsahu, můžete použít StructuredDocumentTag.Style
nebo StructuredDocumentTag.StyleName
vlastnosti. Když zadáte text do kontroly obsahu ve výstupním dokumentu, bude mít zadaný text styl “Quote.”
Následující příklad kódu ukazuje, jak nastavit styl kontroly obsahu:
// 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); |
Práce s kontrolou obsahu v sekci opakování
Ovládání obsahu opakované sekce umožňuje opakování obsahu obsaženého v něm. Použití Aspose.Words, mohou být vytvořeny strukturované uzly tagů dokumentů opakujících se sekcí a opakujících se typů položek a pro tento účel, Typ výpisu SdtType poskytuje repeating_SECTION_ITEM člen.
Následující příklad kódu ukazuje, jak přivázat kontrolu obsahu opakované části k tabulce:
// 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"); |