Βοηθητικές μέθοδοι για την εξαγωγή περιεχομένου στο Aspose.Words για Java

Εισαγωγή στις βοηθητικές μεθόδους για την εξαγωγή περιεχομένου στο Aspose.Words για Java

Το Aspose.Words για Java είναι μια ισχυρή βιβλιοθήκη που επιτρέπει στους προγραμματιστές να εργάζονται με έγγραφα του Word μέσω προγραμματισμού. Μια κοινή εργασία κατά την εργασία με έγγραφα του Word είναι η εξαγωγή περιεχομένου από αυτά. Σε αυτό το άρθρο, θα εξερευνήσουμε ορισμένες βοηθητικές μεθόδους για την αποτελεσματική εξαγωγή περιεχομένου χρησιμοποιώντας το Aspose.Words για Java.

Προαπαιτούμενα

Πριν ασχοληθούμε με τα παραδείγματα κώδικα, βεβαιωθείτε ότι έχετε εγκαταστήσει και ρυθμίσει το Aspose.Words για Java στο έργο σας Java. Μπορείτε να το κατεβάσετε απόεδώ.

Βοηθητική μέθοδος 1: Εξαγωγή παραγράφων ανά στυλ

public static ArrayList<Paragraph> paragraphsByStyleName(Document doc, String styleName) {
    // Δημιουργήστε έναν πίνακα για τη συλλογή παραγράφων του καθορισμένου στυλ.
    ArrayList<Paragraph> paragraphsWithStyle = new ArrayList<Paragraph>();
    NodeCollection paragraphs = doc.getChildNodes(NodeType.PARAGRAPH, true);

    // Κοιτάξτε όλες τις παραγράφους για να βρείτε αυτές με το καθορισμένο στυλ.
    for (Paragraph paragraph : (Iterable<Paragraph>) paragraphs) {
        if (paragraph.getParagraphFormat().getStyle().getName().equals(styleName))
            paragraphsWithStyle.add(paragraph);
    }
    return paragraphsWithStyle;
}

Μπορείτε να χρησιμοποιήσετε αυτήν τη μέθοδο για να εξαγάγετε παραγράφους που έχουν συγκεκριμένο στυλ στο έγγραφο του Word. Αυτό είναι χρήσιμο όταν θέλετε να εξαγάγετε περιεχόμενο με συγκεκριμένη μορφοποίηση, όπως επικεφαλίδες ή μπλοκ εισαγωγικά.

Βοηθητική μέθοδος 2: Εξαγωγή περιεχομένου από κόμβους

public static ArrayList<Node> extractContentBetweenNodes(Node startNode, Node endNode, boolean isInclusive) {
    // Πρώτα, ελέγξτε ότι οι κόμβοι που μεταβιβάστηκαν σε αυτήν τη μέθοδο είναι έγκυροι για χρήση.
    verifyParameterNodes(startNode, endNode);
    
    // Δημιουργήστε μια λίστα για την αποθήκευση των εξαγόμενων κόμβων.
    ArrayList<Node> nodes = new ArrayList<Node>();

    // Εάν κάποιος δείκτης είναι μέρος ενός σχολίου, συμπεριλαμβανομένου του ίδιου του σχολίου, πρέπει να μετακινήσουμε τον δείκτη
    // προωθήστε τον κόμβο σχολίων που βρέθηκε μετά τον κόμβο CommentRangeEnd.
    if (endNode.getNodeType() == NodeType.COMMENT_RANGE_END && isInclusive) {
        Node node = findNextNode(NodeType.COMMENT, endNode.getNextSibling());
        if (node != null)
            endNode = node;
    }
    
    // Διατηρήστε ένα αρχείο των αρχικών κόμβων που διαβιβάστηκαν σε αυτήν τη μέθοδο για να χωρίσετε τους κόμβους δεικτών, εάν χρειάζεται.
    Node originalStartNode = startNode;
    Node originalEndNode = endNode;

    //Εξαγωγή περιεχομένου με βάση κόμβους σε επίπεδο μπλοκ (παραγράφους και πίνακες). Διασχίστε τους γονικούς κόμβους για να τους βρείτε.
    // Θα χωρίσουμε το περιεχόμενο του πρώτου και του τελευταίου κόμβου, ανάλογα με το αν οι κόμβοι του δείκτη είναι ενσωματωμένοι.
    startNode = getAncestorInBody(startNode);
    endNode = getAncestorInBody(endNode);
    boolean isExtracting = true;
    boolean isStartingNode = true;
    // Ο τρέχων κόμβος που εξάγουμε από το έγγραφο.
    Node currNode = startNode;

    // Ξεκινήστε την εξαγωγή περιεχομένου. Επεξεργαστείτε όλους τους κόμβους σε επίπεδο μπλοκ και χωρίστε συγκεκριμένα τον πρώτο
    // και τελευταίοι κόμβοι όταν χρειάζεται, ώστε να διατηρείται η μορφοποίηση της παραγράφου.
    // Αυτή η μέθοδος είναι λίγο πιο περίπλοκη από έναν κανονικό εξολκέα καθώς πρέπει να συνυπολογίσουμε
    // στην εξαγωγή χρησιμοποιώντας ενσωματωμένους κόμβους, πεδία, σελιδοδείκτες κ.λπ., ώστε να είναι χρήσιμο.
    while (isExtracting) {
        // Κλωνοποιήστε τον τρέχοντα κόμβο και τα παιδιά του για να αποκτήσετε ένα αντίγραφο.
        Node cloneNode = currNode.deepClone(true);
        boolean isEndingNode = currNode.equals(endNode);
        if (isStartingNode || isEndingNode) {
            // Πρέπει να επεξεργαστούμε κάθε δείκτη ξεχωριστά, οπότε μεταβιβάστε τον σε ξεχωριστή μέθοδο.
            // Το τέλος πρέπει να υποβληθεί αρχικά σε επεξεργασία για να διατηρηθούν ευρετήρια κόμβων.
            if (isEndingNode) {
                // !isStartingNode: μην προσθέσετε τον κόμβο δύο φορές εάν οι δείκτες είναι ο ίδιος κόμβος.
                processMarker(cloneNode, nodes, originalEndNode, currNode, isInclusive,
                        false, !isStartingNode, false);
                isExtracting = false;
            }
            //Η υπό όρους πρέπει να είναι ξεχωριστή, καθώς οι δείκτες αρχής και τέλους επιπέδου μπλοκ μπορεί να είναι ο ίδιος κόμβος.
            if (isStartingNode) {
                processMarker(cloneNode, nodes, originalStartNode, currNode, isInclusive,
                        true, true, false);
                isStartingNode = false;
            }
        } else
            // Ο κόμβος δεν είναι δείκτης έναρξης ή λήξης, απλώς προσθέστε το αντίγραφο στη λίστα.
            nodes.add(cloneNode);

        // Μεταβείτε στον επόμενο κόμβο και εξαγάγετε τον. Εάν ο επόμενος κόμβος είναι μηδενικός,
        // το υπόλοιπο περιεχόμενο βρίσκεται σε διαφορετική ενότητα.
        if (currNode.getNextSibling() == null && isExtracting) {
            // Μεταβείτε στην επόμενη ενότητα.
            Section nextSection = (Section) currNode.getAncestor(NodeType.SECTION).getNextSibling();
            currNode = nextSection.getBody().getFirstChild();
        } else {
            // Μεταβείτε στον επόμενο κόμβο στο σώμα.
            currNode = currNode.getNextSibling();
        }
    }

    // Για συμβατότητα με λειτουργία με ενσωματωμένους σελιδοδείκτες, προσθέστε την επόμενη παράγραφο (κενή).
    if (isInclusive && originalEndNode == endNode && !originalEndNode.isComposite())
        includeNextParagraph(endNode, nodes);

    // Επιστρέψτε τους κόμβους μεταξύ των δεικτών κόμβων.
    return nodes;
}

Αυτή η μέθοδος σάς επιτρέπει να εξαγάγετε περιεχόμενο μεταξύ δύο καθορισμένων κόμβων, είτε είναι παράγραφοι, πίνακες ή οποιαδήποτε άλλα στοιχεία σε επίπεδο μπλοκ. Χειρίζεται διάφορα σενάρια, συμπεριλαμβανομένων ενσωματωμένων δεικτών, πεδίων και σελιδοδεικτών.

Μέθοδος βοήθειας 3: Δημιουργία νέου εγγράφου

public static Document generateDocument(Document srcDoc, ArrayList<Node> nodes) throws Exception {
    Document dstDoc = new Document();
    
    // Αφαιρέστε την πρώτη παράγραφο από το κενό έγγραφο.
    dstDoc.getFirstSection().getBody().removeAllChildren();
    
    // Εισαγάγετε κάθε κόμβο από τη λίστα στο νέο έγγραφο. Διατηρήστε την αρχική μορφοποίηση του κόμβου.
    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;
}

Αυτή η μέθοδος σάς επιτρέπει να δημιουργήσετε ένα νέο έγγραφο εισάγοντας μια λίστα κόμβων από το έγγραφο προέλευσης. Διατηρεί την αρχική μορφοποίηση των κόμβων, καθιστώντας το χρήσιμο για τη δημιουργία νέων εγγράφων με συγκεκριμένο περιεχόμενο.

συμπέρασμα

Η εξαγωγή περιεχομένου από έγγραφα του Word μπορεί να είναι ένα κρίσιμο μέρος πολλών εργασιών επεξεργασίας εγγράφων. Το Aspose.Words για Java παρέχει ισχυρές βοηθητικές μεθόδους που απλοποιούν αυτή τη διαδικασία. Είτε θέλετε να εξαγάγετε παραγράφους κατά στυλ, περιεχόμενο μεταξύ κόμβων ή να δημιουργήσετε νέα έγγραφα, αυτές οι μέθοδοι θα σας βοηθήσουν να εργαστείτε αποτελεσματικά με έγγραφα Word στις εφαρμογές σας Java.

Συχνές ερωτήσεις

Πώς μπορώ να εγκαταστήσω το Aspose.Words για Java;

Για να εγκαταστήσετε το Aspose.Words για Java, μπορείτε να το κατεβάσετε από τον ιστότοπο Aspose. Επίσκεψηεδώ για να λάβετε την πιο πρόσφατη έκδοση.

Μπορώ να εξαγάγω περιεχόμενο από συγκεκριμένες ενότητες ενός εγγράφου του Word;

Ναι, μπορείτε να εξαγάγετε περιεχόμενο από συγκεκριμένες ενότητες ενός εγγράφου του Word χρησιμοποιώντας τις μεθόδους που αναφέρονται σε αυτό το άρθρο. Απλώς καθορίστε τους κόμβους έναρξης και λήξης που ορίζουν την ενότητα που θέλετε να εξαγάγετε.

Είναι το Aspose.Words για Java συμβατό με Java 11;

Ναι, το Aspose.Words για Java είναι συμβατό με Java 11 και νεότερες εκδόσεις. Μπορείτε να το χρησιμοποιήσετε στις εφαρμογές σας Java χωρίς προβλήματα.

Μπορώ να προσαρμόσω τη μορφοποίηση του εξαγόμενου περιεχομένου;

Ναι, μπορείτε να προσαρμόσετε τη μορφοποίηση του εξαγόμενου περιεχομένου τροποποιώντας τους εισαγόμενους κόμβους στο έγγραφο που δημιουργείται. Το Aspose.Words για Java παρέχει εκτενείς επιλογές μορφοποίησης για να καλύψει τις ανάγκες σας.

Πού μπορώ να βρω περισσότερη τεκμηρίωση και παραδείγματα για το Aspose.Words για Java;

Μπορείτε να βρείτε ολοκληρωμένη τεκμηρίωση και παραδείγματα για το Aspose.Words για Java στον ιστότοπο Aspose. Επίσκεψηhttps://reference.aspose.com/words/java/ για λεπτομερή τεκμηρίωση και πόρους.