Các phương thức trợ giúp để trích xuất nội dung trong Aspose.Words cho Java

Giới thiệu về Phương pháp trợ giúp để trích xuất nội dung trong Aspose.Words cho Java

Aspose.Words for Java là một thư viện mạnh mẽ cho phép các nhà phát triển làm việc với các tài liệu Word theo chương trình. Một tác vụ phổ biến khi làm việc với tài liệu Word là trích xuất nội dung từ chúng. Trong bài viết này, chúng ta sẽ khám phá một số phương thức trợ giúp để trích xuất nội dung một cách hiệu quả bằng Aspose.Words cho Java.

Điều kiện tiên quyết

Trước khi chúng ta đi sâu vào các ví dụ về mã, hãy đảm bảo bạn đã cài đặt và thiết lập Aspose.Words for Java trong dự án Java của mình. Bạn có thể tải nó xuống từđây.

Phương pháp trợ giúp 1: Trích xuất đoạn văn theo kiểu

public static ArrayList<Paragraph> paragraphsByStyleName(Document doc, String styleName) {
    // Tạo một mảng để thu thập các đoạn văn có kiểu dáng đã chỉ định.
    ArrayList<Paragraph> paragraphsWithStyle = new ArrayList<Paragraph>();
    NodeCollection paragraphs = doc.getChildNodes(NodeType.PARAGRAPH, true);

    // Xem qua tất cả các đoạn văn để tìm những đoạn văn có phong cách được chỉ định.
    for (Paragraph paragraph : (Iterable<Paragraph>) paragraphs) {
        if (paragraph.getParagraphFormat().getStyle().getName().equals(styleName))
            paragraphsWithStyle.add(paragraph);
    }
    return paragraphsWithStyle;
}

Bạn có thể sử dụng phương pháp này để trích xuất các đoạn văn có kiểu cụ thể trong tài liệu Word của mình. Điều này hữu ích khi bạn muốn trích xuất nội dung có định dạng cụ thể, chẳng hạn như tiêu đề hoặc dấu ngoặc kép.

Phương pháp trợ giúp 2: Trích xuất nội dung theo nút

public static ArrayList<Node> extractContentBetweenNodes(Node startNode, Node endNode, boolean isInclusive) {
    // Trước tiên, hãy kiểm tra xem các nút được truyền cho phương thức này có hợp lệ để sử dụng hay không.
    verifyParameterNodes(startNode, endNode);
    
    // Tạo một danh sách để lưu trữ các nút được trích xuất.
    ArrayList<Node> nodes = new ArrayList<Node>();

    // Nếu một trong hai điểm đánh dấu là một phần của nhận xét, bao gồm cả nhận xét đó, chúng ta cần di chuyển con trỏ
    // chuyển tiếp tới Nút Nhận xét được tìm thấy sau nút CommentRangeEnd.
    if (endNode.getNodeType() == NodeType.COMMENT_RANGE_END && isInclusive) {
        Node node = findNextNode(NodeType.COMMENT, endNode.getNextSibling());
        if (node != null)
            endNode = node;
    }
    
    // Giữ một bản ghi các nút ban đầu được truyền cho phương pháp này để phân chia các nút đánh dấu nếu cần.
    Node originalStartNode = startNode;
    Node originalEndNode = endNode;

    //Trích xuất nội dung dựa trên các nút cấp khối (đoạn và bảng). Duyệt qua các nút cha để tìm chúng.
    // Chúng tôi sẽ phân chia nội dung của nút đầu tiên và nút cuối cùng, tùy thuộc vào việc nút đánh dấu có nằm trong dòng hay không.
    startNode = getAncestorInBody(startNode);
    endNode = getAncestorInBody(endNode);
    boolean isExtracting = true;
    boolean isStartingNode = true;
    // Nút hiện tại chúng tôi đang trích xuất từ tài liệu.
    Node currNode = startNode;

    // Bắt đầu trích xuất nội dung. Xử lý tất cả các nút cấp khối và phân chia cụ thể nút đầu tiên
    // và các nút cuối cùng khi cần thiết để định dạng đoạn văn được giữ lại.
    // Phương pháp này phức tạp hơn một chút so với phương pháp trích xuất thông thường vì chúng ta cần tính hệ số
    // trong việc trích xuất bằng cách sử dụng các nút, trường, dấu trang nội tuyến, v.v. để làm cho nó hữu ích.
    while (isExtracting) {
        // Sao chép nút hiện tại và các nút con của nó để lấy một bản sao.
        Node cloneNode = currNode.deepClone(true);
        boolean isEndingNode = currNode.equals(endNode);
        if (isStartingNode || isEndingNode) {
            // Chúng ta cần xử lý từng điểm đánh dấu một cách riêng biệt, vì vậy hãy chuyển nó sang một phương thức riêng biệt.
            // Đầu tiên, phần cuối phải được xử lý để giữ chỉ mục nút.
            if (isEndingNode) {
                // !isStartingNode: không thêm nút hai lần nếu các điểm đánh dấu là cùng một nút.
                processMarker(cloneNode, nodes, originalEndNode, currNode, isInclusive,
                        false, !isStartingNode, false);
                isExtracting = false;
            }
            //Điều kiện cần phải tách biệt vì điểm đánh dấu bắt đầu và kết thúc cấp khối có thể là cùng một nút.
            if (isStartingNode) {
                processMarker(cloneNode, nodes, originalStartNode, currNode, isInclusive,
                        true, true, false);
                isStartingNode = false;
            }
        } else
            // Nút không phải là điểm đánh dấu bắt đầu hoặc kết thúc, chỉ cần thêm bản sao vào danh sách.
            nodes.add(cloneNode);

        // Di chuyển đến nút tiếp theo và giải nén nó. Nếu nút tiếp theo là null,
        // phần còn lại của nội dung được tìm thấy trong một phần khác.
        if (currNode.getNextSibling() == null && isExtracting) {
            // Chuyển sang phần tiếp theo.
            Section nextSection = (Section) currNode.getAncestor(NodeType.SECTION).getNextSibling();
            currNode = nextSection.getBody().getFirstChild();
        } else {
            // Di chuyển đến nút tiếp theo trong cơ thể.
            currNode = currNode.getNextSibling();
        }
    }

    // Để tương thích với chế độ có dấu trang nội tuyến, hãy thêm đoạn tiếp theo (trống).
    if (isInclusive && originalEndNode == endNode && !originalEndNode.isComposite())
        includeNextParagraph(endNode, nodes);

    // Trả lại các nút giữa các điểm đánh dấu nút.
    return nodes;
}

Phương pháp này cho phép bạn trích xuất nội dung giữa hai nút được chỉ định, cho dù chúng là đoạn văn, bảng hay bất kỳ phần tử cấp khối nào khác. Nó xử lý các tình huống khác nhau, bao gồm điểm đánh dấu nội tuyến, trường và dấu trang.

Phương pháp trợ giúp 3: Tạo tài liệu mới

public static Document generateDocument(Document srcDoc, ArrayList<Node> nodes) throws Exception {
    Document dstDoc = new Document();
    
    // Xóa đoạn đầu tiên khỏi tài liệu trống.
    dstDoc.getFirstSection().getBody().removeAllChildren();
    
    // Nhập từng nút từ danh sách vào tài liệu mới. Giữ định dạng ban đầu của nút.
    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;
}

Phương pháp này cho phép bạn tạo tài liệu mới bằng cách nhập danh sách các nút từ tài liệu nguồn. Nó giữ lại định dạng ban đầu của các nút, giúp ích cho việc tạo tài liệu mới với nội dung cụ thể.

Phần kết luận

Trích xuất nội dung từ tài liệu Word có thể là một phần quan trọng trong nhiều tác vụ xử lý tài liệu. Aspose.Words for Java cung cấp các phương thức trợ giúp mạnh mẽ giúp đơn giản hóa quy trình này. Cho dù bạn cần trích xuất các đoạn văn theo kiểu, nội dung giữa các nút hay tạo tài liệu mới, những phương pháp này sẽ giúp bạn làm việc hiệu quả với tài liệu Word trong ứng dụng Java của mình.

Câu hỏi thường gặp

Làm cách nào tôi có thể cài đặt Aspose.Words cho Java?

Để cài đặt Aspose.Words cho Java, bạn có thể tải xuống từ trang web Aspose. Thăm nomđây để có được phiên bản mới nhất.

Tôi có thể trích xuất nội dung từ các phần cụ thể của tài liệu Word không?

Có, bạn có thể trích xuất nội dung từ các phần cụ thể của tài liệu Word bằng các phương pháp được đề cập trong bài viết này. Chỉ cần chỉ định nút bắt đầu và nút kết thúc xác định phần bạn muốn trích xuất.

Aspose.Words cho Java có tương thích với Java 11 không?

Có, Aspose.Words for Java tương thích với Java 11 và các phiên bản cao hơn. Bạn có thể sử dụng nó trong các ứng dụng Java của mình mà không gặp vấn đề gì.

Tôi có thể tùy chỉnh định dạng của nội dung được trích xuất không?

Có, bạn có thể tùy chỉnh định dạng của nội dung được trích xuất bằng cách sửa đổi các nút đã nhập trong tài liệu được tạo. Aspose.Words for Java cung cấp các tùy chọn định dạng mở rộng để đáp ứng nhu cầu của bạn.

Tôi có thể tìm thêm tài liệu và ví dụ về Aspose.Words cho Java ở đâu?

Bạn có thể tìm thấy tài liệu và ví dụ toàn diện về Aspose.Words cho Java trên trang web Aspose. Thăm nomhttps://reference.aspose.com/words/java/ để biết tài liệu và tài nguyên chi tiết.