개발자/파이썬 Python

python-pptx 파워포인트 문서 자동화 placeholder 정리

지구빵집 2023. 1. 3. 09:57
반응형

 

 

placeholder 이해하기 

 

직관적으로 placeholder는 콘텐츠를 배치할 수 있는 미리 형식이 지정된 컨테이너입니다. 콘텐츠에 미리 설정된 서식을 제공함으로써 최종 사용자가 실제 콘텐츠에 집중할 수 있도록 하면서 템플릿 디자이너의 손에 많은 서식 선택 사항을 제공합니다. 이는 프레젠테이션 개발 프로세스를 가속화하는 동시에 동일한 템플릿에서 생성된 슬라이드의 시각적 일관성을 유지합니다. 

 

placeholder는 shape 도형입니다.

 

자리 표시자는 모양의 직교 범주입니다. 즉, 여러 모양 유형이 자리 표시자가 될 수 있습니다. 특히 자동 모양( p:sp 요소), 그림( p:pic 요소) 및 그래픽 프레임( p:graphicFrame ) 모양 유형은 자리 표시자가 될 수 있습니다. 그룹 모양( p:grpSp ), 연결선( p:cxnSp ) 및 콘텐츠 부분( p:contentPart ) 모양은 자리 표시자가 될 수 없습니다. 그래픽 프레임 개체 틀에는 표, 차트 또는 SmartArt가 포함될 수 있습니다. 

 

placeholder 유형

 

placeholder에는 아래와 같이 18가지 유형이 있습니다. 

 

Title, Center Title, Subtitle, Body 제목, 가운데 제목, 부제, 본문

 

이러한 자리 표시자는 일반적으로 제목과 일련의 글머리 기호로 구성된 텍스트만 포함하는 일반적인 "단어 차트"에 나타납니다. 이러한 자리 표시자는 모두 텍스트만 허용할 수 있습니다.

 

Content 콘텐츠

 

이 다목적 자리 표시자는 슬라이드 본문에 가장 일반적으로 사용됩니다. 채워지지 않은 경우 표, 차트, SmartArt, 그림, 클립 아트 또는 미디어 클립을 삽입할 수 있는 6개의 버튼이 표시됩니다.

 

Picture, Clip Art 그림, 클립 아트

 

둘 다 이미지 삽입을 허용합니다. 클립 아트 자리 표시자의 삽입 버튼은 이미지 파일 선택기가 아닌 클립 아트 갤러리를 불러오지만 그 외에는 동일하게 작동합니다.

 

Chart, Table, Smart Art 차트, 표, 스마트 아트

 

이 세 가지를 사용하면 각각의 유형의 풍부한 그래픽 콘텐츠를 삽입할 수 있습니다.

 

Media Clip 미디어 클립

 

비디오 또는 사운드 녹음을 삽입할 수 있습니다.

 

Date, Footer, Slide Number 날짜, 바닥글, 슬라이드 번호

 

이 세 가지는 대부분의 슬라이드 마스터와 슬라이드 레이아웃에 나타나지만 대부분의 사용자가 기대하는 대로 작동하지 않습니다. 이들은 일반적으로 노트 마스터 및 유인물 마스터에도 나타납니다.

 

Header 머리글

 

노트 마스터 및 유인물 마스터에서만 유효합니다.

 

Vertical Body, Vertical Object, Vertical Title 세로 본문, 세로 개체, 세로 제목

 

일본어와 같은 세로 방향 언어에 사용됩니다. 

 

 

채워지지 않은 것과 채워진 것

 

슬라이드의 placeholder는 비어 있거나 채워질 수 있습니다. 이것은 그림 개체 틀에서 가장 분명합니다. 채워지지 않은 경우 placeholder는 사용자 지정 가능한 프롬프트 텍스트를 표시합니다. 리치 콘텐츠 자리 표시자는 비어 있을 때 하나 이상의 콘텐츠 삽입 버튼도 표시합니다.

 

텍스트 전용 placeholder는 텍스트의 첫 번째 문자가 입력되면 "채워진" 모드로 들어가고 텍스트의 마지막 문자가 제거되면 "채워지지 않은" 모드로 돌아갑니다. 리치 콘텐츠 자리 표시자는 그림과 같은 콘텐츠가 삽입되면 채워진 모드로 들어가고 해당 콘텐츠가 삭제되면 채워지지 않은 모드로 돌아갑니다. 채워진 placeholder를 삭제하려면 도형을 두 번 삭제해야 합니다 . 첫 번째 삭제는 콘텐츠를 제거하고 placeholder를 채워지지 않은 모드로 복원합니다. 추가 삭제는 placeholder 자체를 제거합니다. 삭제된 placeholder는 레이아웃을 다시 적용하여 복원할 수 있습니다. 

 

placeholder는 상속합니다

 

슬라이드에 나타나는 placeholder는 전체 placeholder 메커니즘의 일부일 뿐입니다. placeholder 동작에는 세 가지 다른 범주의 자리 표시자 모양이 필요합니다. 슬라이드 마스터에 있는 것, 슬라이드 레이아웃에 있는 것, 최종적으로 프레젠테이션의 슬라이드에 나타나는 것.

 

이러한 세 가지 placeholder 범주는 상속자, 상속자 또는 둘 다로써 속성 상속 계층에 참여합니다. 마스터의 placeholder 모양은 상속 대상일 뿐입니다. 반대로 슬라이드의 placeholder 모양은 상속자일 뿐입니다. 슬라이드 레이아웃의 placeholder는 슬라이드 마스터 placeholder의 가능한 상속자이자 해당 레이아웃에 연결된 슬라이드의 placeholder에 대한 상속자입니다.

 

레이아웃은 슬라이드가 해당 레이아웃에서 상속하는 것과는 다른 방식으로 마스터에서 상속됩니다. 레이아웃 placeholder는 동일한 유형을 공유하는 마스터 placeholder에서 상속됩니다. 슬라이드 placeholder는 동일한 idx 값 을 갖는 레이아웃 placeholder에서 상속됩니다 .

 

일반적으로 모든 서식 속성은 "상위" placeholder에서 상속됩니다. 여기에는 위치와 크기는 물론 채우기, 선 및 글꼴이 포함됩니다. 직접 적용된 서식은 해당하는 상속된 값을 재정의합니다. 직접 적용된 서식은 레이아웃을 다시 적용할 때 제거할 수 있습니다. 

 

아래 코드는 11가지 레이아웃에 들어 있는 모든 placeholder를 출력하는 코드와 결과다. 원하는 placeholder를 찾아 내용을 추가하려면 반드시 알아야 한다. 코드와 결과를 아래에 나타낸다.

 

#python-pptx의 가장 기본이 되는 Presentation 클래스 불러오기
from pptx import Presentation

#Presentation 객체 생성
prs = Presentation()

# 기본 레이아웃 11가지 placeholder 출력
for i in range(0, 11):
    print("\n======="+"%d"%(i+1)+"번 슬라이드=======")
    slide = prs.slides.add_slide(prs.slide_layouts[i])
    
    # 생성한 레이아웃 안의 모든 placeholder 이름 확인
    for shape in slide.placeholders:
        #print('%s' % (shape.name))
        print('%d %s' % (shape.placeholder_format.idx, shape.name))

 

결과는 placeholder 자리 표시자의 idx 값과 이름을 표시한다. 7번 레이아웃은 Blank 슬라이드이므로 아무것도 표시하지 않는다.

 

=======1번 슬라이드=======
0 Title 1
1 Subtitle 2

=======2번 슬라이드=======
0 Title 1
1 Content Placeholder 2

=======3번 슬라이드=======
0 Title 1
1 Text Placeholder 2

=======4번 슬라이드=======
0 Title 1
1 Content Placeholder 2
2 Content Placeholder 3

=======5번 슬라이드=======
0 Title 1
1 Text Placeholder 2
2 Content Placeholder 3
3 Text Placeholder 4
4 Content Placeholder 5

=======6번 슬라이드=======
0 Title 1

=======7번 슬라이드=======

=======8번 슬라이드=======
0 Title 1
1 Content Placeholder 2
2 Text Placeholder 3

=======9번 슬라이드=======
0 Title 1
1 Picture Placeholder 2
2 Text Placeholder 3

=======10번 슬라이드=======
0 Title 1
1 Vertical Text Placeholder 2

=======11번 슬라이드=======
0 Vertical Title 1
1 Vertical Text Placeholder 2

 

placeholder 작업하기

 

자리 표시자를 사용하면 콘텐츠를 훨씬 쉽게 추가할 수 있습니다. 처음부터 슬라이드에 새 텍스트 상자를 추가하고 원하는 방식으로 만들기 위해 얼마나 많은 조정이 필요한지 알아차린 적이 있다면 그 이유를 이해할 수 있을 것입니다. 자리 표시자는 올바른 글꼴 크기, 단락 정렬, 글머리 기호 스타일 등으로 올바른 위치에 있습니다. 기본적으로 텍스트를 클릭하고 입력하면 슬라이드가 생깁니다.

 

개체 틀을 사용하여 슬라이드에 리치 콘텐츠 개체를 배치할 수도 있습니다. 그림, 표 또는 차트를 자리 표시자에 각각 삽입할 수 있으므로 자리 표시자의 위치와 크기는 물론 특정 서식 속성을 사용할 수 있습니다. 

 

자리 표시자에 접근하기

 

모든 자리 표시자는 도형이기도 하므로 shapes슬라이드 속성을 사용하여 액세스할 수 있습니다. 그러나 특정 자리 표시자를 찾을 때 placeholders속성을 사용하면 작업을 더 쉽게 수행할 수 있습니다.

 

알려진 자리 표시자에 액세스하는 가장 신뢰할 수 있는 방법은 해당 idx값을 사용하는 것입니다. 자리 표시 자의 idx값은 속성을 상속하는 슬라이드 레이아웃 자리 표시자의 정수 키입니다. 따라서 슬라이드 수명 내내 안정적으로 유지되며 해당 레이아웃을 사용하여 만든 모든 슬라이드에 대해 동일합니다.

 

일반적으로 슬라이드의 placeholder를 보고 원하는 것을 선택하는 것은 충분히 쉽습니다. 

 

>>> prs = Presentation()
>>> slide = prs.slides.add_slide(prs.slide_layouts[8])
>>> for shape in slide.placeholders:
...     print('%d %s' % (shape.placeholder_format.idx, shape.name))
...
0  Title 1
1  Picture Placeholder 2
2  Text Placeholder 3

 

그런 다음 알려진 색인을 얻었으면 직접 액세스하기 위해 다음을 수행하십시오. 

 

>>> slide.placeholders[1]
<pptx.parts.slide.PicturePlaceholder object at 0x10d094590>
>>> slide.placeholders[2].name
'Text Placeholder 3'

 

일반적으로 idx기본 제공 슬라이드 레이아웃(PowerPoint와 함께 제공되는 것)의 자리 표시자 값은 0에서 5 사이입니다. 제목 자리 표시자는 있는 경우 항상 idx0을 가지며 다른 자리 표시자는 위에서 아래로 순서대로 따라옵니다. 좌에서 우로. PowerPoint에서 사용자가 슬라이드 레이아웃에 추가한 자리 표시자는 idx10부터 시작하는 값을 받습니다. 

 

자리 표시자 식별 및 특성화 

 

자리 표시자는 어떤 면에서 다른 셰이프와 다르게 동작합니다. 특히 그 shape_type 속성의 값은 어떤 유형의 자리 표시자인지 또는 어떤 유형의 콘텐츠를 포함하는지에 관계없이 무조건적 MSO_SHAPE_TYPE.PLACEHOLDER 입니다. 

 

>>> prs = Presentation()
>>> slide = prs.slides.add_slide(prs.slide_layouts[8])
>>> for shape in slide.shapes:
...     print('%s' % shape.shape_type)
...
PLACEHOLDER (14)
PLACEHOLDER (14)
PLACEHOLDER (14)

 

자세한 내용을 알아보려면 자리 표시자의 placeholder_format속성 내용을 검사해야 합니다. 모든 도형에는 이 속성이 있지만 자리 표시자가 아닌 도형에서 액세스하면 ValueError 발생. is_placeholder속성은 모양이 자리 표시자인지 여부를 결정하는 데 사용할 수 있습니다 .

 

>>> for shape in slide.shapes:
...     if shape.is_placeholder:
...         phf = shape.placeholder_format
...         print('%d, %s' % (phf.idx, phf.type))
...
0, TITLE (1)
1, PICTURE (18)
2, BODY (2)

 

참고 

python-pptx 공식 문서 placeholder 

 

 

Python-pptx 파워포인트 문서 자동화

 

 

 

반응형