기술 · 실용 가이드
PowerPoint 노트 내보내기에서 글이 빠졌나요? 네 상태부터 확인하세요
빈 결과에는 서로 다른 원인이 있습니다. 직접 만든 PPTX로 모든 슬라이드를 보존하고 노트 본문 자리 표시자 누락과 빈 노트를 구분했습니다.

노트 내보내기가 오류 없이 끝나도 프레젠테이션 일부를 놓칠 수 있습니다. 원고를 승인하기 전에 각 슬라이드를 노트 슬라이드 없음, BODY 자리 표시자 없음, 빈 BODY, BODY 텍스트 있음으로 구분해 기록하세요. 앞의 두 경우를 의도적으로 비운 노트와 합치면 안 됩니다.
Python 3.12.14와 python-pptx 1.0.2에서 직접 만든 네 슬라이드 PPTX를 시험했습니다. 표시 순서를 바꾼 저장 파일의 슬라이드 ID는 259, 257, 256, 258이었고, 노트 부품은 notesSlide3, 없음, notesSlide1, notesSlide2 순서였습니다. 노트 파일명 정렬로는 이 순서를 복원할 수 없습니다.
감사는 네 레코드와 기존 노트 슬라이드 세 개를 유지했고 입력 파일 SHA-256도 바뀌지 않았습니다. 쉼표, 따옴표, 줄바꿈, 중국어가 들어간 노트는 CSV 저장 후 다시 읽었을 때 정확히 일치했습니다. 별도의 단순 접근은 메모리에 네 번째 노트 슬라이드를 만들었고 BODY가 없는 상태에서 .text를 읽자 AttributeError가 발생했습니다.
이는 범위를 제한한 텍스트 추출 시험이며 PowerPoint 렌더링이나 복구 시험이 아닙니다. 회의 원고나 후속 데이터를 만들기 전에 실제로 무엇을 읽었고 어느 페이지를 작성자에게 확인해야 하는지 파악하는 절차입니다.
실제 슬라이드 순서대로 네 결과를 기록하기
원본을 보존한 사본을 Presentation(path)로 열고 enumerate(prs.slides, 1)를 순회하며 위치와 slide.slide_id를 기록하세요. ID는 해당 프레젠테이션 안의 식별자이며 서로 다른 문서의 공통 ID가 아닙니다. 각 슬라이드의 노트 관계를 따라 읽고 notesSlideN.xml을 N번째 슬라이드로 배정하지 마세요.
먼저 has_notes_slide를 검사해 False면 no-notes-slide로 기록하고 notes_slide에 접근하지 않습니다. 있을 때만 notes_slide.notes_text_frame을 얻습니다. None은 no-body-placeholder, .text가 빈 문자열이면 body-empty, 다른 문자열은 body-text입니다. 공백을 포함한 원문을 보존하세요. 공백만 있는 노트는 별도 플래그로 표시하고 조용히 strip하지 마세요.
BODY 누락을 빈 원고가 아닌 확인할 예외로 처리하기
BODY 자리 표시자는 노트 본문을 읽는 대상입니다. 노트 페이지에는 다른 텍스트 도형과 자리 표시자도 있을 수 있습니다. BODY를 없앤 시험에서는 사용자 지정 텍스트 도형에 검토 문구가 있고 슬라이드 번호 자리 표시자에 999가 있었습니다. 감사는 도형 ID, 이름, 유형, 텍스트를 따로 나열하고 발표자 노트 열은 비워 두었습니다.
모든 도형의 글을 원고로 합치거나 파일을 자동 복구하지 마세요. 사용자 지정 텍스트를 노트 본문으로 옮겨야 하는지는 작성자가 판단해야 합니다. BODY 누락만으로 파일 손상이나 라이브러리 결함을 입증할 수는 없습니다. 업스트림 이슈 983은 예제 파일 요청 뒤 미제출로 종료됐으며 이 글은 그 원인을 확정하지 않습니다.
의미를 보존하며 내보낸 결과 검증하기
position, slide_id, state, notes 같은 열을 명시하고 BODY 누락 도형 목록은 별도 JSON으로 유지하세요. csv.DictWriter, UTF-8, newline=''로 CSV를 쓴 뒤 csv.DictReader로 다시 읽습니다. 레코드 수, 위치, ID, 상태, 노트 문자열 전체를 비교하세요. 따옴표로 묶인 노트는 여러 줄에 걸칠 수 있으므로 물리적 줄 대신 파싱한 레코드를 세야 합니다.
기본 CSV 쓰기는 None을 빈 필드로 만들 수 있어 구분은 state 열에 남겨야 합니다. 시험에서는 네 상태가 유지됐고 따옴표, 줄바꿈, 중국어도 왕복 후 일치했습니다. 'x' 모드로 새 출력을 만들 때 기존 대상 덮어쓰기도 실제로 거부됐습니다. 원본 PPTX를 보존하고 텍스트 추출만을 위해 prs.save를 호출하지 마세요.
예외 목록을 해결한 뒤 원고 승인하기
레코드 수를 전체 슬라이드 수와 맞추고 각 위치가 한 번씩만 나오는지 확인하세요. no-notes-slide와 no-body-placeholder는 작성자와 검토해야 합니다. body-empty는 기존 본문 프레임이 비었다는 뜻이며 의도적으로 비웠다는 증거는 아닙니다. 누락을 허용할 수 없는 작업은 판단을 기록한 뒤 후속 처리를 진행하세요.
공식 문서는 이미 생성 없는 검사와 BODY 누락을 설명합니다. 기존 완성 스크립트도 None 처리 또는 비어 있지 않은 노트만 추출하며 검토한 세 상태 CSV 강좌도 안전하게 누락과 빈 노트를 기록합니다. 이 글이 더한 것은 재현 가능한 네 번째 예외와 승인 기준 비교입니다. PowerPoint, Keynote, Google Slides 화면, 구형 .ppt, 암호화·악성 패키지, 서식 충실도, 마스터에서 상속한 텍스트, 임의 도형의 보편적 복구는 시험하지 않았습니다.
