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 daraus. In diesem Artikel werden wir einige Hilfsmethoden zum effizienten Extrahieren von Inhalten mit Aspose.Words für Java untersuchen.

Voraussetzungen

Bevor wir uns mit den Codebeispielen befassen, stellen Sie sicher, dass Aspose.Words für Java in Ihrem Java-Projekt installiert und eingerichtet ist. Sie können es herunterladen unterHier.

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 extrahieren, die einen bestimmten Stil in Ihrem Word-Dokument haben. Dies ist nützlich, wenn Sie Inhalte mit einer bestimmten Formatierung extrahieren möchten, beispielsweise Überschriften oder Anführungszeichen.

Hilfsmethode 2: Inhalt nach Knoten extrahieren

public static ArrayList<Node> extractContentBetweenNodes(Node startNode, Node endNode, boolean isInclusive) {
    // Überprüfen Sie zunächst, ob die an diese Methode übergebenen Knoten für die Verwendung 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
    // Weiterleiten an den Kommentarknoten, der nach dem CommentRangeEnd-Knoten gefunden wird.
    if (endNode.getNodeType() == NodeType.COMMENT_RANGE_END && isInclusive) {
        Node node = findNextNode(NodeType.COMMENT, endNode.getNextSibling());
        if (node != null)
            endNode = node;
    }
    
    // Notieren Sie sich die ursprünglichen Knoten, die an diese Methode übergeben wurden, um bei Bedarf Markierungsknoten aufzuteilen.
    Node originalStartNode = startNode;
    Node originalEndNode = endNode;

    //Extrahieren Sie Inhalte basierend auf Knoten auf Blockebene (Absätze und Tabellen). Durchlaufen Sie die übergeordneten Knoten, um sie zu finden.
    // Wir teilen den Inhalt des ersten und letzten Knotens auf, je nachdem, ob die Markierungsknoten inline 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 den ersten gezielt auf
    // und letzte Knoten bei Bedarf, damit die Absatzformatierung erhalten bleibt.
    // Diese Methode ist etwas komplizierter als ein normaler Extraktor, wie 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, also übergeben Sie ihn stattdessen an eine separate Methode.
            // End sollte zuerst verarbeitet werden, um Knotenindizes beizubehalten.
            if (isEndingNode) {
                // !isStartingNode: Fügen Sie den Knoten nicht zweimal hinzu, wenn es sich bei den Markierungen um denselben Knoten handelt.
                processMarker(cloneNode, nodes, originalEndNode, currNode, isInclusive,
                        false, !isStartingNode, false);
                isExtracting = false;
            }
            //Die Bedingung muss getrennt sein, da die Start- und Endmarkierungen auf Blockebene möglicherweise derselbe Knoten sind.
            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 Rest des Inhalts 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 {
            // Gehen Sie zum nächsten Knoten im Körper.
            currNode = currNode.getNextSibling();
        }
    }

    // Um die Kompatibilität mit dem Modus mit Inline-Lesezeichen zu gewährleisten, 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 Inhalte zwischen zwei angegebenen Knoten extrahieren, unabhängig davon, ob es sich um Absätze, Tabellen oder andere Elemente auf Blockebene handelt. Es verarbeitet verschiedene Szenarien, einschließlich Inline-Marker, 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 generieren, indem Sie eine Liste von Knoten aus dem Quelldokument importieren. Es behält die ursprüngliche Formatierung der Knoten bei und eignet sich daher zum Erstellen neuer Dokumente mit spezifischem Inhalt.

Abschluss

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

FAQs

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. BesuchenHier 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 genannten 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, um Ihren Anforderungen gerecht zu werden.

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

Eine umfassende Dokumentation und Beispiele für Aspose.Words für Java finden Sie auf der Aspose-Website. Besuchenhttps://reference.aspose.com/words/java/ für detaillierte Dokumentation und Ressourcen.