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/ 자세한 문서 및 리소스를 확인하세요.