본문 바로가기

일상

python-pptx로 '편집 가능한' PPT 자동 생성하기 (이미지 말고 네이티브 도형으로)

반응형

파이썬으로 발표자료나 구성도를 자동 생성할 때, 다이어그램을 이미지로 만들어 슬라이드에 붙이는 방법을 많이 씁니다. 그런데 이렇게 하면 받는 사람이 글자 하나 못 고칩니다. python-pptx로 네이티브 도형과 텍스트 박스를 만들면, 파워포인트에서 그대로 편집 가능한 PPT가 나옵니다. 그 방법과 자주 막히는 함정을 정리합니다.


1. 왜 이미지 말고 '도형'인가
자동 생성 PPT의 흔한 실수가 matplotlib이나 PIL로 그림을 그려 통째로 붙이는 것입니다. 보기엔 깔끔한데 받는 쪽에서 텍스트 수정도, 색 변경도, 위치 이동도 안 됩니다. 협업 도구(구글 슬라이드 등)에 올려도 그냥 이미지 한 장입니다. 반면 python-pptx로 도형/텍스트를 넣으면 각 요소가 파워포인트 개체라 자유롭게 편집됩니다.


- 이미지 첨부: 예쁘지만 수정 불가, 텍스트 검색/복사 안 됨
- 네이티브 도형: 글자/색/위치 편집 가능, 클라우드 협업에 유리
- 결론: 남에게 넘길 자료일수록 도형으로


2. 설치와 기본 골격
설치는 pip 한 줄입니다. 프레젠테이션 객체를 만들고, 슬라이드 크기를 정하고, 빈 레이아웃으로 슬라이드를 추가하는 게 기본 뼈대입니다. 레이아웃 인덱스 6번이 보통 '빈 화면'이라 도형을 자유롭게 얹기 좋습니다.



- pip install python-pptx
- Presentation() 생성 후 slide_width/height로 비율 지정
- slide_layouts[6] = 빈 레이아웃(도형 얹기 좋음)


3. 도형과 텍스트 박스, 그리고 좌표 단위 함정
도형은 add_shape로, 글상자는 add_textbox로 넣습니다. 여기서 python-pptx 최대 함정이 좌표 단위입니다. 내부 단위가 EMU(English Metric Unit)라 숫자를 그냥 넣으면 안 되고, Inches()/Pt()/Emu()로 감싸야 합니다. Inches(1)이 약 914400 EMU라, 이걸 모르고 좌표에 100 같은 숫자를 넣으면 점만큼 작은 도형이 나옵니다.



- add_shape(MSO_SHAPE.ROUNDED_RECTANGLE, left, top, width, height)
- 좌표/크기는 반드시 Inches()/Pt()/Emu()로 감싸기
- fill.solid() + fore_color.rgb = RGBColor(...)로 색, text_frame으로 글자


4. 박스 연결선과 표
구성도라면 박스를 화살표로 잇고, 데이터라면 표가 필요합니다. add_connector로 연결선을, add_table로 네이티브 표를 넣습니다. 표도 이미지가 아니라 진짜 파워포인트 표라 셀 내용을 그대로 수정할 수 있습니다.



- add_connector(MSO_CONNECTOR.STRAIGHT, x1, y1, x2, y2)로 박스 연결
- add_table(rows, cols, left, top, width, height).table로 표
- 셀은 table.cell(r, c).text로 채움(편집 가능한 네이티브 표)


5. 4:3 vs 16:9와 저장
슬라이드 비율은 slide_width/height로 정합니다. 4:3은 10 x 7.5인치, 16:9는 13.33 x 7.5인치입니다. 오래된 회사 템플릿이나 인쇄용은 4:3을 요구하는 경우가 많으니 받는 쪽 기준을 먼저 확인하는 게 좋습니다. 마지막에 save로 저장하면 끝입니다.


- 4:3 = Inches(10) x Inches(7.5), 16:9 = Inches(13.33) x Inches(7.5)
- prs.save("out.pptx")
- 파워포인트에서 열면 모든 도형/글자/표가 편집 가능


여기까지 python-pptx로 이미지가 아니라 편집 가능한 네이티브 도형으로 PPT를 자동 생성하는 방법에 대해서 작성해봤습니다. 여기까지 읽어주셔서 감사합니다!

반응형