Presentation-Ai / app.py
Rooni's picture
Update app.py
843e0a7 verified
import os
import presentation_assistant.env_set as env
env.env_set()
print(os.getcwd())
import streamlit as st
import PyPDF2
import subprocess
from io import BytesIO
from pptx import Presentation
import presentation_assistant.presentation_assistant as pa
tab1, tab2, tab3 = st.tabs(['Что такое PA!?', 'Текст в ППТ', 'ППТ в сценарий'])
with tab1:
st.header('Введение')
st.title('PA!(Presentation Assistant)')
contents = """
▶ На основе контента, введенного пользователем, он :blue[автоматически создает] ППТ и
предоставляет :red[сценарий] презентации, чтобы улучшить навыки презентации!"""
st.markdown(contents)
st.markdown('-------------------------')
st.header('Как использовать')
st.subheader('Текст в ППТ')
contents = """
▶ Если пользователь предоставляет ссылку или файл, мы :blue[создадим презентационный материал] для вас!
Пользователю нужно только выбрать желаемый тип темы (шаблон) и количество страниц!"""
st.markdown(contents)
st.subheader('ППТ в сценарий')
contents = """
▶ Если пользователь предоставляет презентационные материалы в формате ППТ или PDF, мы автоматически создадим :blue[сценарий презентации] для вас!"""
st.markdown(contents)
# Тест
# 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="Скачать ППТ",
# data = binary_output.getvalue(),
# file_name="export_output.pptx",
# mime='application/octet-stream', key = "<Text2PPT_test_download>")
with tab2:
st.header('Текст в ППТ')
st.subheader(':computer: Автоматический генератор ППТ :computer:')
theme_select = st.selectbox(
'Выберите шаблон, который вы хотите:',
['по умолчанию', 'желтый', 'зеленая градация', 'синий', 'зеленый', 'пользовательский'])
if theme_select == "пользовательский":
uploaded_template_file = st.file_uploader('Выберите файл!', type='pptx', key="<template_uploader>")
st.markdown('-------------------------')
page_choice = st.slider('Количество страниц ППТ', min_value=2, max_value=12, step=1, value=5)
st.markdown('-------------------------')
my_order = ['Текст', 'Ссылка', 'PDF']
status = st.radio('Выберите тип файла и введите содержимое! :smile: ', my_order)
# Первый метод
if status == my_order[0]:
input_text = st.text_area('Введите ТЕКСТ', height=5)
elif status == my_order[1]:
input_text = st.text_area('Введите URL', height=5)
elif status == my_order[2]:
input_text = st.file_uploader('Загрузите PDF', type=['pdf'])
input_text_check = st.button('Подтвердить', key="<Text2PPT_start>")
st.markdown('-------------------------')
if input_text_check == True:
with st.spinner('Подождите...'):
pa.text2ppt(pa.generate_text2ppt_input_prompt(status, input_text, page_choice), theme_select)
prs = Presentation("text2ppt_output.pptx")
binary_output = BytesIO()
prs.save(binary_output)
st.success('Готово!')
st.download_button(label="Скачать ППТ",
data = binary_output.getvalue(),
file_name="export_output.pptx",
mime='application/octet-stream', key = "<Text2PPT_download>")
with tab3:
st.header('ППТ в сценарий')
st.subheader(':computer: Автоматический генератор сценариев :computer:')
st.markdown('-------------------------')
st.subheader(':bookmark: Генератор сценариев презентаций')
file_order = ['PDF', 'ППТ']
choose = st.radio('Выберите формат файла презентационного материала', file_order)
if choose == file_order[0]:
uploaded_file = st.file_uploader('Выберите файл!', type='pdf', key="<PPT2Script_pdf_uploader>")
elif choose == file_order[1]:
uploaded_file = st.file_uploader('Выберите файл!', type='pptx', key="<PPT2Script_ppt_uploader>")
input_file_check = st.button('Подтвердить', key="<PPT2Script_start>") # При нажатии на эту кнопку должен передаваться входной файл
st.markdown('-------------------------')
if input_file_check == True:
with st.spinner('Подождите...'):
with open(uploaded_file.name, mode='wb') as w:
w.write(uploaded_file.getvalue())
script = pa.ppt2script(uploaded_file.name, choose)
st.success('Готово!')
st.download_button('Скачать сценарий',
data=script, file_name="script_output.txt", key="<PPT2Script_download>")