import os import yaml from pptx import Presentation from pptx.util import Inches from pptx.enum.shapes import MSO_SHAPE def read_configuration(config_file): with open(config_file) as f: cfg = yaml.load(f) return cfg def generate_presentation(): cfg = read_configuration( os.getenv('CONFIGURATION_FILENAME', 'presentation.yml')) prs = Presentation() title_slide = prs.slide_layouts[0] slide = prs.slides.add_slide(title_slide) title = slide.shapes.title title.text = cfg['title_page']['title'] prs.save(os.getenv('PRESENTATION_NAME', 'devops-for-powerpoint.pptx')) def layout_handler(layout_name, presentation_object): for layout in presentation_object.slide_layouts: if layout.name == layout_name: return layout def generate_slides(): cfg = read_configuration( os.getenv('CONFIGURATION_FILENAME', 'presentation.yml')) prs = Presentation() for i in sorted(cfg): slide = prs.slides.add_slide( layout_handler(cfg[i]['slide_layout'], prs)) title = slide.shapes.title title.text = cfg[i]['title'] if 'content' in cfg[i]: content = slide.placeholders[1] content.text = cfg[i]['content'] if 'position' in cfg[i]: shapes = slide.shapes left = Inches(cfg[i]['position']['left']) top = Inches(cfg[i]['position']['top']) width = Inches(cfg[i]['position']['width']) height = Inches(cfg[i]['position']['height']) shape = shapes.add_shape( MSO_SHAPE.CHEVRON, left, top, width, height) left = left + width - Inches(0.4) width = Inches(2.0) for n in range(2, 6): shape = shapes.add_shape( MSO_SHAPE.CHEVRON, left, top, width, height) shape.text = 'Step yo: %d' % n left = left + width - Inches(0.4) prs.save(os.getenv('PRESENTATION_NAME', 'devops-for-powerpoint.pptx')) if __name__ == '__main__': # generate_presentation() generate_slides()