Python을 사용하여 프레젠테이션에서 SmartArt Shape 노드 관리
개요
PowerPoint 프레젠테이션의 SmartArt 그래픽은 텍스트를 포함하고 다이어그램 구조를 정의하는 노드로 구성됩니다. Aspose.Slides를 사용하면 이러한 SmartArt 노드를 프로그래밍 방식으로 작업할 수 있습니다: 새 노드 및 하위 노드 추가, 특정 위치에 하위 노드 삽입, 기존 노드에 접근, 그리고 텍스트, 레벨 및 위치를 읽을 수 있습니다.
이 문서에서는 SmartArt 모양 노드를 관리하는 방법을 설명합니다. 노드 삭제, 인덱스 또는 위치에 따라 하위 노드 작업, 보조 노드를 일반 노드로 전환, SmartArt 노드 모양의 위치, 크기 및 회전 조정, 노드 채우기 형식 설정, 그리고 SmartArt 하위 노드의 썸네일 이미지 생성 방법을 보여줍니다.
SmartArt 노드 추가
Aspose.Slides for Python via .NET는 SmartArt 모양을 가장 쉽게 관리할 수 있는 가장 단순한 API를 제공합니다. 다음 샘플 코드는 SmartArt 모양 안에 노드와 하위 노드를 추가하는 데 도움이 됩니다.
- Presentation 클래스의 인스턴스를 생성하고 SmartArt 모양이 포함된 프레젠테이션을 로드합니다.
- 인덱스를 사용하여 첫 번째 슬라이드의 참조를 가져옵니다.
- 첫 번째 슬라이드 내의 모든 모양을 순회합니다.
- 모양이 SmartArt 유형인지 확인하고, SmartArt인 경우 선택된 모양을 SmartArt로 형변환합니다.
- SmartArt 모양의 NodeCollection에 새 Node를 추가하고 TextFrame에 텍스트를 설정합니다.
- 이제 새로 추가된 SmartArt Node에 하위 Node를 추가하고 TextFrame에 텍스트를 설정합니다.
- 프레젠테이션을 저장합니다.
import aspose.pydrawing as draw
import aspose.slides as slides
import aspose.slides.smartart as art
# 원하는 프레젠테이션을 로드합니다
with slides.Presentation(path + "AddNodes.pptx") as pres:
# 첫 번째 슬라이드 내 모든 모양을 순회합니다
for shape in pres.slides[0].shapes:
# 모양이 SmartArt 유형인지 확인합니다
if type(shape) is art.SmartArt:
# 새로운 SmartArt 노드 추가
node1 = shape.all_nodes.add_node()
# 텍스트 추가
node1.text_frame.text = "Test"
# 상위 노드에 새로운 하위 노드 추가. 컬렉션 끝에 추가됩니다
new_node = node1.child_nodes.add_node()
# 텍스트 추가
new_node.text_frame.text = "New Node Added"
# 프레젠테이션 저장
pres.save("AddSmartArtNode_out.pptx", slides.export.SaveFormat.PPTX)
특정 위치에 SmartArt 노드 추가
다음 샘플 코드에서는 SmartArt 모양의 해당 노드에 속하는 하위 노드를 특정 위치에 추가하는 방법을 설명합니다.
Presentation클래스의 인스턴스를 생성합니다.- 인덱스를 사용하여 첫 번째 슬라이드의 참조를 가져옵니다.
- 접근한 슬라이드에 StackedList 유형의 SmartArt 모양을 추가합니다.
- 추가된 SmartArt 모양에서 첫 번째 노드에 접근합니다.
- 이제 선택된 노드에 대해 위치 2에 하위 노드를 추가하고 텍스트를 설정합니다.
- 프레젠테이션을 저장합니다.
import aspose.pydrawing as draw
import aspose.slides as slides
import aspose.slides.smartart as art
# 프레젠테이션 인스턴스 생성
with slides.Presentation() as pres:
# 프레젠테이션 슬라이드에 접근
slide = pres.slides[0]
# Smart Art IShape 추가
smart = slide.shapes.add_smart_art(0, 0, 400, 400, art.SmartArtLayoutType.STACKED_LIST)
# 인덱스 0에 있는 SmartArt 노드 접근
node = smart.all_nodes[0]
# 상위 노드에서 위치 2에 새로운 하위 노드 추가
chNode = node.child_nodes.add_node_by_position(2)
# 텍스트 추가
chNode.text_frame.text = "Sample text Added"
# 프레젠테이션 저장
pres.save("AddSmartArtNodeByPosition_out.pptx", slides.export.SaveFormat.PPTX)
SmartArt 노드 접근
다음 샘플 코드는 SmartArt 모양 내부의 노드에 접근하는 데 도움이 됩니다. SmartArt의 LayoutType은 읽기 전용이며 SmartArt 모양을 추가할 때만 설정되므로 변경할 수 없습니다.
Presentation클래스의 인스턴스를 생성하고 SmartArt 모양이 포함된 프레젠테이션을 로드합니다.- 인덱스를 사용하여 첫 번째 슬라이드의 참조를 가져옵니다.
- 첫 번째 슬라이드 내의 모든 모양을 순회합니다.
- 모양이 SmartArt 유형인지 확인하고, SmartArt인 경우 선택된 모양을 SmartArt로 형변환합니다.
- SmartArt 모양 내부의 모든 Node를 순회합니다.
- SmartArt Node의 위치, 레벨 및 텍스트와 같은 정보를 접근하고 표시합니다.
import aspose.pydrawing as draw
import aspose.slides as slides
import aspose.slides.smartart as art
# 원하는 프레젠테이션을 로드합니다
with slides.Presentation(path + "AccessSmartArt.pptx") as pres:
# 첫 번째 슬라이드 내 모든 모양을 순회합니다
for shape in pres.slides[0].shapes:
# 모양이 SmartArt 유형인지 확인합니다
if type(shape) is art.SmartArt:
# SmartArt 내부의 모든 노드를 순회합니다
for i in range(len(shape.all_nodes)):
# 인덱스 i에 있는 SmartArt 노드 접근
node = shape.all_nodes[i]
# SmartArt 노드 매개변수 출력
print("i = {0}, text = {1}, level = {2}, position = {3}".format(i, node.text_frame.text, node.level, node.position))
SmartArt 하위 노드 접근
다음 샘플 코드는 SmartArt 모양의 각 노드에 속하는 하위 노드에 접근하는 데 도움이 됩니다.
- PresentationEx 클래스의 인스턴스를 생성하고 SmartArt 모양이 포함된 프레젠테이션을 로드합니다.
- 인덱스를 사용하여 첫 번째 슬라이드의 참조를 가져옵니다.
- 첫 번째 슬라이드 내의 모든 모양을 순회합니다.
- 모양이 SmartArt 유형인지 확인하고, SmartArt인 경우 선택된 모양을 SmartArtEx로 형변환합니다.
- SmartArt 모양 내부의 모든 Node를 순회합니다.
- 선택된 각 SmartArt 모양 Node에 대해 해당 노드 내부의 모든 하위 Node를 순회합니다.
- 하위 Node의 위치, 레벨 및 텍스트와 같은 정보를 접근하고 표시합니다.
import aspose.pydrawing as draw
import aspose.slides as slides
import aspose.slides.smartart as art
# 원하는 프레젠테이션을 로드합니다
with slides.Presentation(path + "AccessChildNodes.pptx") as pres:
# 첫 번째 슬라이드 내 모든 모양을 순회합니다
for shape in pres.slides[0].shapes:
# 모양이 SmartArt 유형인지 확인합니다
if type(shape) is art.SmartArt:
# SmartArt 내부의 모든 노드를 순회합니다
for node0 in shape.all_nodes:
# 하위 노드를 순회합니다
for j in range(len(node0.child_nodes)):
# SmartArt 노드의 하위 노드에 접근합니다
node = node0.child_nodes[j]
# SmartArt 하위 노드 매개변수를 출력합니다
print("j = {0}, text = {1}, level = {2}, position = {3}".format(j, node.text_frame.text, node.level, node.position))
특정 위치에 SmartArt 하위 노드 접근
이 예제에서는 SmartArt 모양의 각 노드에 속하는 하위 노드를 특정 위치에서 접근하는 방법을 배웁니다.
Presentation클래스의 인스턴스를 생성합니다.- 인덱스를 사용하여 첫 번째 슬라이드의 참조를 가져옵니다.
- StackedList 유형의 SmartArt 모양을 추가합니다.
- 추가된 SmartArt 모양에 접근합니다.
- 접근된 SmartArt 모양에서 인덱스 0에 해당하는 노드에 접근합니다.
- 이제 GetNodeByPosition() 메서드를 사용하여 접근된 SmartArt 노드의 위치 1에 있는 하위 노드에 접근합니다.
- 하위 노드의 위치, 레벨 및 텍스트와 같은 정보를 접근하고 표시합니다.
import aspose.pydrawing as draw
import aspose.slides as slides
import aspose.slides.smartart as art
# 프레젠테이션 인스턴스 생성
with slides.Presentation() as pres:
# 첫 번째 슬라이드에 접근
slide = pres.slides[0]
# 첫 번째 슬라이드에 SmartArt 모양 추가
smart = slide.shapes.add_smart_art(0, 0, 400, 400, art.SmartArtLayoutType.STACKED_LIST)
# 인덱스 0에 있는 SmartArt 노드에 접근
node = smart.all_nodes[0]
# 상위 노드에서 위치 1에 있는 하위 노드에 접근
position = 1
chNode = node.child_nodes[position]
# SmartArt 하위 노드 매개변수 출력
print("j = {0}, text = {1}, level = {2}, position = {3}".format(position, chNode.text_frame.text, chNode.level, chNode.position))
SmartArt 노드 제거
이 예제에서는 SmartArt 모양 내부의 노드를 제거하는 방법을 배웁니다.
Presentation클래스의 인스턴스를 생성하고 SmartArt 모양이 포함된 프레젠테이션을 로드합니다.- 인덱스를 사용하여 첫 번째 슬라이드의 참조를 가져옵니다.
- 첫 번째 슬라이드 내의 모든 모양을 순회합니다.
- 모양이 SmartArt 유형인지 확인하고, SmartArt인 경우 선택된 모양을 SmartArt로 형변환합니다.
- SmartArt에 0개 이상의 노드가 있는지 확인합니다.
- 삭제할 SmartArt 노드를 선택합니다.
- 이제 RemoveNode() 메서드를 사용하여 선택된 노드를 제거하고 프레젠테이션을 저장합니다.
import aspose.pydrawing as draw
import aspose.slides as slides
import aspose.slides.smartart as art
# 원하는 프레젠테이션을 로드합니다
with slides.Presentation(path + "RemoveNode.pptx") as pres:
# 첫 번째 슬라이드 내 모든 모양을 순회합니다
for shape in pres.slides[0].shapes:
# 모양이 SmartArt 유형인지 확인합니다
if type(shape) is art.SmartArt:
# 모양을 SmartArtEx로 형변환합니다
if len(shape.all_nodes) > 0:
# 인덱스 0에 있는 SmartArt 노드에 접근합니다
node = shape.all_nodes[0]
# 선택된 노드 제거
shape.all_nodes.remove_node(node)
# 프레젠테이션 저장
pres.save("RemoveSmartArtNode_out.pptx", slides.export.SaveFormat.PPTX)
특정 위치에 SmartArt 노드 제거
이 예제에서는 특정 위치에서 SmartArt 모양 내부의 노드를 제거하는 방법을 배웁니다.
Presentation클래스의 인스턴스를 생성하고 SmartArt 모양이 포함된 프레젠테이션을 로드합니다.- 인덱스를 사용하여 첫 번째 슬라이드의 참조를 가져옵니다.
- 첫 번째 슬라이드 내의 모든 모양을 순회합니다.
- 모양이 SmartArt 유형인지 확인하고, SmartArt인 경우 선택된 모양을 SmartArt로 형변환합니다.
- 인덱스 0에 있는 SmartArt 모양 노드를 선택합니다.
- 이제 선택된 SmartArt 노드에 2개 이상의 하위 노드가 있는지 확인합니다.
- 이제 RemoveNodeByPosition() 메서드를 사용하여 위치 1에 있는 노드를 제거합니다.
- 프레젠테이션을 저장합니다.
import aspose.pydrawing as draw
import aspose.slides as slides
import aspose.slides.smartart as art
# 원하는 프레젠테이션을 로드합니다
with slides.Presentation(path + "RemoveNodeSpecificPosition.pptx") as pres:
# 첫 번째 슬라이드 내 모든 모양을 순회합니다
for shape in pres.slides[0].shapes:
# 모양이 SmartArt 유형인지 확인합니다
if type(shape) is art.SmartArt:
# 모양을 SmartArt로 형변환합니다
if len(shape.all_nodes) > 0:
# 인덱스 0에 있는 SmartArt 노드에 접근합니다
node = shape.all_nodes[0]
if len(node.child_nodes) >= 2:
# 위치 1에 있는 하위 노드 제거
node.child_nodes.remove_node(1)
# 프레젠테이션 저장
pres.save("RemoveSmartArtNodeByPosition_out.pptx", slides.export.SaveFormat.PPTX)
SmartArt 하위 노드에 대한 사용자 정의 위치 설정
이제 Aspose.Slides for Python via .NET는 SmartArtShape의 X 및 Y 속성을 설정하는 것을 지원합니다. 아래 코드 스니펫은 사용자 정의 SmartArtShape 위치, 크기 및 회전을 설정하는 방법을 보여주며, 새 노드를 추가하면 모든 노드의 위치와 크기가 다시 계산된다는 점에 유의하십시오.
import aspose.pydrawing as draw
import aspose.slides as slides
import aspose.slides.smartart as art
# 원하는 프레젠테이션을 로드합니다
with slides.Presentation(path + "AccessChildNodes.pptx") as pres:
smart = pres.slides[0].shapes.add_smart_art(20, 20, 600, 500, art.SmartArtLayoutType.ORGANIZATION_CHART)
# SmartArt 모양을 새 위치로 이동합니다
node = smart.all_nodes[1]
shape = node.shapes[1]
shape.x += (shape.width * 2)
shape.y -= (shape.height / 2)
# SmartArt 모양의 너비를 변경합니다
node = smart.all_nodes[2]
shape = node.shapes[1]
shape.width += (shape.width / 2)
# SmartArt 모양의 높이를 변경합니다
node = smart.all_nodes[3]
shape = node.shapes[1]
shape.height += (shape.height / 2)
# SmartArt 모양의 회전을 변경합니다
node = smart.all_nodes[4]
shape = node.shapes[1]
shape.rotation = 90
pres.save("SmartArt.pptx", slides.export.SaveFormat.PPTX)
보조 노드 확인
다음 샘플 코드에서는 SmartArt 노드 컬렉션에서 보조 노드를 식별하고 이를 변경하는 방법을 조사합니다.
- PresentationEx 클래스의 인스턴스를 생성하고 SmartArt 모양이 포함된 프레젠테이션을 로드합니다.
- 인덱스를 사용하여 두 번째 슬라이드의 참조를 가져옵니다.
- 첫 번째 슬라이드 내의 모든 모양을 순회합니다.
- 모양이 SmartArt 유형인지 확인하고, SmartArt인 경우 선택된 모양을 SmartArtEx로 형변환합니다.
- SmartArt 모양 내부의 모든 노드를 순회하고 보조 노드인지 확인합니다.
- 보조 노드의 상태를 일반 노드로 변경합니다.
- 프레젠테이션을 저장합니다.
import aspose.pydrawing as draw
import aspose.slides as slides
import aspose.slides.smartart as art
# 프레젠테이션 인스턴스 생성
with slides.Presentation(path + "AssistantNode.pptx") as pres:
# 첫 번째 슬라이드 내 모든 모양을 순회합니다
for shape in pres.slides[0].shapes:
# 모양이 SmartArt 유형인지 확인합니다
if type(shape) is art.SmartArt:
# SmartArt 모양의 모든 노드를 순회합니다
for node in shape.all_nodes:
tc = node.text_frame.text
# 노드가 보조 노드인지 확인합니다
if node.is_assistant:
# 보조 노드를 false로 설정하고 일반 노드로 전환합니다
node.is_assistant = False
# 프레젠테이션 저장
pres.save("ChangeAssitantNode_out.pptx", slides.export.SaveFormat.PPTX)
노드 채우기 형식 설정
Aspose.Slides for Python via .NET를 사용하면 사용자 정의 SmartArt 모양을 추가하고 채우기 형식을 설정할 수 있습니다. 이 문서에서는 SmartArt 모양을 생성하고 접근하며 Aspose.Slides for Python via .NET를 사용하여 채우기 형식을 설정하는 방법을 설명합니다.
다음 단계에 따라 진행하십시오:
Presentation클래스의 인스턴스를 생성합니다.- 인덱스를 사용하여 슬라이드의 참조를 가져옵니다.
- LayoutType을 설정하여 SmartArt 모양을 추가합니다.
- SmartArt 모양 노드의 FillFormat을 설정합니다.
- 수정된 프레젠테이션을 PPTX 파일로 저장합니다.
import aspose.pydrawing as draw
import aspose.slides as slides
import aspose.slides.smartart as art
with slides.Presentation() as presentation:
# 슬라이드에 접근
slide = presentation.slides[0]
# SmartArt 모양과 노드 추가
chevron = slide.shapes.add_smart_art(10, 10, 800, 60, art.SmartArtLayoutType.CLOSED_CHEVRON_PROCESS)
node = chevron.all_nodes.add_node()
node.text_frame.text = "Some text"
# 노드 채우기 색상 설정
for item in node.shapes:
item.fill_format.fill_type = slides.FillType.SOLID
item.fill_format.solid_fill_color.color = draw.Color.red
# 프레젠테이션 저장
presentation.save("FillFormat_SmartArt_ShapeNode_out.pptx", slides.export.SaveFormat.PPTX)
SmartArt 하위 노드 썸네일 생성
개발자는 아래 단계에 따라 SmartArt 하위 노드의 썸네일을 생성할 수 있습니다:
- PPTX 파일을 나타내는
Presentation클래스를 인스턴스화합니다. - SmartArt를 추가합니다.
- 인덱스를 사용하여 노드의 참조를 가져옵니다.
- 썸네일 이미지를 가져옵니다.
- 원하는 이미지 형식으로 썸네일 이미지를 저장합니다.
아래 예제는 SmartArt 하위 노드의 썸네일을 생성합니다.
import aspose.slides as slides
import aspose.slides.smartart as art
# PPTX 파일을 나타내는 Presentation 클래스를 인스턴스화합니다
with slides.Presentation() as presentation:
# SmartArt 추가
smart = pres.slides[0].shapes.add_smart_art(10, 10, 400, 300, art.SmartArtLayoutType.BASIC_CYCLE)
# 인덱스를 사용하여 노드에 대한 참조를 가져옵니다
node = smart.nodes[1]
# 썸네일 가져오기
with node.shapes[0].get_image() as bmp:
# 썸네일 저장
bmp.save("SmartArt_ChildNote_Thumbnail_out.jpeg", slides.ImageFormat.JPEG)
FAQ
SmartArt 애니메이션이 지원됩니까?
예. SmartArt는 일반 도형으로 취급되므로 표준 애니메이션 적용 (입장, 종료, 강조, 경로) 및 타이밍 조정이 가능합니다. 필요에 따라 SmartArt 노드 내부의 도형에도 애니메이션을 적용할 수 있습니다.
내부 ID를 모를 경우 슬라이드에서 특정 SmartArt를 신뢰성 있게 찾으려면 어떻게 해야 하나요?
SmartArt에 대체 텍스트를 지정하고 검색합니다. SmartArt에 고유한 AltText를 설정하면 내부 식별자에 의존하지 않고 프로그래밍 방식으로 찾을 수 있습니다.
프레젠테이션을 PDF로 변환할 때 SmartArt 모양이 유지됩니까?
예. Aspose.Slides는 PDF 내보내기 중에 SmartArt를 높은 시각적 정확도로 렌더링하여 레이아웃, 색상 및 효과를 보존합니다.
전체 SmartArt 이미지를 추출할 수 있나요(미리보기나 보고서용 등)?
예. SmartArt 모양을 래스터 형식 또는 SVG 로 렌더링하여 확장 가능한 벡터 출력으로 만들 수 있으므로 썸네일, 보고서 또는 웹 사용에 적합합니다.