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' )