slideX.xml의 핵심 구조
slideX.xml은 Office Open XML (OOXML)(open office xml과 다르다.) (ECMA-376 / ISO/IEC 29500-1)의 프레젠테이션(PresentationML) 포맷에서 개별 슬라이드의 시각적 콘텐츠와 설정 정보를 담고 있는 핵심 파트이다.
ISO/IEC 29500-1의
- 19. PresentationML Reference Material ( - PresentationML(
p:) 네임스페이스) -
- DrawingML - Components Reference Material ( - DrawingML(
a:) 네임스페이스)
- DrawingML - Components Reference Material ( - DrawingML(
를 살펴보며, pptx2md 과정에서 참고할 만한 정보들을 알아보면 다음과 같다.
핵심 구성 요소 (Key Elements)
최상위 요소(Root Element): 이 파트의 최상위 엘리먼트는 <p:sld>이다.
공통 슬라이드 데이터 (<p:cSld>)
<p:cSld>(Common Slide Data) 엘리먼트는 슬라이드의 유형과 무관하게 공통적으로 가지는 속성 및 시각적 객체 정보를 담는 컨테이너 역할을 한다. (ISO/IEC 29500-1의 19.3.1.16 cSld (Common Slide Data))
<p:spTree>(도형 트리): 슬라이드 내의 모든 시각적 객체를 계층적으로 관리하는 트리 구조. 하위 요소로 다음과 같은 객체들을 포함한다.<p:sp>(도형, Shape): 텍스트 상자나 기본 도형 객체 정보를 담는다.<p:grpSp>(그룹 도형, Group Shape): 여러 도형이 하나의 그룹으로 묶여 있는 상태를 나타낸다. 단일 변환(transform) 속성을 여러 도형에 동시에 적용할 때 사용된다.<p:graphicFrame>(그래픽 프레임): 외부 소스에서 생성된 그래픽 요소(표, 차트 등)를 슬라이드 표면에 표시하기 위해 사용하는 컨테이너이다.<p:cxnSp>(연결선, Connection Shape): 두 개의 도형 객체(<p:sp>)를 서로 이어주는 연결선 정보를 정의.<p:pic>(사진/이미지, Picture): 슬라이드에 삽입된 이미지 객체를 정의한다.
주요 객체의 내부 구조
텍스트를 추출하거나 표 데이터를 읽어오려면 각 객체의 내부 구조를 파악해야 한다.
<p:sp> (도형 및 텍스트 상자) 내부 구조
도형의 위치, 크기, 그리고 내부에 적힌 텍스트 정보는 다음 계층을 통해 정의된다.
-
<p:nvSpPr>(비시각적 속성): 도형의 고유 ID, 이름 등 메타데이터를 담는다. 특히 이 안에는 텍스트 상자의 **역할(제목, 부제목 등)**을 정의하는 요소가 포함되어 있다.<p:ph>(플레이스홀더, Placeholder):<p:nvPr>하위에 위치하며, 이 도형이 슬라이드 레이아웃에서 어떤 역할을 하는지type속성으로 나타낸다. (※type속성이 아예 없으면 사용자가 임의로 추가한 일반 텍스트 상자나 도형을 의미한다.)type="title": 일반 제목type="ctrTitle": 가운데 정렬된 제목 (주로 첫 제목 슬라이드)type="subTitle": 부제목type="body": 본문 텍스트type="dt": 날짜 및 시간type="sldNum": 슬라이드 번호type="ftr": 바닥글-
예시

-
<p:spPr>(시각적 속성): 도형의 크기, 위치(x, y 좌표), 채우기 색상, 테두리 선 등의 기하학적 정보를 정의한다. -
<p:txBody>(텍스트 본문): 도형 내부에 포함된 실제 텍스트 데이터 영역이다.<a:p>(문단, Paragraph): 하나의 문단을 나타낸다.<a:r>(텍스트 런, Run): 폰트, 크기, 색상 등 서식이 동일한 텍스트 조각이다. 한 문단 내에서도 서식이 바뀌면 여러 개의<a:r>로 쪼개진다.<a:t>(텍스트, Text): 화면에 표시되는 실제 문자열 데이터가 들어있다.
일반 텍스트 상자
슬라이드 레이아웃
⇒ <p:ph type=“title”>이나 <p:ph type=“subTitle”>로 들어가려면, 사용자가 파워포인트 화면에서 일반 텍스트 상자가 아닌 슬라이드 레이아웃을 이용해야 함.
<p:graphicFrame> 내부의 표(Table) 구조
표 데이터는 <p:graphicFrame> 내부의 <a:graphic> ➔ <a:graphicData> 안에 <a:tbl> 형태로 존재한다. HTML의 테이블 구조와 매우 유사하다.
<a:tbl>(표, Table): 표 객체의 최상위 요소이다.<a:tblGrid>(표 그리드): 표의 전체 열(Column) 구조와 각 열의 너비(<a:gridCol>)를 정의한다.<a:tr>(행, Table Row): 표의 가로 행을 나타낸다.<a:tc>(셀, Table Cell): 행 내부의 개별 칸을 나타낸다. 셀 병합 정보(rowSpan, gridSpan)도 이곳에 포함된다.<a:tcPr>(셀 속성) : 내부의 채우기(Fill) 속성 설정 가능- ⇒ 다른 표를 이미지로 캡처한 뒤, 해당 셀의 배경을
<a:blipFill>(이미지 채우기)로 설정하여 그림으로 집어넣을 수 있다.
- ⇒ 다른 표를 이미지로 캡처한 뒤, 해당 셀의 배경을
<a:txBody>(텍스트 본문): 셀 안에 입력된 텍스트 정보이다. 구조는 위 도형의 텍스트 본문(<a:p>➔<a:r>➔<a:t>)과 완벽하게 동일하다.
예시 테이블 - xml
예시 테이블 - 렌더링
⇒ 예시 테이블은 눈으로 볼 때 nested 구조인 것으로 보이지만, xml을 보면 실제로는 테이블 1개이다. nested 형태로 column이나 row를 차지하게 디자인(내부 테이블로 보이는 것은 하나의 row와 column 차지, 외부 테이블로 보이는 것은 여러 row와 column 차지) 한 것이나 다름 없다.
<p:graphicFrame> 내부의 OLE 객체 (워드, 엑셀 등 삽입)
슬라이드에 삽입된 워드 문서(.docx)나 엑셀 파일(.xlsx)은 시각적으로는 슬라이드 위에 떠 있는 이미지나 표처럼 보이지만, 내부적으로는 OLE 객체(<p:oleObj>) 형태로 연결되어 있다.
<p:oleObj>(OLE 객체):<p:graphicFrame>➔<a:graphic>➔<a:graphicData>하위에 위치하며, 삽입된 외부 문서(워드, 엑셀 등)의 정보를 담고 있다.progId속성: 삽입된 객체의 프로그램 종류를 나타낸다. (예:Word.Document.12는 워드 문서,Excel.Sheet.12는 엑셀 시트)r:id속성: 실제 파일이 저장된 위치를 가리키는 관계 ID(Relationship ID).
OLE 객체의 실제 파일이 저장되는 위치(ppt/embeddings/)
slideX.xml 내부에는 워드 문서의 텍스트가 직접 적혀 있지 않다. 대신 PPTX 파일(ZIP 압축) 내부의 특정 폴더에 실제 파일이 통째로 저장된다.
slideX.xml:<p:oleObj r:id="rId3" progId="Word.Document.12" />형태로 ID만 기록._rels/slideX.xml.rels:rId3가../embeddings/Microsoft_Word_Document1.docx를 가리킨다고 정의.ppt/embeddings/폴더: 이 폴더 안에 실제 삽입된 워드 파일 (Microsoft_Word_Document1.docx)이나 엑셀 파일이 물리적으로 존재한다. (pptx 파일 구조에서 언급)
정리
정리
텍스트의 경우
- 슬라이드 레이아웃이 설정되어 있으면 title인지 아닌지 확인 가능
⇒ 설정이 안 되어 있으면 일반 텍스트로 인식- 텍스트는 <a:t>에 있음.
테이블의 경우 여러 방법으로 입력 했을 수 있음.
- 실제로는 테이블 1개이지만, nested 형태로 column이나 row를 차지하게 병합한 경우 (앞선 예시 이미지)
- OLE 객체를 삽입한 경우 (앞서 설명)
- 별개의 객체로 겹쳐 놓은 경우 (해당 셀에 넣은게 아니고, 따로 테이블을 만들어서 해당 셀 위에 보이도록 위치 시킨 것)
- 이미지로 캡처해서 배경으로 넣은 경우 (앞선 <a:tcPr> 설명)
수식의 경우도 여러 방법으로 입력 했을 수 있음.
- 수식처럼 보이게 위치(ex. 를 2따로 x 따로 크기조절해서 위치시키는 경우)
- OMML로 들어간 경우
- latex로 들어가 있는 경우
- 이미지로 들어가 있는 경우
이미지의 경우
- media에 파일로 있음. ← 이미지는 파일 추출 및 description