OMARDENT / pages /documentos
Josedcape's picture
Rename pages/recomendaciones.py to pages/documentos
6b735ea verified
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