Arbeiten mit Stilen und Designs

Die Klasse StyleCollection wird verwendet, um integrierte Einstellungen zu verwalten und benutzerdefinierte Einstellungen auf Stile anzuwenden.

So extrahieren Sie Inhalte basierend auf Stilen

Auf einer einfachen Ebene kann das Abrufen des Inhalts basierend auf Stilen aus einem Word-Dokument nützlich sein, um Absätze und Textläufe zu identifizieren, aufzulisten und zu zählen, die mit einem bestimmten Stil formatiert sind. Beispielsweise müssen Sie möglicherweise bestimmte Arten von Inhalten im Dokument identifizieren, z. B. Beispiele, Titel, Referenzen, Schlüsselwörter, Abbildungsnamen und Fallstudien.

Um dies noch ein paar Schritte weiter zu gehen, kann dies auch verwendet werden, um die Struktur des Dokuments, die durch die verwendeten Stile definiert ist, zu nutzen, um das Dokument für eine andere Ausgabe, z. B. HTML, wiederzuverwenden. Auf diese Weise wird die Aspose-Dokumentation erstellt, wobei Aspose.Words auf die Probe gestellt wird. Ein mit Aspose.Words erstelltes Tool nimmt die Word-Quelldokumente und teilt sie auf bestimmten Überschriftenebenen in Themen auf. Mit Aspose.Words wird eine XML -Datei erstellt, die zum Erstellen des Navigationsbaums verwendet wird, den Sie links sehen. Und dann konvertiert Aspose.Words jedes Thema in HTML. Die Lösung zum Abrufen von Text, der mit bestimmten Stilen in einem Word-Dokument formatiert ist, ist in der Regel mit Aspose.Words wirtschaftlich und unkompliziert.

Um zu veranschaulichen, wie einfach Aspose.Words das Abrufen von Inhalten basierend auf Stilen handhabt, schauen wir uns ein Beispiel an. In diesem Beispiel werden wir Text abrufen, der mit einem bestimmten Absatzformat und einem Zeichenformat aus einem Word-Beispieldokument formatiert ist.

Auf hohem Niveau wird dies beinhalten:

  1. Öffnen eines Word-Dokuments mit der Klasse Document.
  2. Abrufen von Sammlungen aller Absätze und aller Läufe im Dokument.
  3. Auswahl nur der erforderlichen Absätze und Läufe.

Insbesondere rufen wir Text ab, der mit dem Absatzstil ‘Heading 1’ und dem Zeichenstil ‘Intensive Hervorhebung’ formatiert ist, aus diesem Word-Beispieldokument.

working-with-styles-aspose-words-java-1

In diesem Beispieldokument ist der mit dem Absatzstil ‘Heading 1’ formatierte Text ‘Tab einfügen’, ‘Schnellstile’ und ‘Design’, und der mit dem Zeichenstil ‘Intensive Hervorhebung’ formatierte Text sind die verschiedenen Instanzen von blauem, kursivem, fettem Text wie ‘Galerien’ und ‘Gesamtbild’.

Die Implementierung einer stilbasierten Abfrage ist im Aspose.Words -Dokumentobjektmodell recht einfach, da lediglich bereits vorhandene Tools verwendet werden. Für diese Lösung sind zwei Klassenmethoden implementiert:

  1. ParagraphsByStyleName - Diese Methode ruft ein Array der Absätze im Dokument ab, die einen bestimmten Stilnamen haben.
  2. RunsByStyleName - Diese Methode ruft ein Array der Ausführungen im Dokument ab, die einen bestimmten Stilnamen haben.

Beide Methoden sind sehr ähnlich, die einzigen Unterschiede bestehen in den Knotentypen und der Darstellung der Stilinformationen innerhalb der Absatz- und Laufknoten. Hier ist eine Implementierung von ParagraphsByStyleName, die im folgenden Codebeispiel gezeigt wird, um alle Absätze zu finden, die mit dem angegebenen Stil formatiert sind.

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java
public static ArrayList<Paragraph> paragraphsByStyleName(Document doc, String styleName) throws Exception {
// Create an array to collect paragraphs of the specified style.
ArrayList<Paragraph> paragraphsWithStyle = new ArrayList();
// Get all paragraphs from the document.
NodeCollection paragraphs = doc.getChildNodes(NodeType.PARAGRAPH, true);
// Look through all paragraphs to find those with the specified style.
for (Paragraph paragraph : (Iterable<Paragraph>) paragraphs) {
if (paragraph.getParagraphFormat().getStyle().getName().equals(styleName))
paragraphsWithStyle.add(paragraph);
}
return paragraphsWithStyle;
}

Diese Implementierung verwendet auch die Document.getChildNodes() -Methode der Document -Klasse, die eine Auflistung aller unmittelbaren untergeordneten Knoten zurückgibt.

Es ist auch erwähnenswert, dass die Paragraphs-Auflistung keinen unmittelbaren Overhead verursacht, da Absätze nur dann in diese Auflistung geladen werden, wenn Sie auf Elemente in ihnen zugreifen.Dann müssen Sie nur noch die Auflistung mit dem Standardoperator foreach durchgehen und dem Array paragraphsWithStyle Absätze mit dem angegebenen Stil hinzufügen. Der Paragraph -Stilname befindet sich in der Style.getName()-Eigenschaft des Paragraph.getParagraphFormat()-Objekts.

Die Implementierung von RunsByStyleName ist fast dieselbe, obwohl wir offensichtlich NodeType.Run verwenden, um Laufknoten abzurufen. Die Font.getStyle()-Eigenschaft eines Run -Objekts wird verwendet, um auf Stilinformationen in den Run -Knoten zuzugreifen.

Im folgenden Codebeispiel werden alle Ausführungen gefunden, die mit dem angegebenen Stil formatiert sind.

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java
public static ArrayList<Run> runsByStyleName(Document doc, String styleName) throws Exception {
// Create an array to collect runs of the specified style.
ArrayList<Run> runsWithStyle = new ArrayList();
// Get all runs from the document.
NodeCollection runs = doc.getChildNodes(NodeType.RUN, true);
// Look through all runs to find those with the specified style.
for (Run run : (Iterable<Run>) runs) {
if (run.getFont().getStyle().getName().equals(styleName))
runsWithStyle.add(run);
}
return runsWithStyle;
}

Das folgende Codebeispiel führt Abfragen aus und zeigt Ergebnisse an.

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java
// Open the document.
Document doc = new Document(dataDir + "TestFile.doc");
// Define style names as they are specified in the Word document.
final String PARA_STYLE = "Heading 1";
final String RUN_STYLE = "Intense Emphasis";
// Collect paragraphs with defined styles.
// Show the number of collected paragraphs and display the text of this paragraphs.
ArrayList<Paragraph> paragraphs = paragraphsByStyleName(doc, PARA_STYLE);
System.out.println(java.text.MessageFormat.format("Paragraphs with \"{0}\" styles ({1}):", PARA_STYLE, paragraphs.size()));
for (Paragraph paragraph : paragraphs)
System.out.print(paragraph.toString(SaveFormat.TEXT));
// Collect runs with defined styles.
// Show the number of collected runs and display the text of this runs.
ArrayList<Run> runs = runsByStyleName(doc, RUN_STYLE);
System.out.println(java.text.MessageFormat.format("\nRuns with \"{0}\" styles ({1}):", RUN_STYLE, runs.size()));
for (Run run : runs)
System.out.println(run.getRange().getText());

Wenn alles erledigt ist, wird beim Ausführen des Beispiels die folgende Ausgabe angezeigt:

working-with-styles-aspose-words-java-2

Wie Sie sehen, ist dies ein sehr einfaches Beispiel, das die Anzahl und den Text der gesammelten Absätze und Läufe im Word-Beispieldokument zeigt.

Stiltrennzeichen einfügen, um verschiedene Absatzstile einzufügen

Das Stiltrennzeichen kann am Ende eines Absatzes mit der Tastenkombination Strg + Alt + Eingabetaste in das Wort MS eingefügt werden. Diese Funktion ermöglicht zwei verschiedene Absatzformate, die in einem logisch gedruckten Absatz verwendet werden. Wenn Sie möchten, dass Text vom Anfang einer bestimmten Überschrift in einem Inhaltsverzeichnis angezeigt wird, aber nicht die gesamte Überschrift im Inhaltsverzeichnis, können Sie diese Funktion verwenden.

Das folgende Codebeispiel zeigt, wie Sie ein Stiltrennzeichen einfügen, um verschiedene Absatzstile einzufügen.

// 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);
Style paraStyle = builder.getDocument().getStyles().add(StyleType.PARAGRAPH, "MyParaStyle");
paraStyle.getFont().setBold(false);
paraStyle.getFont().setSize(8);
paraStyle.getFont().setName("Arial");
// Append text with "Heading 1" style.
builder.getParagraphFormat().setStyleIdentifier(StyleIdentifier.HEADING_1);
builder.write("Heading 1");
builder.insertStyleSeparator();
// Append text with another style.
builder.getParagraphFormat().setStyleName(paraStyle.getName());
builder.write("This is text with some other formatting ");
dataDir = dataDir + "InsertStyleSeparator_out.doc";
doc.save(dataDir);

Kopieren Sie alle Stile aus der Vorlage

Es gibt Fälle, in denen Sie alle Stile von einem Dokument in ein anderes kopieren möchten. Sie können die Methode Document.CopyStylesFromTemplate verwenden, um Stile aus der angegebenen Vorlage in ein Dokument zu kopieren. Wenn Stile aus einer Vorlage in ein Dokument kopiert werden, werden gleichnamige Stile im Dokument neu definiert, damit sie mit den Stilbeschreibungen in der Vorlage übereinstimmen. Eindeutige Stile aus der Vorlage werden in das Dokument kopiert. Eindeutige Stile im Dokument bleiben erhalten.

Das folgende Codebeispiel zeigt, wie Stile von einem Dokument in ein anderes kopiert werden.

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java
Document doc = new Document(dataDir + "template.docx");
Document target = new Document(dataDir + "TestFile.doc");
target.copyStylesFromTemplate(doc);
dataDir = dataDir + "CopyStyles_out.docx";
doc.save(dataDir);

Wie man Theme-Eigenschaften manipuliert

Wir haben basic API in Aspose.Words hinzugefügt, um auf die Eigenschaften des Dokumententhemas zuzugreifen. Im Moment enthält dieses API die folgenden öffentlichen Objekte:

  • Thema
  • ThemeFonts
  • ThemeColors

Hier ist, wie Sie Theme-Eigenschaften erhalten können:

// 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(GetThemeProperties.class);
Document doc = new Document(dataDir + "Document.doc");
Theme theme = doc.getTheme();
// Major (Headings) font for Latin characters.
System.out.println(theme.getMajorFonts().getLatin());
// Minor (Body) font for EastAsian characters.
System.out.println(theme.getMinorFonts().getEastAsian());
// Color for theme color Accent 1.
System.out.println(theme.getColors().getAccent1());

Und so können Sie Designeigenschaften festlegen:

// 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(SetThemeProperties.class);
Document doc = new Document(dataDir + "Document.doc");
Theme theme = doc.getTheme();
// Set Times New Roman font as Body theme font for Latin Character.
theme.getMinorFonts().setLatin("Algerian");
// Set Color.Gold for theme color Hyperlink.
theme.getColors().setHyperlink(java.awt.Color.DARK_GRAY);
doc.save(dataDir + "output.doc");