Crear una app donde pueda ingresar un ticket de erf y el jenere una gráfica y después la pueda descargar en pdf
To upload files, please first save the app
import streamlit as st
import pandas as pd
import matplotlib.pyplot as plt
from fpdf import FPDF
import io
import base64
st.title("ERF Ticket Visualizer")
# Función para crear el PDF con la gráfica
def create_pdf(fig):
# Guardar la figura en un buffer
buf = io.BytesIO()
fig.savefig(buf, format='png', bbox_inches='tight')
buf.seek(0)
# Crear PDF
pdf = FPDF()
pdf.add_page()
pdf.set_font('Arial', 'B', 16)
pdf.cell(190, 10, 'ERF Ticket Graph', 0, 1, 'C')
# Agregar la imagen al PDF
img_data = base64.b64encode(buf.getvalue()).decode()
pdf.image(buf, x=10, y=30, w=190)
# Guardar PDF en buffer
pdf_buffer = io.BytesIO()
pdf.output(pdf_buffer)
pdf_buffer.seek(0)
return pdf_buffer
# Input para el ticket ERF
ticket_number = st.text_input("Ingrese el número de ticket ERF:")
if ticket_number:
# Aquí normalmente se conectaría a una base de datos o API
# Por ahora generaremos datos de ejemplo
data = {
'Fecha': pd.date_range(start='2024-01-01', periods=10),
'Progreso': [0, 10, 20, 30, 45, 55, 70, 85, 95, 100]
}
df = pd.DataFrame(data)
# Crear gráfica
fig, ax = plt.subplots(figsize=(10, 6))
ax.plot(df['Fecha'], df['Progreso'], marker='o')
ax.set_title(f'Progreso del Ticket ERF #{ticket_number}')
ax.set_xlabel('Fecha')
ax.set_ylabel('Progreso (%)')
ax.grid(True)
plt.xticks(rotation=45)
plt.tight_layout()
# Mostrar gráfica en Streamlit
st.pyplot(fig)
# Botón para descargar PDF
if st.button('Descargar PDF'):
pdf_buffer = create_pdf(fig)
st.download_button(
label="Click aquí para descargar el PDF",
data=pdf_buffer,
file_name=f'ticket_erf_{ticket_number}.pdf',
mime='application/pdf'
)
plt.close(fig) # Limpiar la figura de memoria
Hi! I can help you with any questions about Streamlit and Python. What would you like to know?