42 lines
1.1 KiB
Python
42 lines
1.1 KiB
Python
from pptx import Presentation
|
|
|
|
# load the uploaded file
|
|
input_path = "./tech_project_proposal_ideas_dark_theme.pptx"
|
|
output_path = "./new_pptx.pptx"
|
|
|
|
def to_title_case(text: str) -> str:
|
|
if not text:
|
|
return text
|
|
# title case for slide titles (major words capitalized)
|
|
return text.title()
|
|
|
|
def to_sentence_case(text: str) -> str:
|
|
if not text:
|
|
return text
|
|
text = text.strip()
|
|
if not text:
|
|
return text
|
|
# sentence case for bullet points
|
|
return text[0].upper() + text[1:]
|
|
|
|
# open ppt
|
|
prs = Presentation(input_path)
|
|
|
|
for slide in prs.slides:
|
|
for shape in slide.shapes:
|
|
if not shape.has_text_frame:
|
|
continue
|
|
tf = shape.text_frame
|
|
# heuristics: assume first shape (or largest font) in slide is the title
|
|
if slide.shapes.index(shape) == 0 or "title" in shape.name.lower():
|
|
for para in tf.paragraphs:
|
|
para.text = to_title_case(para.text)
|
|
else:
|
|
for para in tf.paragraphs:
|
|
para.text = to_sentence_case(para.text)
|
|
|
|
# save output
|
|
prs.save(output_path)
|
|
|
|
output_path
|