PPTX 생성, 편집 및 분석
개요
사용자가 .pptx 파일의 생성, 편집 또는 콘텐츠 분석을 요청할 수 있습니다. .pptx 파일은 기본적으로 XML 파일과 기타 리소스가 포함된 ZIP 아카이브로, 읽거나 편집할 수 있습니다. 작업 유형에 따라 다양한 도구와 워크플로가 제공됩니다.
콘텐츠 읽기 및 분석
텍스트 추출
프레젠테이션의 텍스트 콘텐츠만 읽어야 하는 경우, 문서를 마크다운으로 변환하세요:
# 문서를 마크다운으로 변환
python -m markitdown path-to-file.pptx
원시 XML 접근
댓글, 발표자 노트, 슬라이드 레이아웃, 애니메이션, 디자인 요소 및 복잡한 서식에는 원시 XML 접근이 필요합니다. 이러한 기능이 필요하면 프레젠테이션을 압축 해제하고 원시 XML 콘텐츠를 읽어야 합니다.
파일 압축 해제
python ooxml/scripts/unpack.py <office_file> <output_dir>
참고: unpack.py 스크립트는 프로젝트 루트 기준 skills/pptx/ooxml/scripts/unpack.py에 있습니다. 해당 경로에 스크립트가 없으면 find . -name "unpack.py"로 위치를 찾으세요.
주요 파일 구조
ppt/presentation.xml- 주요 프레젠테이션 메타데이터 및 슬라이드 참조ppt/slides/slide{N}.xml- 개별 슬라이드 콘텐츠 (slide1.xml, slide2.xml 등)ppt/notesSlides/notesSlide{N}.xml- 각 슬라이드의 발표자 노트ppt/comments/modernComment_*.xml- 특정 슬라이드의 댓글ppt/slideLayouts/- 슬라이드 레이아웃 템플릿ppt/slideMasters/- 마스터 슬라이드 템플릿ppt/theme/- 테마 및 스타일링 정보ppt/media/- 이미지 및 기타 미디어 파일
타이포그래피 및 색상 추출
모방할 예제 디자인이 주어진 경우: 아래 방법을 사용하여 먼저 프레젠테이션의 타이포그래피와 색상을 분석하세요:
- 테마 파일 읽기:
ppt/theme/theme1.xml에서 색상(<a:clrScheme>)과 글꼴(<a:fontScheme>) 확인 - 샘플 슬라이드 콘텐츠:
ppt/slides/slide1.xml에서 실제 글꼴 사용(<a:rPr>) 및 색상 확인 - 패턴 검색: grep을 사용하여 모든 XML 파일에서 색상(
<a:solidFill>,<a:srgbClr>) 및 글꼴 참조 검색
템플릿 없이 새 PowerPoint 프레젠테이션 만들기
처음부터 새 PowerPoint 프레젠테이션을 만들 때는 html2pptx 워크플로를 사용하여 HTML 슬라이드를 정확한 위치 지정으로 PowerPoint로 변환하세요.
디자인 원칙
중요: 프레젠테이션을 만들기 전에 콘텐츠를 분석하고 적절한 디자인 요소를 선택하세요:
- 주제 고려: 이 프레젠테이션은 무엇에 관한 것인가? 어떤 톤, 업계, 분위기를 시사하는가?
- 브랜딩 확인: 사용자가 회사/조직을 언급하면 해당 브랜드 색상과 아이덴티티 고려
- 팔레트를 콘텐츠에 일치: 주제를 반영하는 색상 선택
- 접근 방식 설명: 코드를 작성하기 전에 디자인 선택을 설명하세요.
요구 사항:
- ✅ 콘텐츠 기반 디자인 접근 방식을 코드 작성 전에 설명
- ✅ 웹 안전 글꼴만 사용: Arial, Helvetica, Times New Roman, Georgia, Courier New, Verdana, Tahoma, Trebuchet MS, Impact
- ✅ 크기, 두께, 색상을 통해 명확한 시각적 계층 구조 생성
- ✅ 가독성 보장: 강한 대비, 적절한 크기의 텍스트, 깔끔한 정렬
- ✅ 일관성 유지: 슬라이드 전체에서 패턴, 간격, 시각적 언어 반복
색상 팔레트 선택
창의적인 색상 선택:
- 기본값을 넘어서 생각: 이 특정 주제에 진정으로 어울리는 색상은 무엇인가? 자동 조종 선택을 피하세요.
- 여러 각도 고려: 주제, 업계, 분위기, 에너지 레벨, 대상 청중, 브랜드 아이덴티티 (언급된 경우)
- 모험을 시도: 예상치 못한 조합을 시도하세요 - 의료 프레젠테이션이 꼭 초록색일 필요는 없고, 금융이 꼭 네이비일 필요는 없습니다.
- 팔레트 구축: 함께 잘 어울리는 3-5가지 색상 선택 (주요 색상 + 보조 톤 + 액센트)
- 대비 보장: 텍스트가 배경에서 명확하게 읽혀야 함
예제 색상 팔레트 (창의성을 자극하기 위해 사용 - 하나를 선택하거나, 조정하거나, 직접 만드세요):
- 클래식 블루: 진한 네이비 (#1C2833), 슬레이트 그레이 (#2E4053), 실버 (#AAB7B8), 오프 화이트 (#F4F6F6)
- 틸 & 코랄: 틸 (#5EA8A7), 딥 틸 (#277884), 코랄 (#FE4447), 흰색 (#FFFFFF)
- 볼드 레드: 레드 (#C0392B), 브라이트 레드 (#E74C3C), 오렌지 (#F39C12), 옐로우 (#F1C40F), 그린 (#2ECC71)
- 웜 블러시: 모브 (#A49393), 블러시 (#EED6D3), 로즈 (#E8B4B8), 크림 (#FAF7F2)
- 버건디 럭셔리: 버건디 (#5D1D2E), 크림슨 (#951233), 러스트 (#C15937), 골드 (#997929)
- 딥 퍼플 & 에메랄드: 퍼플 (#B165FB), 다크 블루 (#181B24), 에메랄드 (#40695B), 흰색 (#FFFFFF)
- 크림 & 포레스트 그린: 크림 (#FFE1C7), 포레스트 그린 (#40695B), 흰색 (#FCFCFC)
- 핑크 & 퍼플: 핑크 (#F8275B), 코랄 (#FF574A), 로즈 (#FF737D), 퍼플 (#3D2F68)
- 라임 & 플럼: 라임 (#C5DE82), 플럼 (#7C3A5F), 코랄 (#FD8C6E), 블루 그레이 (#98ACB5)
- 블랙 & 골드: 골드 (#BF9A4A), 블랙 (#000000), 크림 (#F4F6F6)
- 세이지 & 테라코타: 세이지 (#87A96B), 테라코타 (#E07A5F), 크림 (#F4F1DE), 차콜 (#2C2C2C)
- 차콜 & 레드: 차콜 (#292929), 레드 (#E33737), 라이트 그레이 (#CCCBCB)
- 바이브런트 오렌지: 오렌지 (#F96D00), 라이트 그레이 (#F2F2F2), 차콜 (#222831)
- 포레스트 그린: 블랙 (#191A19), 그린 (#4E9F3D), 다크 그린 (#1E5128), 흰색 (#FFFFFF)
- 레트로 레인보우: 퍼플 (#722880), 핑크 (#D72D51), 오렌지 (#EB5C18), 앰버 (#F08800), 골드 (#DEB600)
- 빈티지 어시: 머스타드 (#E3B448), 세이지 (#CBD18F), 포레스트 그린 (#3A6B35), 크림 (#F4F1DE)
- 코스털 로즈: 올드 로즈 (#AD7670), 비버 (#B49886), 에그쉘 (#F3ECDC), 애쉬 그레이 (#BFD5BE)
- 오렌지 & 터콰이즈: 라이트 오렌지 (#FC993E), 그레이시쉬 터콰이즈 (#667C6F), 흰색 (#FCFCFC)
시각적 세부 옵션
기하학적 패턴:
- 가로 대신 대각선 섹션 구분선
- 비대칭 열 너비 (30/70, 40/60, 25/75)
- 90° 또는 270° 회전된 텍스트 헤더
- 이미지용 원형/육각형 프레임
- 모서리에 삼각형 액센트 모양
- 깊이감을 위한 겹치는 모양
테두리 및 프레임 처리:
- 한쪽에만 두꺼운 단색 테두리 (10-20pt)
- 대비되는 색상의 이중선 테두리
- 전체 프레임 대신 모서리 괄호
- L자형 테두리 (위+왼쪽 또는 아래+오른쪽)
- 헤더 아래 밑줄 액센트 (3-5pt 두께)
타이포그래피 처리:
- 극단적인 크기 대비 (72pt 제목 vs 11pt 본문)
- 넓은 문자 간격의 대문자 헤더
- 과장된 디스플레이 타입의 번호 매겨진 섹션
- 데이터/통계/기술 콘텐츠에 고정폭 글꼴 (Courier New)
- 밀집된 정보에 좁은 글꼴 (Arial Narrow)
- 강조를 위한 윤곽선 텍스트
차트 및 데이터 스타일링:
- 주요 데이터에 단일 액센트 색상을 사용한 단색 차트
- 세로 막대 차트 대신 가로 막대 차트
- 막대 차트 대신 도트 플롯
- 최소한의 그리드라인 또는 전혀 없음
- 요소에 직접 데이터 레이블 (범례 없음)
- 주요 지표에 과장된 숫자
레이아웃 혁신:
- 텍스트 오버레이가 있는 전체 너비 이미지
- 탐색/컨텍스트용 사이드바 열 (20-30% 너비)
- 모듈형 그리드 시스템 (3×3, 4×4 블록)
- Z-패턴 또는 F-패턴 콘텐츠 흐름
- 색상 모양 위의 떠 있는 텍스트 상자
- 잡지 스타일 다중 열 레이아웃
배경 처리:
- 슬라이드의 40-60%를 차지하는 단색 블록
- 그라데이션 채우기 (수직 또는 대각선만)
- 분할 배경 (두 가지 색상, 대각선 또는 수직)
- 가장자리에서 가장자리까지의 컬러 밴드
- 디자인 요소로서의 네거티브 공간
레이아웃 팁
차트나 테이블이 있는 슬라이드를 만들 때:
- 두 열 레이아웃 (권장): 전체 너비에 걸친 헤더를 사용하고, 아래에 두 개의 열을 배치합니다 - 한 열에는 텍스트/글머리 기호를, 다른 열에는 주요 콘텐츠를 배치합니다. 이렇게 하면 균형이 좋아지고 차트/테이블을 더 읽기 쉽게 만듭니다. 각 콘텐츠 유형에 최적의 공간을 제공하기 위해 flexbox와 불균등 열 너비(예: 40%/60% 분할)를 사용하세요.
- 전체 슬라이드 레이아웃: 최대한의 영향력과 가독성을 위해 주요 콘텐츠(차트/테이블)가 슬라이드 전체를 차지하게 하세요.
- 절대 수직으로 쌓지 마세요: 차트/테이블을 텍스트 아래 단일 열에 배치하지 마세요. 이렇게 하면 가독성이 떨어지고 레이아웃 문제가 발생합니다.
워크플로
- 필수 - 전체 파일 읽기:
html2pptx.md를 처음부터 끝까지 완전히 읽으세요. 이 파일을 읽을 때 절대로 범위 제한을 설정하지 마세요. 프레젠테이션 생성을 진행하기 전에 자세한 구문, 중요한 서식 규칙, 모범 사례를 위해 전체 파일 내용을 읽으세요. - 적절한 크기(예: 16:9의 경우 720pt × 405pt)로 각 슬라이드에 대한 HTML 파일을 생성하세요.
- 모든 텍스트 콘텐츠에는
<p>,<h1>-<h6>,<ul>,<ol>을 사용하세요. - 차트/테이블이 추가될 영역에
class="placeholder"를 사용하세요. (가시성을 위해 회색 배경으로 렌더링) - 중요: 먼저 Sharp를 사용하여 그라데이션과 아이콘을 PNG 이미지로 래스터화한 다음 HTML에서 참조하세요.
- 레이아웃: 차트/테이블/이미지가 있는 슬라이드의 경우, 전체 슬라이드 레이아웃 또는 두 열 레이아웃을 사용하여 가독성을 높이세요.
- 모든 텍스트 콘텐츠에는
html2pptx.js라이브러리를 사용하여 JavaScript 파일을 만들고 실행하여 HTML 슬라이드를 PowerPoint로 변환하고 프레젠테이션을 저장하세요.- 각 HTML 파일을 처리하려면
html2pptx()함수를 사용하세요. - PptxGenJS API를 사용하여 자리 표시자 영역에 차트와 테이블을 추가하세요.
pptx.writeFile()을 사용하여 프레젠테이션을 저장하세요.
- 각 HTML 파일을 처리하려면
- 시각적 검증: 썸네일을 생성하고 레이아웃 문제를 검사하세요.
- 썸네일 그리드 생성:
python scripts/thumbnail.py output.pptx workspace/thumbnails --cols 4 - 썸네일 이미지를 읽고 다음 사항을 주의 깊게 검사하세요:
- 텍스트 잘림: 헤더 바, 모양 또는 슬라이드 가장자리로 인해 텍스트가 잘리는 경우
- 텍스트 겹침: 텍스트가 다른 텍스트나 모양과 겹치는 경우
- 위치 문제: 콘텐츠가 슬라이드 경계나 다른 요소에 너무 가까운 경우
- 대비 문제: 텍스트와 배경 간의 대비 부족
- 문제가 발견되면 HTML 마진/간격/색상을 조정하고 프레젠테이션을 다시 생성하세요.
- 모든 슬라이드가 시각적으로 올바를 때까지 반복하세요.
- 썸네일 그리드 생성:
기존 PowerPoint 프레젠테이션 편집
기존 PowerPoint 프레젠테이션에서 슬라이드를 편집할 때는 원시 Office Open XML (OOXML) 형식으로 작업해야 합니다. 여기에는 .pptx 파일 압축 풀기, XML 콘텐츠 편집, 다시 압축하기가 포함됩니다.
워크플로
- 필수 - 전체 파일 읽기:
ooxml.md(~500줄)를 처음부터 끝까지 완전히 읽으세요. 이 파일을 읽을 때 절대로 범위 제한을 설정하지 마세요. 프레젠테이션 편집을 진행하기 전에 OOXML 구조 및 편집 워크플로에 대한 자세한 지침을 위해 전체 파일 내용을 읽으세요. - 프레젠테이션 압축 풀기:
python ooxml/scripts/unpack.py <office_file> <output_dir> - XML 파일 편집 (주로
ppt/slides/slide{N}.xml및 관련 파일) - 중요: 각 편집 후 즉시 검증하고 진행하기 전에 검증 오류를 수정하세요:
python ooxml/scripts/validate.py <dir> --original <file> - 최종 프레젠테이션 압축:
python ooxml/scripts/pack.py <input_directory> <office_file>
템플릿을 사용하여 새 PowerPoint 프레젠테이션 만들기
기존 템플릿의 디자인을 따르는 프레젠테이션을 만들어야 할 때는 템플릿 슬라이드를 복제하고 재배열한 다음 자리 표시자 콘텐츠를 교체해야 합니다.
워크플로
-
템플릿 텍스트 추출 및 시각적 썸네일 그리드 생성:
- 텍스트 추출:
python -m markitdown template.pptx > template-content.md template-content.md읽기: 템플릿 프레젠테이션의 콘텐츠를 이해하기 위해 전체 파일을 읽습니다. 이 파일을 읽을 때 절대로 범위 제한을 설정하지 마세요.- 썸네일 그리드 생성:
python scripts/thumbnail.py template.pptx - 자세한 내용은 썸네일 그리드 생성 섹션을 참조하세요.
- 텍스트 추출:
-
템플릿 분석 및 인벤토리를 파일에 저장:
- 시각적 분석: 슬라이드 레이아웃, 디자인 패턴, 시각적 구조를 이해하기 위해 썸네일 그리드를 검토하세요.
template-inventory.md파일에 템플릿 인벤토리를 생성하고 저장하세요. 내용은 다음과 같아야 합니다:# 템플릿 인벤토리 분석 **전체 슬라이드: [count]** **중요: 슬라이드는 0부터 시작합니다 (첫 번째 슬라이드 = 0, 마지막 슬라이드 = count-1)** ## [카테고리 이름] - 슬라이드 0: [레이아웃 코드 (있는 경우)] - 설명/용도 - 슬라이드 1: [레이아웃 코드] - 설명/용도 - 슬라이드 2: [레이아웃 코드] - 설명/용도 [... 모든 슬라이드는 인덱스와 함께 개별적으로 나열되어야 함 ...]- 썸네일 그리드 사용: 시각적 썸네일을 참조하여 다음을 식별하세요:
- 레이아웃 패턴 (제목 슬라이드, 콘텐츠 레이아웃, 섹션 구분선)
- 이미지 자리 표시자 위치 및 개수
- 슬라이드 그룹 간 디자인 일관성
- 시각적 계층 구조 및 구조
- 이 인벤토리 파일은 다음 단계에서 적절한 템플릿을 선택하는 데 필요합니다.
-
템플릿 인벤토리를 기반으로 프레젠테이션 개요 생성:
- 2단계에서 사용 가능한 템플릿을 검토하세요.
- 첫 번째 슬라이드에는 소개 또는 제목 템플릿을 선택하세요. 이는 첫 번째 템플릿 중 하나여야 합니다.
- 다른 슬라이드에는 안전하고 텍스트 기반 레이아웃을 선택하세요.
- 중요: 실제 콘텐츠에 레이아웃 구조를 일치시키세요:
- 단일 열 레이아웃: 통일된 내러티브 또는 단일 주제에 사용
- 두 열 레이아웃: 정확히 2개의 개별 항목/개념이 있는 경우에만 사용
- 세 열 레이아웃: 정확히 3개의 개별 항목/개념이 있는 경우에만 사용
- 이미지 + 텍스트 레이아웃: 실제 삽입할 이미지가 있는 경우에만 사용
- 인용 레이아웃: 강조 용도가 아니라 실제 사람의 인용문(출처 포함)에만 사용
- 콘텐츠보다 자리 표시자가 더 많은 레이아웃은 절대 사용하지 마세요.
- 항목이 2개인 경우 3열 레이아웃에 강제로 넣지 마세요.
- 항목이 4개 이상인 경우 여러 슬라이드로 나누거나 목록 형식을 사용하는 것을 고려하세요.
- 레이아웃을 선택하기 전에 실제 콘텐츠 조각 수를 세세요.
- 선택한 레이아웃의 각 자리 표시자가 의미 있는 콘텐츠로 채워질지 확인하세요.
- 각 콘텐츠 섹션에 최상의 레이아웃을 나타내는 하나의 옵션을 선택하세요.
- 사용 가능한 디자인을 활용하는 콘텐츠 및 템플릿 매핑과 함께
outline.md를 저장하세요.
-
프레젠테이션 구성 및 템플릿 슬라이드 복제:
- 개요를 기반으로 템플릿 프레젠테이션을 수정하기 위해 OOXML 워크플로를 사용하세요.
ppt/slides/디렉토리에서 기존slide{N}.xml파일을 복사하여 템플릿 슬라이드를 복제하세요.- 각 새 슬라이드에 대해
[Content_Types].xml을 업데이트하세요. ppt/presentation.xml의 관계를 업데이트하여 새 슬라이드 순서를 반영하세요.ppt/slides/_rels/presentation.xml.rels의 관계를 업데이트하세요.- 슬라이드 마스터 관계(있는 경우)를 업데이트하세요.
-
자리 표시자 콘텐츠를 실제 콘텐츠로 교체:
- 인덱스를 일치시켜 각 슬라이드에서 올바른 자리 표시자 요소를 식별하세요. (슬라이드 OOXML의
<p:ph>또는<ph>요소) 중요: 슬라이드 번호와 자리 표시자 인덱스가 일치하는지 항상 확인하세요. 템플릿의 평면도를 유지하고 각 자리 표시자에 올바른 콘텐츠가 있는지 확인하세요. - 텍스트 자리 표시자:
<a:t>요소 내부의 텍스트를 교체하세요. - 이미지 자리 표시자: 미디어 파일을 교체하고 관계를 업데이트하세요.
- 인덱스 혼동을 방지하려면 각 슬라이드를 개별적으로 처리하세요.
- 인덱스를 일치시켜 각 슬라이드에서 올바른 자리 표시자 요소를 식별하세요. (슬라이드 OOXML의
-
정기적으로 검증 및 압축: 각 슬라이드를 편집한 후:
python ooxml/scripts/validate.py <dir> --original <file>을 실행하세요.- 검증 오류를 수정하고 올바른 슬라이드 인덱스와 관계를 확인하세요.
- 모든 편집이 완료되면 최종 출력을 압축하세요:
python ooxml/scripts/pack.py <input_directory> <office_file>
썸네일 그리드 생성
썸네일을 생성하고 여러 프레젠테이션 파일의 레이아웃을 검사하려면:
python scripts/thumbnail.py <presentation> [workspace/folder] [--cols <number>]
예시:
# 단일 파일, 3열 그리드
python scripts/thumbnail.py template.pptx workspace/ --cols 3
# 여러 파일, 각 파일에 대해 별도의 그리드 생성
python scripts/thumbnail.py template.pptx output.pptx workspace/ --cols 4
생성된 썸네일 이미지를 읽어 레이아웃, 텍스트 위치, 디자인 및 시각적 문제를 이해하세요.