Hilfsmethoden zum Extrahieren von Inhalten in Aspose.Words für Java

Einführung in Hilfsmethoden zum Extrahieren von Inhalten in Aspose.Words für Java

Aspose.Words für Java ist eine leistungsstarke Bibliothek, die es Entwicklern ermöglicht, programmgesteuert mit Word-Dokumenten zu arbeiten. Eine häufige Aufgabe bei der Arbeit mit Word-Dokumenten ist das Extrahieren von Inhalten aus diesen. In diesem Artikel werden wir einige Hilfsmethoden zum effizienten Extrahieren von Inhalten mit Aspose.Words für Java untersuchen.

Voraussetzungen

Bevor wir uns in die Codebeispiele vertiefen, stellen Sie sicher, dass Sie Aspose.Words für Java in Ihrem Java-Projekt installiert und eingerichtet haben. Sie können es hier herunterladen:Hier.

Hilfsmethode 1: Absätze nach Stil extrahieren

public static ArrayList<Paragraph> paragraphsByStyleName(Document doc, String styleName) {
    // Erstellen Sie ein Array, um Absätze des angegebenen Stils zu sammeln.
    ArrayList<Paragraph> paragraphsWithStyle = new ArrayList<Paragraph>();
    NodeCollection paragraphs = doc.getChildNodes(NodeType.PARAGRAPH, true);

    // Durchsuchen Sie alle Absätze, um diejenigen mit dem angegebenen Stil zu finden.
    for (Paragraph paragraph : (Iterable<Paragraph>) paragraphs) {
        if (paragraph.getParagraphFormat().getStyle().getName().equals(styleName))
            paragraphsWithStyle.add(paragraph);
    }
    return paragraphsWithStyle;
}

Mit dieser Methode können Sie Absätze mit einem bestimmten Stil in Ihrem Word-Dokument extrahieren. Dies ist nützlich, wenn Sie Inhalte mit einer bestimmten Formatierung extrahieren möchten, z. B. Überschriften oder Blockzitate.

Hilfsmethode 2: Extrahieren von Inhalten nach Knoten

public static ArrayList<Node> extractContentBetweenNodes(Node startNode, Node endNode, boolean isInclusive) {
    // Überprüfen Sie zunächst, ob die an diese Methode übergebenen Knoten gültig sind.
    verifyParameterNodes(startNode, endNode);
    
    // Erstellen Sie eine Liste zum Speichern der extrahierten Knoten.
    ArrayList<Node> nodes = new ArrayList<Node>();

    // Wenn einer der Marker Teil eines Kommentars ist, einschließlich des Kommentars selbst, müssen wir den Zeiger bewegen
    // weiter zum Kommentarknoten, der sich nach dem Knoten CommentRangeEnd befindet.
    if (endNode.getNodeType() == NodeType.COMMENT_RANGE_END && isInclusive) {
        Node node = findNextNode(NodeType.COMMENT, endNode.getNextSibling());
        if (node != null)
            endNode = node;
    }
    
    // Bewahren Sie eine Aufzeichnung der ursprünglichen Knoten auf, die an diese Methode übergeben wurden, um Markierungsknoten bei Bedarf aufzuteilen.
    Node originalStartNode = startNode;
    Node originalEndNode = endNode;

    //Extrahieren Sie Inhalte basierend auf Knoten auf Blockebene (Absätze und Tabellen). Durchsuchen Sie übergeordnete Knoten, um sie zu finden.
    // Wir werden den Inhalt des ersten und letzten Knotens aufteilen, je nachdem, ob die Markierungsknoten eingebettet sind.
    startNode = getAncestorInBody(startNode);
    endNode = getAncestorInBody(endNode);
    boolean isExtracting = true;
    boolean isStartingNode = true;
    // Der aktuelle Knoten, den wir aus dem Dokument extrahieren.
    Node currNode = startNode;

    // Beginnen Sie mit dem Extrahieren von Inhalten. Verarbeiten Sie alle Knoten auf Blockebene und teilen Sie insbesondere den ersten
    // und letzte Knoten bei Bedarf, damit die Absatzformatierung erhalten bleibt.
    // Diese Methode ist etwas komplizierter als ein normaler Extraktor, da wir berücksichtigen müssen
    // beim Extrahieren mithilfe von Inline-Knoten, Feldern, Lesezeichen usw., um es nützlich zu machen.
    while (isExtracting) {
        // Klonen Sie den aktuellen Knoten und seine untergeordneten Knoten, um eine Kopie zu erhalten.
        Node cloneNode = currNode.deepClone(true);
        boolean isEndingNode = currNode.equals(endNode);
        if (isStartingNode || isEndingNode) {
            // Wir müssen jeden Marker separat verarbeiten, übergeben Sie ihn also stattdessen an eine separate Methode.
            // Um die Knotenindizes beizubehalten, sollte das Ende zuerst verarbeitet werden.
            if (isEndingNode) {
                // !isStartingNode: Fügen Sie den Knoten nicht zweimal hinzu, wenn die Markierungen derselbe Knoten sind.
                processMarker(cloneNode, nodes, originalEndNode, currNode, isInclusive,
                        false, !isStartingNode, false);
                isExtracting = false;
            }
            //Bedingte müssen separat sein, da die Start- und Endmarkierungen auf Blockebene derselbe Knoten sein können.
            if (isStartingNode) {
                processMarker(cloneNode, nodes, originalStartNode, currNode, isInclusive,
                        true, true, false);
                isStartingNode = false;
            }
        } else
            // Der Knoten ist kein Start- oder Endmarker. Fügen Sie die Kopie einfach zur Liste hinzu.
            nodes.add(cloneNode);

        // Gehen Sie zum nächsten Knoten und extrahieren Sie ihn. Wenn der nächste Knoten null ist,
        // Der restliche Inhalt befindet sich in einem anderen Abschnitt.
        if (currNode.getNextSibling() == null && isExtracting) {
            // Gehen Sie zum nächsten Abschnitt.
            Section nextSection = (Section) currNode.getAncestor(NodeType.SECTION).getNextSibling();
            currNode = nextSection.getBody().getFirstChild();
        } else {
            // Wechseln Sie zum nächsten Knoten im Textkörper.
            currNode = currNode.getNextSibling();
        }
    }

    // Aus Kompatibilitätsgründen mit dem Modus mit Inline-Lesezeichen fügen Sie den nächsten Absatz (leer) hinzu.
    if (isInclusive && originalEndNode == endNode && !originalEndNode.isComposite())
        includeNextParagraph(endNode, nodes);

    // Gibt die Knoten zwischen den Knotenmarkierungen zurück.
    return nodes;
}

Mit dieser Methode können Sie Inhalt zwischen zwei angegebenen Knoten extrahieren, unabhängig davon, ob es sich um Absätze, Tabellen oder andere Elemente auf Blockebene handelt. Sie behandelt verschiedene Szenarien, darunter Inline-Markierungen, Felder und Lesezeichen.

Hilfsmethode 3: Erstellen eines neuen Dokuments

public static Document generateDocument(Document srcDoc, ArrayList<Node> nodes) throws Exception {
    Document dstDoc = new Document();
    
    // Entfernen Sie den ersten Absatz aus dem leeren Dokument.
    dstDoc.getFirstSection().getBody().removeAllChildren();
    
    // Importieren Sie jeden Knoten aus der Liste in das neue Dokument. Behalten Sie die ursprüngliche Formatierung des Knotens bei.
    NodeImporter importer = new NodeImporter(srcDoc, dstDoc, ImportFormatMode.KEEP_SOURCE_FORMATTING);
    for (Node node : nodes) {
        Node importNode = importer.importNode(node, true);
        dstDoc.getFirstSection().getBody().appendChild(importNode);
    }
    
    return dstDoc;
}

Mit dieser Methode können Sie ein neues Dokument erstellen, indem Sie eine Liste von Knoten aus dem Quelldokument importieren. Dabei bleibt die ursprüngliche Formatierung der Knoten erhalten, was diese Methode zum Erstellen neuer Dokumente mit spezifischem Inhalt nützlich macht.

Abschluss

Das Extrahieren von Inhalten aus Word-Dokumenten kann ein entscheidender Teil vieler Dokumentverarbeitungsaufgaben sein. Aspose.Words für Java bietet leistungsstarke Hilfsmethoden, die diesen Prozess vereinfachen. Ob Sie Absätze nach Stil, Inhalt zwischen Knoten extrahieren oder neue Dokumente generieren müssen, diese Methoden helfen Ihnen, effizient mit Word-Dokumenten in Ihren Java-Anwendungen zu arbeiten.

Häufig gestellte Fragen

Wie kann ich Aspose.Words für Java installieren?

Um Aspose.Words für Java zu installieren, können Sie es von der Aspose-Website herunterladen. Besuchen SieHier um die neueste Version zu erhalten.

Kann ich Inhalte aus bestimmten Abschnitten eines Word-Dokuments extrahieren?

Ja, Sie können mit den in diesem Artikel beschriebenen Methoden Inhalte aus bestimmten Abschnitten eines Word-Dokuments extrahieren. Geben Sie einfach die Start- und Endknoten an, die den Abschnitt definieren, den Sie extrahieren möchten.

Ist Aspose.Words für Java mit Java 11 kompatibel?

Ja, Aspose.Words für Java ist mit Java 11 und höheren Versionen kompatibel. Sie können es problemlos in Ihren Java-Anwendungen verwenden.

Kann ich die Formatierung des extrahierten Inhalts anpassen?

Ja, Sie können die Formatierung des extrahierten Inhalts anpassen, indem Sie die importierten Knoten im generierten Dokument ändern. Aspose.Words für Java bietet umfangreiche Formatierungsoptionen, die Ihren Anforderungen entsprechen.

Wo finde ich weitere Dokumentation und Beispiele für Aspose.Words für Java?

Ausführliche Dokumentation und Beispiele für Aspose.Words für Java finden Sie auf der Aspose-Website. Besuchen Siehttps://reference.aspose.com/words/java/ für detaillierte Dokumentation und Ressourcen.