Pomocné metody pro extrahování obsahu v Aspose.Words pro Java

Úvod do pomocných metod pro extrahování obsahu v Aspose.Words pro Javu

Aspose.Words for Java je výkonná knihovna, která umožňuje vývojářům pracovat s dokumenty Wordu programově. Jedním z běžných úkolů při práci s dokumenty aplikace Word je extrahování obsahu z nich. V tomto článku prozkoumáme některé pomocné metody pro efektivní extrakci obsahu pomocí Aspose.Words for Java.

Předpoklady

Než se ponoříme do příkladů kódu, ujistěte se, že máte Aspose.Words for Java nainstalovaný a nastavený v projektu Java. Můžete si jej stáhnout ztady.

Pomocná metoda 1: Extrahování odstavců podle stylu

public static ArrayList<Paragraph> paragraphsByStyleName(Document doc, String styleName) {
    // Vytvořte pole pro shromažďování odstavců zadaného stylu.
    ArrayList<Paragraph> paragraphsWithStyle = new ArrayList<Paragraph>();
    NodeCollection paragraphs = doc.getChildNodes(NodeType.PARAGRAPH, true);

    // Prohlédněte si všechny odstavce a najděte ty se zadaným stylem.
    for (Paragraph paragraph : (Iterable<Paragraph>) paragraphs) {
        if (paragraph.getParagraphFormat().getStyle().getName().equals(styleName))
            paragraphsWithStyle.add(paragraph);
    }
    return paragraphsWithStyle;
}

Tuto metodu můžete použít k extrahování odstavců, které mají v dokumentu aplikace Word určitý styl. To je užitečné, když chcete extrahovat obsah s určitým formátováním, jako jsou nadpisy nebo blokové uvozovky.

Pomocná metoda 2: Extrahování obsahu podle uzlů

public static ArrayList<Node> extractContentBetweenNodes(Node startNode, Node endNode, boolean isInclusive) {
    // Nejprve zkontrolujte, zda jsou uzly předané této metodě platné pro použití.
    verifyParameterNodes(startNode, endNode);
    
    // Vytvořte seznam pro uložení extrahovaných uzlů.
    ArrayList<Node> nodes = new ArrayList<Node>();

    // Pokud je kterákoli značka součástí komentáře, včetně komentáře samotného, musíme posunout ukazatel
    // přeposlat na uzel Komentář nalezený za uzlem CommentRangeEnd.
    if (endNode.getNodeType() == NodeType.COMMENT_RANGE_END && isInclusive) {
        Node node = findNextNode(NodeType.COMMENT, endNode.getNextSibling());
        if (node != null)
            endNode = node;
    }
    
    // Uchovávejte záznam původních uzlů předaných této metodě, abyste v případě potřeby rozdělili uzly značek.
    Node originalStartNode = startNode;
    Node originalEndNode = endNode;

    //Extrahujte obsah na základě uzlů na úrovni bloku (odstavců a tabulek). Procházejte nadřazené uzly, abyste je našli.
    // Rozdělíme obsah prvního a posledního uzlu v závislosti na tom, zda jsou uzly značek v řadě.
    startNode = getAncestorInBody(startNode);
    endNode = getAncestorInBody(endNode);
    boolean isExtracting = true;
    boolean isStartingNode = true;
    // Aktuální uzel, který extrahujeme z dokumentu.
    Node currNode = startNode;

    // Začněte extrahovat obsah. Zpracujte všechny uzly na úrovni bloku a konkrétně rozdělte první
    // a poslední uzly v případě potřeby, aby bylo zachováno formátování odstavce.
    // Tato metoda je o něco složitější než běžný extraktor, jak musíme zohlednit
    // při extrakci pomocí vložených uzlů, polí, záložek atd., aby to bylo užitečné.
    while (isExtracting) {
        // Naklonujte aktuální uzel a jeho potomky, abyste získali kopii.
        Node cloneNode = currNode.deepClone(true);
        boolean isEndingNode = currNode.equals(endNode);
        if (isStartingNode || isEndingNode) {
            // Potřebujeme zpracovat každou značku zvlášť, takže ji místo toho předejte samostatné metodě.
            // End by měl být nejprve zpracován, aby se zachovaly indexy uzlů.
            if (isEndingNode) {
                // !isStartingNode: nepřidávejte uzel dvakrát, pokud jsou značky stejný uzel.
                processMarker(cloneNode, nodes, originalEndNode, currNode, isInclusive,
                        false, !isStartingNode, false);
                isExtracting = false;
            }
            //Podmíněné musí být oddělené, protože značky začátku a konce na úrovni bloku mohou být stejným uzlem.
            if (isStartingNode) {
                processMarker(cloneNode, nodes, originalStartNode, currNode, isInclusive,
                        true, true, false);
                isStartingNode = false;
            }
        } else
            // Uzel není značka začátku nebo konce, jednoduše přidejte kopii do seznamu.
            nodes.add(cloneNode);

        // Přesuňte se na další uzel a extrahujte jej. Pokud je další uzel nulový,
        // zbytek obsahu najdete v jiné sekci.
        if (currNode.getNextSibling() == null && isExtracting) {
            // Přejít na další sekci.
            Section nextSection = (Section) currNode.getAncestor(NodeType.SECTION).getNextSibling();
            currNode = nextSection.getBody().getFirstChild();
        } else {
            // Přesuňte se na další uzel v těle.
            currNode = currNode.getNextSibling();
        }
    }

    // Pro kompatibilitu s režimem s vloženými záložkami přidejte další odstavec (prázdný).
    if (isInclusive && originalEndNode == endNode && !originalEndNode.isComposite())
        includeNextParagraph(endNode, nodes);

    // Vraťte uzly mezi značky uzlů.
    return nodes;
}

Tato metoda umožňuje extrahovat obsah mezi dvěma určenými uzly, ať už jde o odstavce, tabulky nebo jiné prvky na úrovni bloku. Zvládá různé scénáře, včetně vložených značek, polí a záložek.

Pomocná metoda 3: Generování nového dokumentu

public static Document generateDocument(Document srcDoc, ArrayList<Node> nodes) throws Exception {
    Document dstDoc = new Document();
    
    // Odeberte první odstavec z prázdného dokumentu.
    dstDoc.getFirstSection().getBody().removeAllChildren();
    
    // Importujte každý uzel ze seznamu do nového dokumentu. Zachovejte původní formátování uzlu.
    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;
}

Tato metoda umožňuje vygenerovat nový dokument importem seznamu uzlů ze zdrojového dokumentu. Zachovává původní formátování uzlů, což je užitečné pro vytváření nových dokumentů se specifickým obsahem.

Závěr

Extrahování obsahu z dokumentů aplikace Word může být klíčovou součástí mnoha úloh zpracování dokumentů. Aspose.Words for Java poskytuje výkonné pomocné metody, které tento proces zjednodušují. Ať už potřebujete extrahovat odstavce podle stylu, obsahu mezi uzly nebo generovat nové dokumenty, tyto metody vám pomohou efektivně pracovat s dokumenty Wordu ve vašich aplikacích Java.

FAQ

Jak mohu nainstalovat Aspose.Words pro Java?

Chcete-li nainstalovat Aspose.Words for Java, můžete si jej stáhnout z webu Aspose. Návštěvatady získat nejnovější verzi.

Mohu extrahovat obsah z konkrétních částí dokumentu aplikace Word?

Ano, můžete extrahovat obsah z konkrétních částí dokumentu aplikace Word pomocí metod uvedených v tomto článku. Jednoduše zadejte počáteční a koncové uzly, které definují úsek, který chcete extrahovat.

Je Aspose.Words for Java kompatibilní s Java 11?

Ano, Aspose.Words for Java je kompatibilní s verzí Java 11 a vyšší. Můžete jej bez problémů používat ve svých aplikacích Java.

Mohu přizpůsobit formátování extrahovaného obsahu?

Ano, můžete upravit formátování extrahovaného obsahu úpravou importovaných uzlů ve vygenerovaném dokumentu. Aspose.Words for Java poskytuje rozsáhlé možnosti formátování, které splní vaše potřeby.

Kde najdu další dokumentaci a příklady pro Aspose.Words pro Java?

Komplexní dokumentaci a příklady pro Aspose.Words for Java můžete najít na webu Aspose. Návštěvahttps://reference.aspose.com/words/java/ pro podrobnou dokumentaci a zdroje.