Java를 사용하여 프레젠테이션에서 SmartArt 도형 노드 관리

개요

PowerPoint 프레젠테이션의 SmartArt 그래픽은 텍스트를 포함하고 다이어그램 구조를 정의하는 노드로 구성됩니다. Aspose.Slides를 사용하면 이러한 SmartArt 노드를 프로그래밍 방식으로 작업할 수 있습니다: 새로운 노드와 자식 노드 추가, 특정 위치에 자식 노드 삽입, 기존 노드 접근, 텍스트, 레벨 및 위치 읽기.

이 문서에서는 SmartArt 도형 노드를 관리하는 방법을 설명합니다. 노드 제거, 인덱스 또는 위치를 통한 자식 노드 작업, 어시스턴트 노드를 일반 노드로 변경, SmartArt 노드 도형의 위치, 크기 및 회전 조정, 노드 채우기 형식 설정, SmartArt 자식 노드의 썸네일 이미지 생성 방법을 보여줍니다.

SmartArt 노드 추가

Aspose.Slides for Java는 SmartArt 도형을 가장 쉽게 관리할 수 있는 API를 제공합니다. 아래 샘플 코드는 SmartArt 도형 내부에 노드와 자식 노드를 추가하는 방법을 보여줍니다.

  1. SmartArt 도형이 포함된 프레젠테이션을 로드하기 위해 Presentation 클래스의 인스턴스를 생성합니다.
  2. 인덱스를 사용하여 첫 번째 슬라이드의 참조를 가져옵니다.
  3. 첫 번째 슬라이드 안의 모든 도형을 순회합니다.
  4. 도형이 SmartArt 유형인지 확인하고, SmartArt인 경우 선택된 도형을 SmartArt으로 형변환합니다.
  5. SmartArt 도형의 NodeCollection 에서 새 노드 추가를 수행하고 TextFrame에 텍스트를 설정합니다.
  6. 이제, 새로 추가된 SmartArt 노드에 Child NodeAdd 하고 TextFrame에 텍스트를 설정합니다.
  7. 프레젠테이션을 저장합니다.
// 원하는 프레젠테이션을 로드합니다
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 도형의 해당 노드에 속하는 자식 노드를 특정 위치에 추가하는 방법을 설명합니다.

  1. Presentation 클래스의 인스턴스를 생성합니다.
  2. 인덱스를 사용하여 첫 번째 슬라이드의 참조를 가져옵니다.
  3. 접근된 슬라이드에 StackedList 유형 SmartArt 도형을 추가합니다.
  4. 추가된 SmartArt 도형에서 첫 번째 노드에 접근합니다.
  5. 선택된 Node 에 대해 위치 2에서 Child Node를 추가하고 텍스트를 설정합니다.
  6. 프레젠테이션을 저장합니다.
// 프레젠테이션 인스턴스를 생성합니다
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 도형을 추가할 때만 설정된다는 점에 유의하세요.

  1. SmartArt 도형이 포함된 프레젠테이션을 로드하기 위해 Presentation 클래스의 인스턴스를 생성합니다.
  2. 인덱스를 사용하여 첫 번째 슬라이드의 참조를 가져옵니다.
  3. 첫 번째 슬라이드 안의 모든 도형을 순회합니다.
  4. 도형이 SmartArt 유형인지 확인하고, SmartArt인 경우 선택된 도형을 SmartArt으로 형변환합니다.
  5. SmartArt 도형 내부의 모든 Nodes를 순회합니다.
  6. 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 도형의 해당 노드에 속하는 자식 노드에 접근하는 방법을 보여줍니다.

  1. SmartArt 도형이 포함된 프레젠테이션을 로드하기 위해 Presentation 클래스의 인스턴스를 생성합니다.
  2. 인덱스를 사용하여 첫 번째 슬라이드의 참조를 가져옵니다.
  3. 첫 번째 슬라이드 안의 모든 도형을 순회합니다.
  4. 도형이 SmartArt 유형인지 확인하고, SmartArt인 경우 선택된 도형을 SmartArt으로 형변환합니다.
  5. SmartArt 도형 내부의 모든 Nodes를 순회합니다.
  6. 선택된 SmartArt 도형 Node 에 대해 해당 노드 내부의 모든 Child Nodes를 순회합니다.
  7. 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 도형의 해당 노드에 속하는 특정 위치에 있는 자식 노드에 접근하는 방법을 배웁니다.

  1. Presentation 클래스의 인스턴스를 생성합니다.
  2. 인덱스를 사용하여 두 번째 슬라이드의 참조를 가져옵니다.
  3. StackedList 유형 SmartArt 도형을 추가합니다.
  4. 추가된 SmartArt 도형에 접근합니다.
  5. 접근된 SmartArt 도형에서 인덱스 0에 해당하는 노드에 접근합니다.
  6. 이제 get_Item() 메서드를 사용하여 해당 SmartArt 노드의 위치 1에 있는 Child Node에 접근합니다.
  7. 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 도형 내부의 노드를 제거하는 방법을 배웁니다.

  1. SmartArt 도형이 포함된 프레젠테이션을 로드하기 위해 Presentation 클래스의 인스턴스를 생성합니다.
  2. 인덱스를 사용하여 첫 번째 슬라이드의 참조를 가져옵니다.
  3. 첫 번째 슬라이드 안의 모든 도형을 순회합니다.
  4. 도형이 SmartArt 유형인지 확인하고, SmartArt인 경우 선택된 도형을 SmartArt으로 형변환합니다.
  5. 해당 SmartArt 에 0개 이상의 노드가 있는지 확인합니다.
  6. 삭제할 SmartArt 노드를 선택합니다.
  7. 이제 RemoveNode 메서드를 사용하여 선택한 노드를 제거합니다.
  8. 프레젠테이션을 저장합니다.
// 원하는 프레젠테이션을 로드합니다
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 도형 내부의 노드를 제거하는 방법을 배웁니다.

  1. SmartArt 도형이 포함된 프레젠테이션을 로드하기 위해 Presentation 클래스의 인스턴스를 생성합니다.
  2. 인덱스를 사용하여 첫 번째 슬라이드의 참조를 가져옵니다.
  3. 첫 번째 슬라이드 안의 모든 도형을 순회합니다.
  4. 도형이 SmartArt 유형인지 확인하고, SmartArt인 경우 선택된 도형을 SmartArt으로 형변환합니다.
  5. 인덱스 0에 해당하는 SmartArt 도형 노드를 선택합니다.
  6. 이제 선택된 SmartArt 노드에 2개 이상의 자식 노드가 있는지 확인합니다.
  7. RemoveNode 메서드를 사용하여 Position 1에 있는 노드를 제거합니다.
  8. 프레젠테이션을 저장합니다.
// 원하는 프레젠테이션을 로드합니다
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는 SmartArtShapeXY 속성 설정을 지원합니다. 아래 코드 조각은 사용자 지정 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 도형은 다음과 같습니다.

todo:image_alt_text
그림: 슬라이드의 원본 SmartArt 도형

다음 샘플 코드는 SmartArt 노드 컬렉션에서 Assistant Nodes를 식별하고 변경하는 방법을 조사합니다.

  1. SmartArt 도형이 포함된 프레젠테이션을 로드하기 위해 Presentation 클래스의 인스턴스를 생성합니다.
  2. 인덱스를 사용하여 두 번째 슬라이드의 참조를 가져옵니다.
  3. 첫 번째 슬라이드 안의 모든 도형을 순회합니다.
  4. 도형이 SmartArt 유형인지 확인하고, SmartArt인 경우 선택된 도형을 SmartArt으로 형변환합니다.
  5. SmartArt 도형 내부의 모든 노드를 순회하며 Assistant Nodes인지 확인합니다.
  6. Assistant Node의 상태를 일반 노드로 변경합니다.
  7. 프레젠테이션을 저장합니다.
// 프레젠테이션 인스턴스를 생성합니다
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();
}
todo:image_alt_text
그림: 슬라이드 내 SmartArt 도형에서 변경된 Assistant Nodes

노드의 채우기 형식 설정

Aspose.Slides for Java를 사용하면 사용자 지정 SmartArt 도형을 추가하고 채우기 형식을 설정할 수 있습니다. 이 문서에서는 SmartArt 도형을 만들고 접근하여 채우기 형식을 설정하는 방법을 설명합니다.

다음 단계를 따르세요:

  1. Presentation 클래스의 인스턴스를 생성합니다.
  2. 인덱스를 사용하여 슬라이드의 참조를 가져옵니다.
  3. LayoutType 을 설정하여 SmartArt 도형을 추가합니다.
  4. SmartArt 도형 노드에 대한 FillFormat 을 설정합니다.
  5. 수정된 프레젠테이션을 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 자식 노드의 썸네일을 생성할 수 있습니다:

  1. Presentation 클래스의 인스턴스를 생성합니다.
  2. SmartArt 추가 합니다.
  3. 인덱스를 사용하여 노드의 참조를 가져옵니다.
  4. 썸네일 이미지를 가져옵니다.
  5. 원하는 이미지 형식으로 썸네일을 저장합니다.
// 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 로 렌더링할 수 있어 썸네일, 보고서 또는 웹 용도로 적합합니다.