Metode Pembantu untuk Mengekstrak Konten di Aspose.Words untuk Java

Pengantar Metode Pembantu untuk Mengekstrak Konten di Aspose.Words untuk Java

Aspose.Words untuk Java adalah perpustakaan canggih yang memungkinkan pengembang bekerja dengan dokumen Word secara terprogram. Salah satu tugas umum saat bekerja dengan dokumen Word adalah mengekstrak konten dari dokumen tersebut. Pada artikel ini, kita akan menjelajahi beberapa metode pembantu untuk mengekstraksi konten secara efisien menggunakan Aspose.Words untuk Java.

Prasyarat

Sebelum kita mendalami contoh kode, pastikan Anda telah menginstal dan menyiapkan Aspose.Words for Java di proyek Java Anda. Anda dapat mengunduhnya dariDi Sini.

Metode Pembantu 1: Mengekstraksi Paragraf berdasarkan Gaya

public static ArrayList<Paragraph> paragraphsByStyleName(Document doc, String styleName) {
    // Buat array untuk mengumpulkan paragraf dengan gaya yang ditentukan.
    ArrayList<Paragraph> paragraphsWithStyle = new ArrayList<Paragraph>();
    NodeCollection paragraphs = doc.getChildNodes(NodeType.PARAGRAPH, true);

    // Telusuri semua paragraf untuk menemukan paragraf dengan gaya tertentu.
    for (Paragraph paragraph : (Iterable<Paragraph>) paragraphs) {
        if (paragraph.getParagraphFormat().getStyle().getName().equals(styleName))
            paragraphsWithStyle.add(paragraph);
    }
    return paragraphsWithStyle;
}

Anda dapat menggunakan metode ini untuk mengekstrak paragraf yang memiliki gaya tertentu di dokumen Word Anda. Ini berguna ketika Anda ingin mengekstrak konten dengan format tertentu, seperti judul atau tanda kutip blok.

Metode Pembantu 2: Mengekstrak Konten dengan Node

public static ArrayList<Node> extractContentBetweenNodes(Node startNode, Node endNode, boolean isInclusive) {
    // Pertama, periksa apakah node yang diteruskan ke metode ini valid untuk digunakan.
    verifyParameterNodes(startNode, endNode);
    
    // Buat daftar untuk menyimpan node yang diekstraksi.
    ArrayList<Node> nodes = new ArrayList<Node>();

    // Jika salah satu penanda merupakan bagian dari komentar, termasuk komentar itu sendiri, kita perlu memindahkan penunjuknya
    // meneruskan ke Node Komentar yang ditemukan setelah simpul CommentRangeEnd.
    if (endNode.getNodeType() == NodeType.COMMENT_RANGE_END && isInclusive) {
        Node node = findNextNode(NodeType.COMMENT, endNode.getNextSibling());
        if (node != null)
            endNode = node;
    }
    
    // Catat node asli yang diteruskan ke metode ini untuk memisahkan node penanda jika diperlukan.
    Node originalStartNode = startNode;
    Node originalEndNode = endNode;

    //Ekstrak konten berdasarkan node tingkat blok (paragraf dan tabel). Telusuri node induk untuk menemukannya.
    // Kami akan membagi konten node pertama dan terakhir, bergantung pada apakah node penanda sejajar.
    startNode = getAncestorInBody(startNode);
    endNode = getAncestorInBody(endNode);
    boolean isExtracting = true;
    boolean isStartingNode = true;
    // Node saat ini yang kami ekstrak dari dokumen.
    Node currNode = startNode;

    // Mulailah mengekstraksi konten. Memproses semua node tingkat blok dan secara khusus membagi node pertama
    // dan node terakhir bila diperlukan sehingga format paragraf dipertahankan.
    // Metode ini sedikit lebih rumit daripada ekstraktor biasa karena kita perlu memfaktorkannya
    // dalam mengekstraksi menggunakan node sebaris, bidang, bookmark, dll, agar bermanfaat.
    while (isExtracting) {
        // Kloning node saat ini dan turunannya untuk mendapatkan salinan.
        Node cloneNode = currNode.deepClone(true);
        boolean isEndingNode = currNode.equals(endNode);
        if (isStartingNode || isEndingNode) {
            // Kita perlu memproses setiap penanda secara terpisah, jadi berikan saja ke metode terpisah.
            // Akhir harus diproses terlebih dahulu untuk menjaga indeks simpul.
            if (isEndingNode) {
                // !isStartingNode: jangan menambahkan node dua kali jika penandanya adalah node yang sama.
                processMarker(cloneNode, nodes, originalEndNode, currNode, isInclusive,
                        false, !isStartingNode, false);
                isExtracting = false;
            }
            //Persyaratan harus dipisahkan karena penanda awal dan akhir tingkat blok mungkin merupakan simpul yang sama.
            if (isStartingNode) {
                processMarker(cloneNode, nodes, originalStartNode, currNode, isInclusive,
                        true, true, false);
                isStartingNode = false;
            }
        } else
            // Node bukanlah penanda awal atau akhir, cukup tambahkan salinannya ke dalam daftar.
            nodes.add(cloneNode);

        // Pindah ke node berikutnya dan ekstrak. Jika node berikutnya adalah null,
        // konten lainnya ditemukan di bagian berbeda.
        if (currNode.getNextSibling() == null && isExtracting) {
            // Pindah ke bagian berikutnya.
            Section nextSection = (Section) currNode.getAncestor(NodeType.SECTION).getNextSibling();
            currNode = nextSection.getBody().getFirstChild();
        } else {
            // Pindah ke node berikutnya di badan.
            currNode = currNode.getNextSibling();
        }
    }

    // Untuk kompatibilitas dengan mode dengan bookmark sebaris, tambahkan paragraf berikutnya (kosong).
    if (isInclusive && originalEndNode == endNode && !originalEndNode.isComposite())
        includeNextParagraph(endNode, nodes);

    // Kembalikan node di antara penanda node.
    return nodes;
}

Metode ini memungkinkan Anda mengekstrak konten antara dua node tertentu, baik itu paragraf, tabel, atau elemen tingkat blok lainnya. Ini menangani berbagai skenario, termasuk penanda sebaris, bidang, dan bookmark.

Metode Pembantu 3: Menghasilkan Dokumen Baru

public static Document generateDocument(Document srcDoc, ArrayList<Node> nodes) throws Exception {
    Document dstDoc = new Document();
    
    // Hapus paragraf pertama dari dokumen kosong.
    dstDoc.getFirstSection().getBody().removeAllChildren();
    
    // Impor setiap node dari daftar ke dalam dokumen baru. Pertahankan format asli node.
    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;
}

Metode ini memungkinkan Anda membuat dokumen baru dengan mengimpor daftar node dari dokumen sumber. Ini mempertahankan format asli dari node, sehingga berguna untuk membuat dokumen baru dengan konten tertentu.

Kesimpulan

Mengekstrak konten dari dokumen Word dapat menjadi bagian penting dari banyak tugas pemrosesan dokumen. Aspose.Words untuk Java menyediakan metode pembantu yang kuat yang menyederhanakan proses ini. Baik Anda perlu mengekstrak paragraf berdasarkan gaya, konten antar node, atau membuat dokumen baru, metode ini akan membantu Anda bekerja secara efisien dengan dokumen Word di aplikasi Java Anda.

FAQ

Bagaimana cara menginstal Aspose.Words untuk Java?

Untuk menginstal Aspose.Words for Java, Anda dapat mendownloadnya dari website Aspose. MengunjungiDi Sini untuk mendapatkan versi terbaru.

Bisakah saya mengekstrak konten dari bagian tertentu di dokumen Word?

Ya, Anda bisa mengekstrak konten dari bagian tertentu dokumen Word menggunakan metode yang disebutkan dalam artikel ini. Cukup tentukan node awal dan akhir yang menentukan bagian yang ingin Anda ekstrak.

Apakah Aspose.Words untuk Java kompatibel dengan Java 11?

Ya, Aspose.Words for Java kompatibel dengan Java 11 dan versi yang lebih tinggi. Anda dapat menggunakannya di aplikasi Java Anda tanpa masalah apa pun.

Bisakah saya menyesuaikan format konten yang diekstraksi?

Ya, Anda dapat menyesuaikan format konten yang diekstraksi dengan memodifikasi node yang diimpor dalam dokumen yang dihasilkan. Aspose.Words untuk Java menyediakan opsi pemformatan ekstensif untuk memenuhi kebutuhan Anda.

Di mana saya dapat menemukan lebih banyak dokumentasi dan contoh untuk Aspose.Words untuk Java?

Anda dapat menemukan dokumentasi dan contoh komprehensif untuk Aspose.Words untuk Java di situs web Aspose. Mengunjungihttps://reference.aspose.com/words/java/ untuk dokumentasi dan sumber daya terperinci.