Korzystanie ze strukturalnych znaczników dokumentu (SDT) w Aspose.Words dla języka Java

Wprowadzenie do korzystania ze strukturalnych znaczników dokumentu (SDT) w Aspose.Words dla języka Java

Structured Document Tags (SDT) to potężna funkcja w Aspose.Words for Java, która umożliwia tworzenie i manipulowanie ustrukturyzowaną zawartością w dokumentach. W tym kompleksowym przewodniku przeprowadzimy Cię przez różne aspekty korzystania z SDT w Aspose.Words for Java. Niezależnie od tego, czy jesteś początkującym, czy doświadczonym programistą, w tym artykule znajdziesz cenne spostrzeżenia i praktyczne przykłady.

Pierwsze kroki

Zanim przejdziemy do szczegółów, skonfigurujmy nasze środowisko i utwórzmy podstawowy SDT. W tej sekcji omówimy następujące tematy:

  • Tworzenie nowego dokumentu
  • Dodawanie znacznika dokumentu strukturalnego
  • Zapisywanie dokumentu
Document doc = new Document();
DocumentBuilder builder = new DocumentBuilder(doc);

// Utwórz znacznik dokumentu strukturalnego typu POLE WYBORU
StructuredDocumentTag sdtCheckBox = new StructuredDocumentTag(doc, SdtType.CHECKBOX, MarkupLevel.INLINE);
builder.insertNode(sdtCheckBox);

// Zapisz dokument
doc.save("WorkingWithSDT.docx");

Sprawdzanie bieżącego stanu pola wyboru SDT

Po dodaniu pola wyboru SDT do dokumentu możesz chcieć sprawdzić jego aktualny stan programowo. Może to być przydatne, gdy musisz zweryfikować dane wejściowe użytkownika lub wykonać określone czynności na podstawie stanu pola wyboru.

Document doc = new Document("WorkingWithSDT.docx");
StructuredDocumentTag sdtCheckBox = (StructuredDocumentTag) doc.getChild(NodeType.STRUCTURED_DOCUMENT_TAG, 0, true);

if (sdtCheckBox.getSdtType() == SdtType.CHECKBOX) {
    // Pole wyboru jest zaznaczone
    sdtCheckBox.setChecked(true);
}

doc.save("UpdatedDocument.docx");

Modyfikowanie elementów sterujących zawartością

W tej sekcji przyjrzymy się sposobom modyfikowania kontrolek zawartości w dokumencie. Omówimy trzy typy kontrolek zawartości: Zwykły tekst, Lista rozwijana i Obraz.

Modyfikowanie kontroli zawartości zwykłego tekstu

Document doc = new Document("WorkingWithSDT.docx");
StructuredDocumentTag sdtPlainText = (StructuredDocumentTag) doc.getChild(NodeType.STRUCTURED_DOCUMENT_TAG, 0, true);

if (sdtPlainText.getSdtType() == SdtType.PLAIN_TEXT) {
    // Wyczyść istniejącą zawartość
    sdtPlainText.removeAllChildren();

    // Dodaj nowy tekst
    Paragraph para = (Paragraph) sdtPlainText.appendChild(new Paragraph(doc));
    Run run = new Run(doc, "New text goes here");
    para.appendChild(run);
}

doc.save("ModifiedDocument.docx");

Modyfikowanie kontroli zawartości listy rozwijanej

Document doc = new Document("WorkingWithSDT.docx");
StructuredDocumentTag sdtDropDown = (StructuredDocumentTag) doc.getChild(NodeType.STRUCTURED_DOCUMENT_TAG, 0, true);

if (sdtDropDown.getSdtType() == SdtType.DROP_DOWN_LIST) {
    // Wybierz drugą pozycję z listy
    SdtListItem secondItem = sdtDropDown.getListItems().get(2);
    sdtDropDown.getListItems().setSelectedValue(secondItem);
}

doc.save("ModifiedDocument.docx");

Modyfikowanie kontroli zawartości obrazu

Document doc = new Document("WorkingWithSDT.docx");
StructuredDocumentTag sdtPicture = (StructuredDocumentTag) doc.getChild(NodeType.STRUCTURED_DOCUMENT_TAG, 0, true);
Shape shape = (Shape) sdtPicture.getChild(NodeType.SHAPE, 0, true);

if (shape.hasImage()) {
    // Zastąp obraz nowym
    shape.getImageData().setImage("Watermark.png");
}

doc.save("ModifiedDocument.docx");

Tworzenie kontrolki zawartości ComboBox

Kontrolka ComboBox Content Control pozwala użytkownikom wybierać z predefiniowanej listy opcji. Utwórzmy jedną w naszym dokumencie.

Document doc = new Document();
StructuredDocumentTag sdtComboBox = new StructuredDocumentTag(doc, SdtType.COMBO_BOX, MarkupLevel.BLOCK);
sdtComboBox.getListItems().add(new SdtListItem("Choose an item", "-1"));
sdtComboBox.getListItems().add(new SdtListItem("Item 1", "1"));
sdtComboBox.getListItems().add(new SdtListItem("Item 2", "2"));
doc.getFirstSection().getBody().appendChild(sdtComboBox);

doc.save("ComboBoxDocument.docx");

Praca z kontrolą zawartości w formacie Rich Text

Kontrolki zawartości Rich Text są idealne do dodawania sformatowanego tekstu do dokumentów. Utwórzmy jedną i ustawmy jej zawartość.

Document doc = new Document();
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.GREEN);
para.getRuns().add(run);
sdtRichText.getChildNodes().add(para);
doc.getFirstSection().getBody().appendChild(sdtRichText);

doc.save("RichTextDocument.docx");

Ustawianie stylów kontroli zawartości

Możesz stosować style do kontrolek zawartości, aby poprawić wygląd wizualny dokumentu. Zobaczmy, jak ustawić styl kontrolki zawartości.

Document doc = new Document("WorkingWithSDT.docx");
StructuredDocumentTag sdt = (StructuredDocumentTag) doc.getChild(NodeType.STRUCTURED_DOCUMENT_TAG, 0, true);

// Zastosuj niestandardowy styl
Style style = doc.getStyles().getByStyleIdentifier(StyleIdentifier.QUOTE);
sdt.setStyle(style);

doc.save("StyledDocument.docx");

Wiązanie SDT z niestandardowymi danymi XML

W niektórych scenariuszach może być konieczne powiązanie SDT z niestandardowymi danymi XML w celu dynamicznego generowania treści. Przyjrzyjmy się, jak to osiągnąć.

Document doc = new Document();
CustomXmlPart xmlPart = doc.getCustomXmlParts().add(UUID.randomUUID().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]", "");

doc.save("CustomXMLBinding.docx");

Tworzenie tabeli z powtarzającymi się sekcjami mapowanymi na niestandardowe dane XML

Tabele z powtarzającymi się sekcjami mogą być niezwykle przydatne do prezentowania ustrukturyzowanych danych. Utwórzmy taką tabelę i zmapujmy ją na niestandardowe dane XML.

Document doc = new Document();
DocumentBuilder builder = new DocumentBuilder(doc);
CustomXmlPart xmlPart = doc.getCustomXmlParts().add("Books", "<books>...</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("RepeatingTableDocument.docx");

Praca z wielosekcyjnymi strukturalnymi znacznikami dokumentów

Ustrukturyzowane znaczniki dokumentu mogą obejmować wiele sekcji w dokumencie. W tej sekcji przyjrzymy się, jak pracować z wielosekcyjnymi SDT.

Document doc = new Document("MultiSectionDocument.docx");
NodeCollection tags = doc.getChildNodes(NodeType.STRUCTURED_DOCUMENT_TAG_RANGE_START, true);

for (StructuredDocumentTagRangeStart tag : tags) {
    System.out.println(tag.getTitle());
}

doc.save("ModifiedMultiSectionDocument.docx");

Wniosek

Ustrukturyzowane znaczniki dokumentów w Aspose.Words for Java zapewniają wszechstronny sposób zarządzania i formatowania treści w dokumentach. Niezależnie od tego, czy musisz tworzyć szablony, formularze czy dynamiczne dokumenty, SDT oferują elastyczność i kontrolę, których potrzebujesz. Postępując zgodnie z przykładami i wskazówkami podanymi w tym artykule, możesz wykorzystać moc SDT, aby ulepszyć zadania przetwarzania dokumentów.

Najczęściej zadawane pytania

Jaki jest cel stosowania strukturalnych znaczników dokumentów (SDT)?

Ustrukturyzowane Tagi Dokumentów (SDT) służą do organizowania i formatowania treści w dokumentach, dzięki czemu tworzenie szablonów, formularzy i ustrukturyzowanych dokumentów staje się łatwiejsze.

Jak mogę sprawdzić aktualny stan Checkbox SDT?

Aktualny stan pola wyboru SDT można sprawdzić za pomocąsetChecked metoda, jak pokazano w artykule.

Czy mogę stosować style do kontrolek zawartości?

Tak, możesz stosować style do kontrolek zawartości, aby dostosować ich wygląd w dokumencie.

Czy można powiązać SDT z niestandardowymi danymi XML?

Tak, można powiązać SDT z niestandardowymi danymi XML, co umożliwia dynamiczne generowanie treści i mapowanie danych.

Czym są sekcje powtarzalne w SDT?

Powtarzalne sekcje w SDT umożliwiają tworzenie tabel z dynamicznymi danymi, w których wiersze mogą być powtarzane na podstawie mapowanych danych XML.