PDF / app.py
JairoCesar's picture
Update app.py
45d24a2 verified
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.")