from pptx import Presentation
from pptx.slide import Slide
from pptx.slide import NotesSlide
from pptx.text.text import TextFrame
from pptx.shapes.shapetree import SlideShapes
from pptx.shapes.placeholder import SlidePlaceholder
import json

path = “C:/luo/tmp/tmpl/009999.pptx”
prs = Presentation(path)

def res(obj) -> Slide:
return obj
def res2(obj) -> NotesSlide:
return obj
def res3(obj) -> SlideShapes:
return obj
def res4(obj) -> TextFrame:
return obj
def res5(obj) -> SlidePlaceholder:
return obj

page_ids = {i + 1: slide.slide_id for i, slide in enumerate(prs.slides)}
print(page_ids)
for page in page_ids:
slide = prs.slides.get(page_ids[page])
slide = res(slide)
shapes = res3(slide.shapes)
for shape in shapes:
shape_text = “”
if shape.has_text_frame:
shape_text = shape.text
# shape.text = ”
print(“page: ” + str(page) + “, idx: ” + str(shape.placeholder_format.idx) + “,” + str(shape_text))

# 获取 note
if slide.has_notes_slide and len(str(slide.notes_slide.notes_text_frame.text).strip()) > 0:
notes_slide = res2(slide.notes_slide)
tf = res4(notes_slide.notes_text_frame)
note_json = json.loads(tf.text)
for jn in note_json:
print(jn[‘name’])
tf.text = ” # 用于 prs.save(path) 做清除 note

output = “C:/luo/tmp/tmpl/009999-gen-report.pptx”
prs.save(output)