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 헤드라인 대 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라이브러리를 사용하여 HTML 슬라이드를 PowerPoint로 변환하고 프레젠테이션을 저장하는 JavaScript 파일을 만들고 실행하세요.- 각 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에 템플릿 인벤토리 파일을 만들고 저장하세요:# 템플릿 인벤토리 분석 **총 슬라이드 수: [개수]** **중요: 슬라이드는 0부터 시작합니다(첫 번째 슬라이드 = 0, 마지막 슬라이드 = 개수-1)** ## [카테고리 이름] - 슬라이드 0: [레이아웃 코드(사용 가능한 경우)] - 설명/목적 - 슬라이드 1: [레이아웃 코드] - 설명/목적 - 슬라이드 2: [레이아웃 코드] - 설명/목적 [... 모든 슬라이드를 인덱스와 함께 개별적으로 나열해야 합니다...] - 썸네일 그리드 사용: 시각적 썸네일을 참조하여 다음을 식별하세요:
- 레이아웃 패턴(제목 슬라이드, 콘텐츠 레이아웃, 섹션 구분 기호)
- 이미지 자리 표시자 위치 및 개수
- 슬라이드 그룹 전체의 디자인 일관성
- 시각적 위계 및 구조
- 이 인벤토리 파일은 다음 단계에서 적절한 템플릿을 선택하는 데 필수입니다.
-
템플릿 인벤토리를 기반으로 프레젠테이션 개요 만들기:
- 2단계에서 사용 가능한 템플릿을 검토하세요.
- 첫 번째 슬라이드에 대한 소개 또는 제목 템플릿을 선택하세요. 이것은 첫 번째 템플릿 중 하나여야 합니다.
- 다른 슬라이드에는 안전하고 텍스트 기반 레이아웃을 선택하세요.
- 중요: 레이아웃 구조를 실제 내용과 일치시키세요:
- 단일 열 레이아웃: 통합된 내러티브 또는 단일 주제에 사용
- 두 열 레이아웃: 정확히 2개의 개별 항목/개념이 있는 경우에만 사용
- 세 열 레이아웃: 정확히 3개의 개별 항목/개념이 있는 경우에만 사용
- 이미지 + 텍스트 레이아웃: 삽입할 실제 이미지가 있는 경우에만 사용
- 인용 레이아웃: 강조를 위한 것이 아닌, 실제 사람의 인용문(출처 포함)에만 사용
- 보유한 콘텐츠보다 더 많은 자리 표시자가 있는 레이아웃은 사용하지 마세요.
- 항목이 2개인 경우 3열 레이아웃에 강제로 넣지 마세요.
- 항목이 4개 이상인 경우 여러 슬라이드로 나누거나 목록 형식을 사용하는 것이 좋습니다.
- 레이아웃을 선택하기 전에 실제 콘텐츠 조각 수를 세세요.
- 선택한 레이아웃의 각 자리 표시자가 의미 있는 콘텐츠로 채워질지 확인하세요.
- 각 콘텐츠 섹션에 대해 최고의 레이아웃을 나타내는 하나의 옵션을 선택하세요.
- 사용 가능한 디자인을 활용하는 콘텐츠 및 템플릿 매핑과 함께
outline.md를 저장하세요. - 템플릿 매핑 예시:
## 슬라이드별 개요 - **슬라이드 1** (템플릿: 슬라이드 0 - 제목 슬라이드) - 제목 [자리 표시자 0]: [최종 제목] - 부제목 [자리 표시자 1]: [부제목]
-
URL/파일에서 이미지 캐싱: (이미지가 있는 경우에만)
wget <image_url> -O workspace/images/image_0.png또는python scripts/fetch_images.py <url_list_file>사용- 참고: 워크플로우를 계속하기 전에 모든 이미지가 다운로드되었는지 확인하세요.
-
OOXML 편집 워크플로우를 사용하여 프레젠테이션 만들기:
- 템플릿 프레젠테이션의 압축을 풉니다:
python ooxml/scripts/unpack.py template.pptx unpacked/ - 내용과 이미지를 바꾸려면 XML 파일을 직접 편집하세요.
- 필수: 편집할 때마다 유효성을 검사하세요:
python ooxml/scripts/validate.py unpacked/ --original template.pptx - 편집을 완료한 후 압축:
python ooxml/scripts/pack.py unpacked/ output.pptx
- 템플릿 프레젠테이션의 압축을 풉니다:
-
시각적 검증: 썸네일을 생성하고 레이아웃 문제를 검사하세요.
- 썸네일 그리드 생성:
python scripts/thumbnail.py output.pptx workspace/thumbnails --cols 4 - 썸네일 이미지를 읽고 주의 깊게 검사하세요:
- 텍스트 잘림, 텍스트 겹침, 위치 문제, 대비 문제
- 문제가 발견되면 HTML 여백/간격/색상을 조정하고 프레젠테이션을 다시 생성하세요.
- 모든 슬라이드가 시각적으로 올바를 때까지 반복하세요.
- 썸네일 그리드 생성:
썸네일 그리드 만들기
썸네일 생성
python scripts/thumbnail.py <input.pptx> <output_dir> [--cols <columns>] 명령을 사용하여 프레젠테이션 슬라이드의 시각적 개요를 생성합니다. 이 명령은 각 슬라이드의 썸네일이 포함된 그리드 이미지를 생성합니다.
선택적 인수:
--cols(기본값: 4): 그리드의 열 수를 설정합니다.--format(기본값: png): 출력 이미지 형식을 지정합니다(png, jpg, webp).
스크립트 사용 예시:
python scripts/thumbnail.py output.pptx workspace/thumbnails --cols 4
썸네일 검색
그리드 이미지를 볼 수 없는 경우(예: 팔레트 워크스테이션처럼) python scripts/describe_images.py를 사용하여 썸네일 그리드에 대한 자세한 텍스트 설명을 생성합니다. 이 명령은 workspace/thumbnails에서 썸네일 파일을 자동으로 찾습니다.
프로젝트 구조 및 구성
Permissions
이 패키지의 스크립트는 python 실행자로 실행됩니다.
작업 공간
모든 작업 파일과 생성된 출력물은 workspace/ 디렉토리에 있어야 합니다.
도구
썸네일 생성
프레젠테이션 슬라이드의 시각적 썸네일을 생성합니다.
- Python 스크립트:
python scripts/thumbnail.py <input.pptx> <output_dir> - 인수:
<input.pptx>: 입력 PowerPoint 파일 경로<output_dir>: 썸네일 출력 디렉토리 경로--cols(선택 사항, 기본값: 4): 썸네일 그리드의 열 수
- 출력:
workspace/thumbnails/grid.png: 썸네일 이미지 그리드
이미지 설명
이미지의 텍스트 설명을 생성합니다.
- 명령:
python scripts/describe_images.py - 설명: 썸네일 그리드 이미지를 분석하고 자세한 시각적 설명을 제공합니다.