| import streamlit as st | |
| import io | |
| from docx import Document | |
| from PyPDF2 import PdfReader, PdfWriter | |
| from utils.data_manager import extraer_texto_pdf | |
| import openai | |
| def show(): | |
| st.title("✍️ IA para Modificación de Documentos") | |
| uploaded_file = st.file_uploader("Sube un documento (PDF o DOCX)", type=['pdf', 'docx']) | |
| if uploaded_file: | |
| if uploaded_file.type == "application/pdf": | |
| texto_original = extraer_texto_pdf(uploaded_file) | |
| st.text_area("Contenido del Documento Original", texto_original, height=300) | |
| elif uploaded_file.type == "application/vnd.openxmlformats-officedocument.wordprocessingml.document": | |
| documento = Document(uploaded_file) | |
| texto_original = "\n".join([para.text for para in documento.paragraphs]) | |
| st.text_area("Contenido del Documento Original", texto_original, height=300) | |
| st.markdown("### Modificar Documento") | |
| receptor = st.text_input("Modificar Para (Nombre del Receptor):") | |
| notas_adicionales = st.text_area("Notas Adicionales:", height=100) | |
| if st.button("Generar Documento Modificado"): | |
| contenido_modificado = modificar_documento(texto_original, receptor, notas_adicionales) | |
| st.text_area("Contenido del Documento Modificado", contenido_modificado, height=300) | |
| # Descargar documento modificado | |
| if uploaded_file.type == "application/pdf": | |
| pdf_modificado = modificar_pdf(uploaded_file, contenido_modificado) | |
| st.download_button( | |
| label="📥 Descargar PDF Modificado", | |
| data=pdf_modificado, | |
| file_name="documento_modificado.pdf", | |
| mime="application/pdf" | |
| ) | |
| elif uploaded_file.type == "application/vnd.openxmlformats-officedocument.wordprocessingml.document": | |
| docx_modificado = modificar_docx(contenido_modificado) | |
| st.download_button( | |
| label="📥 Descargar DOCX Modificado", | |
| data=docx_modificado, | |
| file_name="documento_modificado.docx", | |
| mime="application/vnd.openxmlformats-officedocument.wordprocessingml.document" | |
| ) | |
| def modificar_documento(texto, receptor, notas): | |
| """Modifica el contenido del documento basado en el receptor y notas adicionales.""" | |
| prompt = f"Modifica el siguiente texto para que esté dirigido a {receptor} y añade las siguientes notas: {notas}.\n\nTexto:\n{texto}" | |
| response = openai.ChatCompletion.create( | |
| model="gpt-3.5-turbo", # o "gpt-4" si estás usando ese modelo | |
| messages=[ | |
| {"role": "system", "content": "Eres un asistente útil."}, | |
| {"role": "user", "content": prompt} | |
| ] | |
| ) | |
| return response.choices[0].message['content'] | |
| def modificar_pdf(pdf_file, nuevo_contenido): | |
| """Modifica el contenido de un PDF.""" | |
| reader = PdfReader(pdf_file) | |
| writer = PdfWriter() | |
| # Añadir el contenido modificado a una nueva página del PDF | |
| for page in reader.pages: | |
| writer.add_page(page) | |
| nueva_pagina = writer.add_blank_page(width=reader.pages[0].mediabox.width, height=reader.pages[0].mediabox.height) | |
| nueva_pagina.insert_text(nuevo_contenido) | |
| pdf_output = io.BytesIO() | |
| writer.write(pdf_output) | |
| pdf_output.seek(0) | |
| return pdf_output | |
| def modificar_docx(nuevo_contenido): | |
| """Modifica el contenido de un DOCX.""" | |
| doc = Document() | |
| for line in nuevo_contenido.split("\n"): | |
| doc.add_paragraph(line) | |
| docx_output = io.BytesIO() | |
| doc.save(docx_output) | |
| docx_output.seek(0) | |
| return docx_output | |