import streamlit as st import fitz # PyMuPDF from io import BytesIO import os def replace_text_in_pdf(template_path, data): pdf_document = fitz.open(template_path) for page_num in range(len(pdf_document)): page = pdf_document.load_page(page_num) for key, value in data.items(): marker = f"<{key}>" text_instances = page.search_for(marker) if text_instances: print(f"Página {page_num + 1}: Reemplazando '{marker}' con '{value}'") # Mensaje de depuración for inst in text_instances: # Dibuja un rectángulo blanco sobre el texto del marcador page.draw_rect(inst, color=(1, 1, 1), fill=(1, 1, 1)) # Ajusta la posición para colocar el nuevo texto exactamente debajo del marcador # El ajuste de 10 unidades es un valor de ejemplo, modifícalo según tus necesidades adjusted_position = (inst[0], inst[1] + 9) # Inserta el nuevo texto en la posición ajustada page.insert_text(adjusted_position, value, fontsize=12, color=(0, 0, 0)) output = BytesIO() pdf_document.save(output) pdf_document.close() output.seek(0) return output st.title("Rellenar Plantilla PDF") # Formularios para ingresar los datos del usuario nombre = st.text_input("Nombre") edad = st.text_input("Edad") peso = st.text_input("Peso") if st.button("Generar PDF"): if nombre and edad and peso: # Cargar la plantilla PDF # template_path = "Plantilla pdf.pdf" # Define the path to the template PDF..... template_path = os.path.join("data", "Plantilla pdf.pdf") # Crear el diccionario de datos para rellenar el PDF data = { "NOMBRE": nombre, "EDAD": edad, "PESO": peso } # Rellenar el PDF con los datos pdf_output = replace_text_in_pdf(template_path, data) # Proveer el PDF para descargar st.download_button( label="Descargar PDF", data=pdf_output, file_name="PDF_rellenado.pdf", mime="application/pdf" ) else: st.error("Por favor completa todos los campos antes de generar el PDF.")