Spaces:
Paused
Paused
import json5 | |
import pptx | |
from pptx.dml.color import RGBColor | |
def generate_powerpoint_presentation(structured_contents: str, output_file_name: str): | |
""" | |
Create and save a PowerPoint presentation file containing the contents. | |
:param structured_contents: The presentation contents in "JSON" format (may contain trailing commas) | |
:param output_file_name: The name of the PPTX file to save as | |
""" | |
# The structured "JSON" contains trailing commas, so using json5 | |
json_data = json5.loads(structured_contents) | |
presentation = pptx.Presentation() | |
# The title slide | |
title_slide_layout = presentation.slide_layouts[0] | |
slide = presentation.slides.add_slide(title_slide_layout) | |
title = slide.shapes.title | |
subtitle = slide.placeholders[1] | |
title.text = json_data['presentation_title'] | |
subtitle.text = 'Generated by Slides Wizard AI :)' | |
background = slide.background | |
background.fill.solid() | |
background.fill.fore_color.rgb = RGBColor.from_string('C0C0C0') # Silver | |
title.text_frame.paragraphs[0].font.color.rgb = RGBColor(0, 0, 128) # Navy blue | |
# Add content in a loop | |
for a_slide in json_data['slides']: | |
bullet_slide_layout = presentation.slide_layouts[1] | |
slide = presentation.slides.add_slide(bullet_slide_layout) | |
shapes = slide.shapes | |
title_shape = shapes.title | |
body_shape = shapes.placeholders[1] | |
title_shape.text = a_slide['slide_heading'] | |
text_frame = body_shape.text_frame | |
for an_item in a_slide['slide_contents']: | |
paragraph = text_frame.add_paragraph() | |
paragraph.text = an_item | |
paragraph.level = 0 | |
background = slide.background | |
background.fill.gradient() | |
background.fill.gradient_angle = -225.0 | |
# The thank-you slide | |
last_slide_layout = presentation.slide_layouts[0] | |
slide = presentation.slides.add_slide(last_slide_layout) | |
title = slide.shapes.title | |
title.text = 'Thank you!' | |
presentation.save(output_file_name) | |
if __name__ == '__main__': | |
generate_powerpoint_presentation( | |
json5.loads(open('examples/example_02_structured_output.json', 'r').read()), | |
'test.pptx' | |
) | |