Python에서 PowerPoint에 도형 추가하는 방법
Aspose.Slides FOSS for Python은 프레젠테이션 슬라이드에 AutoShapes, Tables, Connectors 및 PictureFrames를 추가하는 것을 지원합니다. 모든 도형 유형은 slide.shapes 컬렉션을 통해 추가됩니다.
단계별 가이드
단계 1: 패키지 설치
pip install aspose-slides-foss설치 확인:
import aspose.slides_foss as slides
print("Ready")단계 2: 프레젠테이션 만들기
항상 Presentation를 컨텍스트 관리자로 사용하십시오.
import aspose.slides_foss as slides
from aspose.slides_foss.export import SaveFormat
with slides.Presentation() as prs:
slide = prs.slides[0]
# ... add shapes ...
prs.save("output.pptx", SaveFormat.PPTX)3단계: 자동 도형 추가
slide.shapes.add_auto_shape(shape_type, x, y, width, height)은 주어진 위치와 크기(모두 포인트)에서 도형을 배치합니다. ShapeType 상수를 사용하여 도형을 선택합니다.
import aspose.slides_foss as slides
from aspose.slides_foss import ShapeType
from aspose.slides_foss.export import SaveFormat
with slides.Presentation() as prs:
slide = prs.slides[0]
# Rectangle
rect = slide.shapes.add_auto_shape(ShapeType.RECTANGLE, 50, 50, 300, 100)
rect.add_text_frame("Rectangle shape")
# Ellipse
ellipse = slide.shapes.add_auto_shape(ShapeType.ELLIPSE, 400, 50, 200, 100)
ellipse.add_text_frame("Ellipse shape")
prs.save("autoshapes.pptx", SaveFormat.PPTX)단계 4: 표 추가
slide.shapes.add_table(x, y, col_widths, row_heights)는 지정된 위치에 표를 생성합니다. 열 너비와 행 높이는 포인트 값 목록입니다.
import aspose.slides_foss as slides
from aspose.slides_foss.export import SaveFormat
with slides.Presentation() as prs:
slide = prs.slides[0]
col_widths = [150.0, 150.0, 150.0]
row_heights = [40.0, 40.0, 40.0]
table = slide.shapes.add_table(50, 200, col_widths, row_heights)
# Set header row text
headers = ["Product", "Units", "Revenue"]
for col, text in enumerate(headers):
table.rows[0][col].text_frame.text = text
# Set data rows
rows = [
["Widget A", "120", "$2,400"],
["Widget B", "85", "$1,700"],
]
for row_idx, row_data in enumerate(rows):
for col, text in enumerate(row_data):
table.rows[row_idx + 1][col].text_frame.text = text
prs.save("table.pptx", SaveFormat.PPTX)5단계: 커넥터 추가
커넥터는 두 도형을 시각적으로 연결합니다. 먼저 도형을 만든 다음, 커넥터를 추가하고 시작 및 끝 연결점을 설정합니다.
import aspose.slides_foss as slides
from aspose.slides_foss import ShapeType
from aspose.slides_foss.export import SaveFormat
with slides.Presentation() as prs:
slide = prs.slides[0]
box1 = slide.shapes.add_auto_shape(ShapeType.RECTANGLE, 50, 100, 150, 60)
box1.add_text_frame("Start")
box2 = slide.shapes.add_auto_shape(ShapeType.RECTANGLE, 350, 100, 150, 60)
box2.add_text_frame("End")
conn = slide.shapes.add_connector(ShapeType.BENT_CONNECTOR3, 0, 0, 10, 10)
conn.start_shape_connected_to = box1
conn.start_shape_connection_site_index = 3 # right side of box1
conn.end_shape_connected_to = box2
conn.end_shape_connection_site_index = 1 # left side of box2
prs.save("connector.pptx", SaveFormat.PPTX)연결 지점 인덱스는 사각형에 대해 0–3으로 번호가 매겨집니다: top=0, left=1, bottom=2, right=3.
6단계: 사진 프레임 추가
이미지를 삽입하고 슬라이드에 PictureFrame으로 추가합니다. 먼저 이미지 바이트를 읽은 다음 프레젠테이션의 이미지 컬렉션에 추가하고, 그 후 프레임을 생성합니다.
import aspose.slides_foss as slides
from aspose.slides_foss import ShapeType
from aspose.slides_foss.export import SaveFormat
with slides.Presentation() as prs:
with open("logo.png", "rb") as f:
image_data = f.read()
image = prs.images.add_image(image_data)
slide = prs.slides[0]
slide.shapes.add_picture_frame(
ShapeType.RECTANGLE, # bounding shape type
50, 50, # x, y in points
200, 150, # width, height in points
image
)
prs.save("with-image.pptx", SaveFormat.PPTX)일반적인 문제 및 해결책
슬라이드 표시 영역 밖에 도형이 나타남
슬라이드는 기본적으로 720 × 540 포인트입니다. x 또는 y 값이 해당 범위를 벗어나면 도형이 슬라이드 밖으로 이동합니다. x < 720와 y < 540을 유지하고, x + width <= 720와 y + height <= 540을 보장하십시오.
AttributeError: 'NoneType' object has no attribute 'text_frame'
add_auto_shape()는 shape 객체를 직접 반환합니다. None를 보는 경우, 반환 값을 버리고 있지 않은지 확인하십시오.
테이블 셀 텍스트가 할당 후 비어 있습니다
올바른 속성은 .text_frame.text (셀에 직접 .text이 아니라) 입니다. 셀에 접근하려면 table.rows[row_index][col_index].text_frame.text = "value"을 사용하십시오.
자주 묻는 질문
슬라이드에 추가할 수 있는 도형은 몇 개입니까?
라이브러리에서 강제하는 제한은 없습니다. 실용적인 제한은 파일 크기와 대상 PPTX 뷰어의 렌더링 능력에 따라 달라집니다.
추가한 후에 도형의 위치를 변경할 수 있나요?
예. add_auto_shape()에서 반환된 shape 객체는 x, y, width 및 height 속성을 가지고 있으며, 이를 설정할 수 있습니다:
shape.x = 100
shape.y = 200
shape.width = 400
shape.height = 80도형 외곽선(테두리) 색상을 설정할 수 있나요?
예, shape.line_format를 통해:
from aspose.slides_foss.drawing import Color
shape.line_format.fill_format.solid_fill_color.color = Color.from_argb(255, 200, 0, 0)차트가 지원되나요?
아니요. 차트, SmartArt 및 OLE 개체는 이 버전에서 구현되지 않았으며 NotImplementedError 오류를 발생시킵니다.