Java용 Aspose.Words에서 콘텐츠 추출을 위한 도우미 메서드

Aspose.Words for Java에서 콘텐츠 추출을 위한 도우미 메서드 소개

Aspose.Words for Java는 개발자가 Word 문서를 프로그래밍 방식으로 작업할 수 있도록 하는 강력한 라이브러리입니다. Word 문서로 작업할 때 일반적인 작업 중 하나는 문서에서 콘텐츠를 추출하는 것입니다. 이 글에서는 Aspose.Words for Java를 사용하여 효율적으로 콘텐츠를 추출하기 위한 몇 가지 도우미 메서드를 살펴보겠습니다.

필수 조건

코드 예제를 살펴보기 전에 Aspose.Words for 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 노드 뒤에 있는 Comment 노드로 전달합니다.
    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) {
            // 각 마커를 개별적으로 처리해야 하므로 대신 별도의 메서드에 전달하세요.
            // 노드 인덱스를 유지하려면 End를 먼저 처리해야 합니다.
            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);

        // 다음 노드로 이동하여 추출합니다. 다음 노드가 null인 경우,
        // 나머지 내용은 다른 섹션에서 찾아볼 수 있습니다.
        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 for Java는 이 프로세스를 단순화하는 강력한 도우미 메서드를 제공합니다. 스타일별로 문단을 추출하거나, 노드 간에 콘텐츠를 추출하거나, 새 문서를 생성해야 하는 경우 이러한 메서드는 Java 애플리케이션에서 Word 문서를 효율적으로 작업하는 데 도움이 됩니다.

자주 묻는 질문

Java용 Aspose.Words를 어떻게 설치하나요?

Aspose.Words for Java를 설치하려면 Aspose 웹사이트에서 다운로드할 수 있습니다. 방문여기 최신 버전을 받으세요.

Word 문서의 특정 섹션에서 콘텐츠를 추출할 수 있나요?

네, 이 문서에서 언급한 방법을 사용하여 Word 문서의 특정 섹션에서 콘텐츠를 추출할 수 있습니다. 추출하려는 섹션을 정의하는 시작 및 종료 노드를 지정하기만 하면 됩니다.

Java용 Aspose.Words는 Java 11과 호환됩니까?

네, Aspose.Words for Java는 Java 11 이상 버전과 호환됩니다. Java 애플리케이션에서 아무 문제 없이 사용할 수 있습니다.

추출된 콘텐츠의 형식을 사용자 정의할 수 있나요?

네, 생성된 문서에서 가져온 노드를 수정하여 추출된 콘텐츠의 서식을 사용자 정의할 수 있습니다. Aspose.Words for Java는 사용자의 요구 사항을 충족하는 광범위한 서식 옵션을 제공합니다.

Aspose.Words for Java에 대한 추가 문서와 예제는 어디에서 찾을 수 있나요?

Aspose.Words for Java에 대한 포괄적인 문서와 예제는 Aspose 웹사이트에서 찾을 수 있습니다. 방문https://reference.aspose.com/words/java/ 자세한 문서 및 리소스를 확인하세요.