barunsaha commited on
Commit
c0b5a2b
1 Parent(s): c6643c7

Add three presentation templates and remove background colors

Browse files
.gitignore CHANGED
@@ -1,7 +1,7 @@
1
  client_secret.json
2
  credentials.json
3
  token.json
4
- *.pptx
5
 
6
 
7
  ### Python template
 
1
  client_secret.json
2
  credentials.json
3
  token.json
4
+ /*.pptx
5
 
6
 
7
  ### Python template
app.py CHANGED
@@ -31,6 +31,7 @@ def build_ui():
31
  except (FileExistsError, FileNotFoundError):
32
  preload_data = {'topic': '', 'audience': ''}
33
 
 
34
  topic = st.text_area(
35
  APP_TEXT['input_labels'][0],
36
  value=preload_data['topic']
@@ -38,8 +39,14 @@ def build_ui():
38
 
39
  # Button with callback function
40
  st.button(APP_TEXT['button_labels'][0], on_click=button_clicked, args=[0])
 
 
 
 
 
41
 
42
  if st.session_state.clicked[0]:
 
43
  progress_text = 'Generating your presentation slides...give it a moment'
44
  progress_bar = st.progress(0, text=progress_text)
45
 
@@ -59,7 +66,7 @@ def process_topic_inputs(topic: str, progress_bar):
59
  topic_length = len(topic)
60
  print(f'Input length:: topic: {topic_length}')
61
 
62
- if topic_length > 10:
63
  print(
64
  f'Topic: {topic}\n'
65
  )
@@ -139,9 +146,22 @@ def process_slides_contents(text: str, progress_bar: st.progress):
139
  st.header(APP_TEXT['section_headers'][2])
140
  st.caption(APP_TEXT['section_captions'][2])
141
 
 
 
 
 
 
 
 
 
 
 
 
142
  st.button(APP_TEXT['button_labels'][2], on_click=button_clicked, args=[2])
 
143
 
144
  if st.session_state.clicked[2]:
 
145
  progress_text = 'Creating the slide deck...give it a moment'
146
  progress_bar = st.progress(0, text=progress_text)
147
 
@@ -154,6 +174,7 @@ def process_slides_contents(text: str, progress_bar: st.progress):
154
  all_headers = pptx_helper.generate_powerpoint_presentation(
155
  json_str,
156
  as_yaml=False,
 
157
  output_file_name=output_file_name
158
  )
159
  progress_bar.progress(100, text='Done!')
 
31
  except (FileExistsError, FileNotFoundError):
32
  preload_data = {'topic': '', 'audience': ''}
33
 
34
+ # with st.form('describe-topic-form'):
35
  topic = st.text_area(
36
  APP_TEXT['input_labels'][0],
37
  value=preload_data['topic']
 
39
 
40
  # Button with callback function
41
  st.button(APP_TEXT['button_labels'][0], on_click=button_clicked, args=[0])
42
+ # desc_topic_btn_submitted = st.form_submit_button(
43
+ # APP_TEXT['button_labels'][0],
44
+ # on_click=button_clicked,
45
+ # args=[0]
46
+ # )
47
 
48
  if st.session_state.clicked[0]:
49
+ # if desc_topic_btn_submitted:
50
  progress_text = 'Generating your presentation slides...give it a moment'
51
  progress_bar = st.progress(0, text=progress_text)
52
 
 
66
  topic_length = len(topic)
67
  print(f'Input length:: topic: {topic_length}')
68
 
69
+ if topic_length >= 10:
70
  print(
71
  f'Topic: {topic}\n'
72
  )
 
146
  st.header(APP_TEXT['section_headers'][2])
147
  st.caption(APP_TEXT['section_captions'][2])
148
 
149
+ texts = list(GlobalConfig.PPTX_TEMPLATE_FILES.keys())
150
+ captions = [GlobalConfig.PPTX_TEMPLATE_FILES[x]['caption'] for x in texts]
151
+
152
+ # with st.form('create-slides-form'):
153
+ pptx_template = st.radio(
154
+ 'Select a presentation template:',
155
+ texts,
156
+ captions=captions,
157
+ horizontal=True
158
+ )
159
+
160
  st.button(APP_TEXT['button_labels'][2], on_click=button_clicked, args=[2])
161
+ # create_slides_btn_submitted = st.form_submit_button(APP_TEXT['button_labels'][2])
162
 
163
  if st.session_state.clicked[2]:
164
+ # if create_slides_btn_submitted:
165
  progress_text = 'Creating the slide deck...give it a moment'
166
  progress_bar = st.progress(0, text=progress_text)
167
 
 
174
  all_headers = pptx_helper.generate_powerpoint_presentation(
175
  json_str,
176
  as_yaml=False,
177
+ slides_template=pptx_template,
178
  output_file_name=output_file_name
179
  )
180
  progress_bar.progress(100, text='Done!')
global_config.py CHANGED
@@ -28,3 +28,18 @@ class GlobalConfig:
28
  PRELOAD_DATA_FILE = 'examples/example_02.json'
29
  SLIDES_TEMPLATE_FILE = 'langchain_templates/template_07.txt'
30
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
28
  PRELOAD_DATA_FILE = 'examples/example_02.json'
29
  SLIDES_TEMPLATE_FILE = 'langchain_templates/template_07.txt'
30
 
31
+ PPTX_TEMPLATE_FILES = {
32
+ 'Blank': {
33
+ 'file': 'pptx_templates/Blank.pptx',
34
+ 'caption': 'Good for starting'
35
+ },
36
+ 'Ion Boardroom': {
37
+ 'file': 'pptx_templates/Ion_Boardroom.pptx',
38
+ 'caption': 'Choose some bold colors'
39
+ },
40
+ 'Urban Monochrome': {
41
+ 'file': 'pptx_templates/Urban_monochrome.pptx',
42
+ 'caption': 'Bring in some elegance'
43
+ }
44
+ }
45
+
pptx_helper.py CHANGED
@@ -4,7 +4,7 @@ import pptx
4
  import re
5
  import yaml
6
 
7
- from pptx.dml.color import RGBColor
8
 
9
 
10
  PATTERN = re.compile(r"^slide[ ]+\d+:", re.IGNORECASE)
@@ -24,12 +24,18 @@ def remove_slide_number_from_heading(header: str) -> str:
24
  return header
25
 
26
 
27
- def generate_powerpoint_presentation(structured_data: str, as_yaml: bool, output_file_name: str) -> List:
 
 
 
 
 
28
  """
29
  Create and save a PowerPoint presentation file containing the contents in JSON or YAML format.
30
 
31
  :param structured_data: The presentation contents as "JSON" (may contain trailing commas) or YAML
32
  :param as_yaml: True if the input data is in YAML format; False if it is in JSON format
 
33
  :param output_file_name: The name of the PPTX file to save as
34
  :return A list of presentation title and slides headers
35
  """
@@ -45,7 +51,8 @@ def generate_powerpoint_presentation(structured_data: str, as_yaml: bool, output
45
  # The structured "JSON" might contain trailing commas, so using json5
46
  parsed_data = json5.loads(structured_data)
47
 
48
- presentation = pptx.Presentation()
 
49
 
50
  # The title slide
51
  title_slide_layout = presentation.slide_layouts[0]
@@ -57,10 +64,10 @@ def generate_powerpoint_presentation(structured_data: str, as_yaml: bool, output
57
  subtitle.text = 'by Myself and SlideDeck AI :)'
58
  all_headers = [title.text, ]
59
 
60
- background = slide.background
61
- background.fill.solid()
62
- background.fill.fore_color.rgb = RGBColor.from_string('C0C0C0') # Silver
63
- title.text_frame.paragraphs[0].font.color.rgb = RGBColor(0, 0, 128) # Navy blue
64
 
65
  # Add contents in a loop
66
  for a_slide in parsed_data['slides']:
@@ -89,9 +96,9 @@ def generate_powerpoint_presentation(structured_data: str, as_yaml: bool, output
89
  paragraph.text = sub_item
90
  paragraph.level = 1
91
 
92
- background = slide.background
93
- background.fill.gradient()
94
- background.fill.gradient_angle = -225.0
95
 
96
  # The thank-you slide
97
  last_slide_layout = presentation.slide_layouts[0]
 
4
  import re
5
  import yaml
6
 
7
+ from global_config import GlobalConfig
8
 
9
 
10
  PATTERN = re.compile(r"^slide[ ]+\d+:", re.IGNORECASE)
 
24
  return header
25
 
26
 
27
+ def generate_powerpoint_presentation(
28
+ structured_data: str,
29
+ as_yaml: bool,
30
+ slides_template: str,
31
+ output_file_name: str
32
+ ) -> List:
33
  """
34
  Create and save a PowerPoint presentation file containing the contents in JSON or YAML format.
35
 
36
  :param structured_data: The presentation contents as "JSON" (may contain trailing commas) or YAML
37
  :param as_yaml: True if the input data is in YAML format; False if it is in JSON format
38
+ :param slides_template: The PPTX template to use
39
  :param output_file_name: The name of the PPTX file to save as
40
  :return A list of presentation title and slides headers
41
  """
 
51
  # The structured "JSON" might contain trailing commas, so using json5
52
  parsed_data = json5.loads(structured_data)
53
 
54
+ print(f"*** Using PPTX template: {GlobalConfig.PPTX_TEMPLATE_FILES[slides_template]['file']}")
55
+ presentation = pptx.Presentation(GlobalConfig.PPTX_TEMPLATE_FILES[slides_template]['file'])
56
 
57
  # The title slide
58
  title_slide_layout = presentation.slide_layouts[0]
 
64
  subtitle.text = 'by Myself and SlideDeck AI :)'
65
  all_headers = [title.text, ]
66
 
67
+ # background = slide.background
68
+ # background.fill.solid()
69
+ # background.fill.fore_color.rgb = RGBColor.from_string('C0C0C0') # Silver
70
+ # title.text_frame.paragraphs[0].font.color.rgb = RGBColor(0, 0, 128) # Navy blue
71
 
72
  # Add contents in a loop
73
  for a_slide in parsed_data['slides']:
 
96
  paragraph.text = sub_item
97
  paragraph.level = 1
98
 
99
+ # background = slide.background
100
+ # background.fill.gradient()
101
+ # background.fill.gradient_angle = -225.0
102
 
103
  # The thank-you slide
104
  last_slide_layout = presentation.slide_layouts[0]
pptx_templates/Blank.pptx ADDED
Binary file (33.9 kB). View file
 
pptx_templates/Ion_Boardroom.pptx ADDED
Binary file (619 kB). View file
 
pptx_templates/Urban_monochrome.pptx ADDED
Binary file (44.4 kB). View file