File size: 5,057 Bytes
863ee52
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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>")