File size: 5,058 Bytes
32d94cc
4960cb4
 
322012d
0259f08
 
 
 
 
3866c77
de2125a
0259f08
a5582cc
 
0259f08
194c66b
0259f08
 
194c66b
0259f08
 
194c66b
 
0259f08
 
194c66b
0259f08
 
194c66b
 
0259f08
 
 
194c66b
0259f08
 
194c66b
7714ced
 
 
 
 
 
 
 
 
 
c5836b4
32a03d4
0259f08
 
194c66b
0259f08
 
194c66b
0259f08
 
194c66b
db2df24
32a03d4
 
 
0259f08
 
 
194c66b
0259f08
 
 
194c66b
 
0259f08
194c66b
0259f08
194c66b
0259f08
 
194c66b
0259f08
 
194c66b
0259f08
194c66b
0259f08
 
 
 
 
a5582cc
50d0eb5
b94d0bd
 
0259f08
 
b94d0bd
 
 
0259f08
 
 
194c66b
 
0259f08
 
bed2c62
0259f08
 
194c66b
0259f08
 
21fe8fd
0259f08
21fe8fd
0259f08
194c66b
0259f08
 
 
 
 
 
 
de2125a
0259f08
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
import os
import presentation_assistant.env_set as env
env.env_set()
print(os.getcwd())

import streamlit as st
import PyPDF2
import openai
import subprocess
from io import BytesIO
from pptx import Presentation


import presentation_assistant.presentation_assistant as pa

tab1, tab2, tab3 = st.tabs(['What is PA!?', 'Text2PPT', 'PPT2Script'])

with tab1:
    st.header('Introduction')
    st.title('PA!(Presentation Assistant):sparkles:')
    contents = """
    ▶ Based on the content entered by the user, it :blue[automatically creates] PPT and
      provides a presentation :red[script] to improve presentation skills!"""
    st.markdown(contents)
    st.markdown('-------------------------')
    st.header('How to use')
    st.subheader('Text2PPT')
    contents = """
    ▶ If the user provides a link or file, we will :blue[create a presentation material] for you!
      The user only needs to select the desired theme (template) type and number of pages!"""
    st.markdown(contents)
    st.subheader('PPT2Script')
    contents = """
    ▶ If the user provides PPT or PDF presentation materials, we will automatically create a :blue[presentation script] for you!"""
    st.markdown(contents)

    # Test
    # test_ppt_theme = "--reference-doc="+"/home/user/app/template/blue"+".pptx"
    # subprocess.run(["/home/user/app/pandoc-2.14.2/bin/pandoc", "text2ppt_test.md", "-t", "pptx", test_ppt_theme, "-o", "output.pptx"], capture_output=True)
    # print(os.listdir(os.getcwd()))
    # prs = Presentation("output.pptx")
    # binary_output = BytesIO()
    # prs.save(binary_output)
    # st.download_button(label="Download PPT",
    #                  data = binary_output.getvalue(),
    #                 file_name="export_output.pptx",
    #                 mime='application/octet-stream', key = "<Text2PPT_test_download>")


with tab2:
    st.header('Text2PPT')
    gpt_token = st.text_input('Please enter your ChatGPT API token.', key="<Text2PPT_token>")
    st.markdown('-------------------------')

    st.subheader(':computer: PPT Auto Generator :computer:')

    thema_select = st.selectbox(
        'Please select the template you want.',
        ['default', 'yellow', 'gradation_green', 'blue', 'green', 'custom'])
    
    if thema_select == "custom":
        uploaded_template_file = st.file_uploader('Choose File!', type='pptx', key="<template_uploader>")

    st.markdown('-------------------------')

    page_choice = st.slider('Number of PPT pages', min_value=2, max_value=10, step=1, value=5)

    st.markdown('-------------------------')

    my_order = ['Text', 'Link', 'PDF']
    status = st.radio('Please select the file type and enter the content! :smile: ', my_order)

    # First method
    if status == my_order[0]:
        input_text = st.text_area('Enter TEXT', height=5)

    elif status == my_order[1]:
        input_text = st.text_area('Enter URL', height=5)

    elif status == my_order[2]:
        input_text = st.file_uploader('Upload PDF', type=['pdf'])

    input_text_check = st.button('Confirm', key="<Text2PPT_start>")

    st.markdown('-------------------------')

    if input_text_check == True:
        with st.spinner('Wait for it...'):
            pa.text2ppt(gpt_token, pa.generate_text2ppt_input_prompt(status, input_text, page_choice), thema_select)
            prs = Presentation("text2ppt_output.pptx")
            binary_output = BytesIO()
            prs.save(binary_output)
        st.success('Done!')
        st.download_button(label="Download PPT",
                            data = binary_output.getvalue(),
                            file_name="export_output.pptx",
                            mime='application/octet-stream', key = "<Text2PPT_download>")

with tab3:
    st.header('PPT2Script')
    st.subheader(':computer: Script Auto Generator :computer:')
    gpt_token = st.text_input('Please enter your ChatGPT API token.', key="<PPT2Script_token>")
    st.markdown('-------------------------')

    st.subheader(':bookmark_tabs: Presentation Script Generator')

    file_order = ['PDF', 'PPT']
    choose = st.radio('Please select the file format of the presentation material', file_order)

    if choose == file_order[0]:
        uploaded_file = st.file_uploader('Choose File!', type='pdf', key="<PPT2Script_pdf_uploader>")
    elif choose == file_order[1]:
        uploaded_file = st.file_uploader('Choose File!', type='pptx', key="<PPT2Script_ppt_uploader>")

    input_file_check = st.button('Confirm', key="<PPT2Script_start>")  # When this button is pressed, the input file should be passed
    st.markdown('-------------------------')

    if input_file_check == True:
        with st.spinner('Wait for it...'):
            with open(uploaded_file.name, mode='wb') as w:
                w.write(uploaded_file.getvalue())

            script = pa.ppt2script(gpt_token, uploaded_file.name, choose)

        st.success('Done!')
        st.download_button('Download Script',
                           data=script, file_name="script_output.txt", key="<PPT2Script_download>")