Aspose.Words for Java에서 콘텐츠를 추출하기 위한 도우미 메서드

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

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

전제조건

코드 예제를 살펴보기 전에 Java 프로젝트에 Aspose.Words for 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 문서를 효율적으로 작업할 수 있습니다.

FAQ

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

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

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

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

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

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

추출된 콘텐츠의 형식을 맞춤설정할 수 있나요?

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

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

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