Java를 사용하여 프레젠테이션에서 SmartArt 도형 노드 관리
개요
PowerPoint 프레젠테이션의 SmartArt 그래픽은 텍스트를 포함하고 다이어그램 구조를 정의하는 노드로 구성됩니다. Aspose.Slides를 사용하면 이러한 SmartArt 노드를 프로그래밍 방식으로 작업할 수 있습니다: 새로운 노드와 자식 노드 추가, 특정 위치에 자식 노드 삽입, 기존 노드 접근, 텍스트, 레벨 및 위치 읽기.
이 문서에서는 SmartArt 도형 노드를 관리하는 방법을 설명합니다. 노드 제거, 인덱스 또는 위치를 통한 자식 노드 작업, 어시스턴트 노드를 일반 노드로 변경, SmartArt 노드 도형의 위치, 크기 및 회전 조정, 노드 채우기 형식 설정, SmartArt 자식 노드의 썸네일 이미지 생성 방법을 보여줍니다.
SmartArt 노드 추가
Aspose.Slides for Java는 SmartArt 도형을 가장 쉽게 관리할 수 있는 API를 제공합니다. 아래 샘플 코드는 SmartArt 도형 내부에 노드와 자식 노드를 추가하는 방법을 보여줍니다.
- SmartArt 도형이 포함된 프레젠테이션을 로드하기 위해 Presentation 클래스의 인스턴스를 생성합니다.
- 인덱스를 사용하여 첫 번째 슬라이드의 참조를 가져옵니다.
- 첫 번째 슬라이드 안의 모든 도형을 순회합니다.
- 도형이 SmartArt 유형인지 확인하고, SmartArt인 경우 선택된 도형을 SmartArt으로 형변환합니다.
- SmartArt 도형의 NodeCollection 에서 새 노드 추가를 수행하고 TextFrame에 텍스트를 설정합니다.
- 이제, 새로 추가된 SmartArt 노드에 Child Node를 Add 하고 TextFrame에 텍스트를 설정합니다.
- 프레젠테이션을 저장합니다.
// 원하는 프레젠테이션을 로드합니다
Presentation pres = new Presentation("SimpleSmartArt.pptx");
try {
// 첫 번째 슬라이드 내부의 모든 도형을 순회합니다
for (IShape shape : pres.getSlides().get_Item(0).getShapes())
{
// 도형이 SmartArt 유형인지 확인합니다
if (shape instanceof SmartArt)
{
// 도형을 SmartArt로 형변환합니다
SmartArt smart = (SmartArt) shape;
// 새 SmartArt 노드를 추가합니다
SmartArtNode TemNode = (SmartArtNode) smart.getAllNodes().addNode();
// 텍스트를 추가합니다
TemNode.getTextFrame().setText("Test");
// 부모 노드에 새로운 자식 노드를 추가합니다. 컬렉션 끝에 추가됩니다
SmartArtNode newNode = (SmartArtNode) TemNode.getChildNodes().addNode();
// 텍스트를 추가합니다
newNode.getTextFrame().setText("New Node Added");
}
}
// 프레젠테이션을 저장합니다
pres.save("AddSmartArtNode.pptx", SaveFormat.Pptx);
} finally {
if (pres != null) pres.dispose();
}
특정 위치에 SmartArt 노드 추가
다음 샘플 코드는 SmartArt 도형의 해당 노드에 속하는 자식 노드를 특정 위치에 추가하는 방법을 설명합니다.
- Presentation 클래스의 인스턴스를 생성합니다.
- 인덱스를 사용하여 첫 번째 슬라이드의 참조를 가져옵니다.
- 접근된 슬라이드에 StackedList 유형 SmartArt 도형을 추가합니다.
- 추가된 SmartArt 도형에서 첫 번째 노드에 접근합니다.
- 선택된 Node 에 대해 위치 2에서 Child Node를 추가하고 텍스트를 설정합니다.
- 프레젠테이션을 저장합니다.
// 프레젠테이션 인스턴스를 생성합니다
Presentation pres = new Presentation();
try {
// 프레젠테이션 슬라이드에 접근합니다
ISlide slide = pres.getSlides().get_Item(0);
// Smart Art IShape 추가
ISmartArt smart = slide.getShapes().addSmartArt(0, 0, 400, 400, SmartArtLayoutType.StackedList);
// 인덱스 0에 있는 SmartArt 노드에 접근합니다
ISmartArtNode node = smart.getAllNodes().get_Item(0);
// 부모 노드에서 위치 2에 새 자식 노드 추가
SmartArtNode chNode = (SmartArtNode) ((SmartArtNodeCollection) node.getChildNodes()).addNodeByPosition(2);
// 텍스트 추가
chNode.getTextFrame().setText("Sample Text Added");
// 프레젠테이션 저장
pres.save("AddSmartArtNodeByPosition.pptx", SaveFormat.Pptx);
} finally {
if (pres != null) pres.dispose();
}
SmartArt 노드 접근
다음 샘플 코드는 SmartArt 도형 내부의 노드에 접근하는 방법을 보여줍니다. SmartArt의 LayoutType은 읽기 전용이며 SmartArt 도형을 추가할 때만 설정된다는 점에 유의하세요.
- SmartArt 도형이 포함된 프레젠테이션을 로드하기 위해 Presentation 클래스의 인스턴스를 생성합니다.
- 인덱스를 사용하여 첫 번째 슬라이드의 참조를 가져옵니다.
- 첫 번째 슬라이드 안의 모든 도형을 순회합니다.
- 도형이 SmartArt 유형인지 확인하고, SmartArt인 경우 선택된 도형을 SmartArt으로 형변환합니다.
- SmartArt 도형 내부의 모든 Nodes를 순회합니다.
- SmartArt 노드의 위치, 레벨 및 텍스트와 같은 정보를 접근하고 표시합니다.
// Presentation 클래스를 인스턴스화합니다
Presentation pres = new Presentation("SmartArtShape.pptx");
try {
// 첫 번째 슬라이드를 가져옵니다
ISlide slide = pres.getSlides().get_Item(0);
// 첫 번째 슬라이드 내부의 모든 도형을 순회합니다
for (IShape shape : slide.getShapes())
{
// 도형이 SmartArt 유형인지 확인합니다
if (shape instanceof ISmartArt)
{
// 도형을 SmartArt로 형변환합니다
ISmartArt smart = (ISmartArt) shape;
// SmartArt 내부의 모든 노드를 순회합니다
for (int i = 0; i < smart.getAllNodes().size(); i++)
{
// 인덱스 i에 있는 SmartArt 노드에 접근합니다
SmartArtNode node = (SmartArtNode) smart.getAllNodes().get_Item(i);
// SmartArt 노드 매개변수를 출력합니다
System.out.print(node.getTextFrame().getText() + " " + node.getLevel() + " " + node.getPosition());
}
}
}
} finally {
if (pres != null) pres.dispose();
}
SmartArt 자식 노드 접근
다음 샘플 코드는 SmartArt 도형의 해당 노드에 속하는 자식 노드에 접근하는 방법을 보여줍니다.
- SmartArt 도형이 포함된 프레젠테이션을 로드하기 위해 Presentation 클래스의 인스턴스를 생성합니다.
- 인덱스를 사용하여 첫 번째 슬라이드의 참조를 가져옵니다.
- 첫 번째 슬라이드 안의 모든 도형을 순회합니다.
- 도형이 SmartArt 유형인지 확인하고, SmartArt인 경우 선택된 도형을 SmartArt으로 형변환합니다.
- SmartArt 도형 내부의 모든 Nodes를 순회합니다.
- 선택된 SmartArt 도형 Node 에 대해 해당 노드 내부의 모든 Child Nodes를 순회합니다.
- Child Node의 위치, 레벨 및 텍스트와 같은 정보를 접근하고 표시합니다.
// Presentation 클래스를 인스턴스화합니다
Presentation pres = new Presentation("AccessChildNodes.pptx");
try {
// 첫 번째 슬라이드를 가져옵니다
ISlide slide = pres.getSlides().get_Item(0);
// 첫 번째 슬라이드 내부의 모든 도형을 순회합니다
for (IShape shape : slide.getShapes())
{
// 도형이 SmartArt 유형인지 확인합니다
if (shape instanceof ISmartArt)
{
// 도형을 SmartArt로 형변환합니다
ISmartArt smart = (ISmartArt) shape;
// SmartArt 내부의 모든 노드를 순회합니다
for (int i = 0; i < smart.getAllNodes().size(); i++)
{
// 인덱스 i에 있는 SmartArt 노드에 접근합니다
SmartArtNode node0 = (SmartArtNode) smart.getAllNodes().get_Item(i);
// 인덱스 i에 있는 SmartArt 노드의 자식 노드를 순회합니다
for (int j = 0; j < node0.getChildNodes().size(); j++)
{
// SmartArt 노드의 자식 노드에 접근합니다
SmartArtNode node = (SmartArtNode) node0.getChildNodes().get_Item(j);
// SmartArt 자식 노드 매개변수를 출력합니다
System.out.print("j = " + j + ", Text = " + node.getTextFrame().getText() + ", Level = " + node.getLevel() + ", Position = " + node.getPosition());
}
}
}
}
} finally {
if (pres != null) pres.dispose();
}
특정 위치에 SmartArt 자식 노드 접근
이 예제에서는 SmartArt 도형의 해당 노드에 속하는 특정 위치에 있는 자식 노드에 접근하는 방법을 배웁니다.
- Presentation 클래스의 인스턴스를 생성합니다.
- 인덱스를 사용하여 두 번째 슬라이드의 참조를 가져옵니다.
- StackedList 유형 SmartArt 도형을 추가합니다.
- 추가된 SmartArt 도형에 접근합니다.
- 접근된 SmartArt 도형에서 인덱스 0에 해당하는 노드에 접근합니다.
- 이제 get_Item() 메서드를 사용하여 해당 SmartArt 노드의 위치 1에 있는 Child Node에 접근합니다.
- Child Node의 위치, 레벨 및 텍스트와 같은 정보를 접근하고 표시합니다.
// 프레젠테이션을 인스턴스화합니다
Presentation pres = new Presentation();
try {
// 첫 번째 슬라이드에 접근합니다
ISlide slide = pres.getSlides().get_Item(0);
// 첫 번째 슬라이드에 SmartArt 도형을 추가합니다
ISmartArt smart = slide.getShapes().addSmartArt(0, 0, 400, 400, SmartArtLayoutType.StackedList);
// 인덱스 0에 있는 SmartArt 노드에 접근합니다
ISmartArtNode node = smart.getAllNodes().get_Item(0);
// 부모 노드에서 위치 1에 있는 자식 노드에 접근합니다
int position = 1;
SmartArtNode chNode = (SmartArtNode) ((SmartArtNodeCollection) node.getChildNodes()).get_Item(position);
// SmartArt 자식 노드 매개변수를 출력합니다
System.out.print("Text = " + chNode.getTextFrame().getText() + ", Level = " + chNode.getLevel() + ", Position = " + chNode.getPosition());
} finally {
if (pres != null) pres.dispose();
}
SmartArt 노드 제거
이 예제에서는 SmartArt 도형 내부의 노드를 제거하는 방법을 배웁니다.
- SmartArt 도형이 포함된 프레젠테이션을 로드하기 위해 Presentation 클래스의 인스턴스를 생성합니다.
- 인덱스를 사용하여 첫 번째 슬라이드의 참조를 가져옵니다.
- 첫 번째 슬라이드 안의 모든 도형을 순회합니다.
- 도형이 SmartArt 유형인지 확인하고, SmartArt인 경우 선택된 도형을 SmartArt으로 형변환합니다.
- 해당 SmartArt 에 0개 이상의 노드가 있는지 확인합니다.
- 삭제할 SmartArt 노드를 선택합니다.
- 이제 RemoveNode 메서드를 사용하여 선택한 노드를 제거합니다.
- 프레젠테이션을 저장합니다.
// 원하는 프레젠테이션을 로드합니다
Presentation pres = new Presentation("AddSmartArtNode.pptx");
try {
// 첫 번째 슬라이드 내부의 모든 도형을 순회합니다
for (IShape shape : pres.getSlides().get_Item(0).getShapes())
{
// 도형이 SmartArt 유형인지 확인합니다
if (shape instanceof ISmartArt)
{
// 도형을 SmartArt로 형변환합니다
ISmartArt smart = (ISmartArt) shape;
if (smart.getAllNodes().size() > 0)
{
// 인덱스 0에 있는 SmartArt 노드에 접근합니다
ISmartArtNode node = smart.getAllNodes().get_Item(0);
// 선택한 노드를 제거합니다
smart.getAllNodes().removeNode(node);
}
}
}
// 프레젠테이션을 저장합니다
pres.save("RemoveSmartArtNode.pptx", SaveFormat.Pptx);
} finally {
if (pres != null) pres.dispose();
}
특정 위치에 SmartArt 노드 제거
이 예제에서는 특정 위치에 있는 SmartArt 도형 내부의 노드를 제거하는 방법을 배웁니다.
- SmartArt 도형이 포함된 프레젠테이션을 로드하기 위해 Presentation 클래스의 인스턴스를 생성합니다.
- 인덱스를 사용하여 첫 번째 슬라이드의 참조를 가져옵니다.
- 첫 번째 슬라이드 안의 모든 도형을 순회합니다.
- 도형이 SmartArt 유형인지 확인하고, SmartArt인 경우 선택된 도형을 SmartArt으로 형변환합니다.
- 인덱스 0에 해당하는 SmartArt 도형 노드를 선택합니다.
- 이제 선택된 SmartArt 노드에 2개 이상의 자식 노드가 있는지 확인합니다.
- RemoveNode 메서드를 사용하여 Position 1에 있는 노드를 제거합니다.
- 프레젠테이션을 저장합니다.
// 원하는 프레젠테이션을 로드합니다
Presentation pres = new Presentation("AddSmartArtNode.pptx");
try {
// 첫 번째 슬라이드 내부의 모든 도형을 순회합니다
for (IShape shape : pres.getSlides().get_Item(0).getShapes())
{
// 도형이 SmartArt 유형인지 확인합니다
if (shape instanceof SmartArt)
{
// 도형을 SmartArt로 형변환합니다
SmartArt smart = (SmartArt) shape;
if (smart.getAllNodes().size() > 0)
{
// 인덱스 0에 있는 SmartArt 노드에 접근합니다
ISmartArtNode node = smart.getAllNodes().get_Item(0);
if (node.getChildNodes().size() >= 2)
{
// 위치 1에 있는 자식 노드를 제거합니다
(node.getChildNodes()).removeNode(1);
}
}
}
}
// 프레젠테이션을 저장합니다
pres.save("RemoveSmartArtNodeByPosition.pptx", SaveFormat.Pptx);
} finally {
if (pres != null) pres.dispose();
}
SmartArt 객체에서 자식 노드의 사용자 지정 위치 설정
이제 Aspose.Slides for Java는 SmartArtShape 의 X 및 Y 속성 설정을 지원합니다. 아래 코드 조각은 사용자 지정 SmartArtShape 위치, 크기 및 회전을 설정하는 방법을 보여줍니다. 또한 새 노드를 추가하면 모든 노드의 위치와 크기가 재계산된다는 점에 유의하세요. 사용자 지정 위치 설정을 통해 필요에 따라 노드를 배치할 수 있습니다.
// Presentation 클래스를 인스턴스화합니다
Presentation pres = new Presentation("SimpleSmartArt.pptx");
try{
ISmartArt smart = pres.getSlides().get_Item(0).getShapes().addSmartArt(20, 20, 600, 500, SmartArtLayoutType.OrganizationChart);
// SmartArt 도형을 새 위치로 이동합니다
ISmartArtNode node = smart.getAllNodes().get_Item(1);
ISmartArtShape shape = node.getShapes().get_Item(1);
shape.setX(shape.getX() + shape.getWidth() * 2);
shape.setY(shape.getY() - shape.getHeight() * 2);
// SmartArt 도형의 너비를 변경합니다
node = smart.getAllNodes().get_Item(2);
shape = node.getShapes().get_Item(1);
shape.setWidth(shape.getWidth() + shape.getWidth() * 2);
// SmartArt 도형의 높이를 변경합니다
node = smart.getAllNodes().get_Item(3);
shape = node.getShapes().get_Item(1);
shape.setHeight(shape.getHeight() + shape.getHeight() * 2);
// SmartArt 도형의 회전을 변경합니다
node = smart.getAllNodes().get_Item(4);
shape = node.getShapes().get_Item(1);
shape.setRotation(90);
pres.save("SmartArt.pptx", SaveFormat.Pptx);
}finally {
pres.dispose();
}
어시스턴트 노드 확인
다음 섹션에서 조사에 사용할 기본 SmartArt 도형은 다음과 같습니다.
![]() |
|---|
| 그림: 슬라이드의 원본 SmartArt 도형 |
다음 샘플 코드는 SmartArt 노드 컬렉션에서 Assistant Nodes를 식별하고 변경하는 방법을 조사합니다.
- SmartArt 도형이 포함된 프레젠테이션을 로드하기 위해 Presentation 클래스의 인스턴스를 생성합니다.
- 인덱스를 사용하여 두 번째 슬라이드의 참조를 가져옵니다.
- 첫 번째 슬라이드 안의 모든 도형을 순회합니다.
- 도형이 SmartArt 유형인지 확인하고, SmartArt인 경우 선택된 도형을 SmartArt으로 형변환합니다.
- SmartArt 도형 내부의 모든 노드를 순회하며 Assistant Nodes인지 확인합니다.
- Assistant Node의 상태를 일반 노드로 변경합니다.
- 프레젠테이션을 저장합니다.
// 프레젠테이션 인스턴스를 생성합니다
Presentation pres = new Presentation("AddNodes.pptx");
try {
// 첫 번째 슬라이드 내부의 모든 도형을 순회합니다
for (IShape shape : pres.getSlides().get_Item(0).getShapes())
{
// 도형이 SmartArt 유형인지 확인합니다
if (shape instanceof ISmartArt)
{
// 도형을 SmartArt로 형변환합니다
ISmartArt smart = (SmartArt) shape;
// SmartArt 도형의 모든 노드를 순회합니다
for (int i = 0; i < smart.getAllNodes().size(); i++)
{
ISmartArtNode node = smart.getAllNodes().get_Item(i);
// 노드가 Assistant 노드인지 확인합니다
if (node.isAssistant())
{
// Assistant 노드를 false 로 설정하고 일반 노드로 변경합니다
node.isAssistant();
}
}
}
}
// 프레젠테이션을 저장합니다
pres.save("ChangeAssitantNode.pptx", SaveFormat.Pptx);
} finally {
if (pres != null) pres.dispose();
}
![]() |
|---|
| 그림: 슬라이드 내 SmartArt 도형에서 변경된 Assistant Nodes |
노드의 채우기 형식 설정
Aspose.Slides for Java를 사용하면 사용자 지정 SmartArt 도형을 추가하고 채우기 형식을 설정할 수 있습니다. 이 문서에서는 SmartArt 도형을 만들고 접근하여 채우기 형식을 설정하는 방법을 설명합니다.
다음 단계를 따르세요:
- Presentation 클래스의 인스턴스를 생성합니다.
- 인덱스를 사용하여 슬라이드의 참조를 가져옵니다.
- LayoutType 을 설정하여 SmartArt 도형을 추가합니다.
- SmartArt 도형 노드에 대한 FillFormat 을 설정합니다.
- 수정된 프레젠테이션을 PPTX 파일로 저장합니다.
// 프레젠테이션을 인스턴스화합니다
Presentation pres = new Presentation();
try {
// 슬라이드에 접근합니다
ISlide slide = pres.getSlides().get_Item(0);
// SmartArt 도형과 노드를 추가합니다
ISmartArt chevron = slide.getShapes().addSmartArt(10, 10, 800, 60, SmartArtLayoutType.ClosedChevronProcess);
ISmartArtNode node = chevron.getAllNodes().addNode();
node.getTextFrame().setText("Some text");
// 노드 채우기 색상을 설정합니다
for (IShape item : node.getShapes())
{
item.getFillFormat().setFillType(FillType.Solid);
item.getFillFormat().getSolidFillColor().setColor(Color.RED);
}
// 프레젠테이션을 저장합니다
pres.save("TestSmart.pptx", SaveFormat.Pptx);
} finally {
if (pres != null) pres.dispose();
}
SmartArt 자식 노드의 썸네일 생성
개발자는 아래 단계에 따라 SmartArt 자식 노드의 썸네일을 생성할 수 있습니다:
- Presentation 클래스의 인스턴스를 생성합니다.
- SmartArt 추가 합니다.
- 인덱스를 사용하여 노드의 참조를 가져옵니다.
- 썸네일 이미지를 가져옵니다.
- 원하는 이미지 형식으로 썸네일을 저장합니다.
// PPTX 파일을 나타내는 Presentation 클래스를 인스턴스화합니다
Presentation pres = new Presentation();
try {
// SmartArt를 추가합니다
ISmartArt smart = pres.getSlides().get_Item(0).getShapes().addSmartArt(10, 10, 400, 300, SmartArtLayoutType.BasicCycle);
// 인덱스를 사용하여 노드의 참조를 가져옵니다
ISmartArtNode node = smart.getNodes().get_Item(1);
// 썸네일을 가져옵니다
IImage slideImage = node.getShapes().get_Item(0).getImage();
// 썸네일을 저장합니다
try {
slideImage.save("SmartArt_ChildNote_Thumbnail.png", ImageFormat.Png);
} finally {
if (slideImage != null) slideImage.dispose();
}
} finally {
if (pres != null) pres.dispose();
}
FAQ
SmartArt 애니메이션이 지원되나요?
예. SmartArt는 일반 도형으로 처리되므로 표준 애니메이션 (입장, 퇴장, 강조, 움직임 경로)을 적용하고 타이밍을 조정할 수 있습니다. 필요에 따라 SmartArt 노드 내부의 도형에도 애니메이션을 적용할 수 있습니다.
슬라이드에서 내부 ID를 모를 경우 특정 SmartArt를 어떻게 신뢰성 있게 찾을 수 있나요?
대체 텍스트 로 설정하고 검색하세요. SmartArt에 고유한 AltText를 지정하면 내부 식별자에 의존하지 않고 프로그래밍 방식으로 찾을 수 있습니다.
프레젠테이션을 PDF로 변환할 때 SmartArt 모양이 유지되나요?
예. Aspose.Slides는 PDF 내보내기 동안 SmartArt를 높은 시각적 충실도로 렌더링하여 레이아웃, 색상 및 효과를 보존합니다.
전체 SmartArt의 이미지를 추출해 미리보기나 보고서에 사용할 수 있나요?
예. SmartArt 도형을 래스터 형식이나 SVG 로 렌더링할 수 있어 썸네일, 보고서 또는 웹 용도로 적합합니다.

