Skip to content

Latest commit

 

History

History
185 lines (135 loc) · 4.47 KB

File metadata and controls

185 lines (135 loc) · 4.47 KB

✅ DEPLOYMENT COMPLETADO - PDF Generator v20

Fecha: 21 de octubre de 2025, 14:45 UTC
Release: v20
App: horizon-pdf-generator


🎉 FIX DEPLOYADO EXITOSAMENTE

✅ Cambios Aplicados

Archivo: pdf_generator.py
Fix: Escalado automático de imágenes sin dimensiones especificadas

# ✅ SIEMPRE crear imagen con tamaño máximo inicial si no se especifica
if not width and not height:
    # Usar ancho máximo por defecto para evitar LayoutError
    img = Image(source_name, width=MAX_CONTENT_WIDTH * 0.9)
else:
    img = Image(source_name, width=width, height=height)

# ✅ Aplicar clamp para asegurar que cabe en la página
clamp_image_flowable(img, source=source_name)

📊 Deployment Info

Remote: Heroku (horizon-pdf-generator)
Commit: ab33adde728e641c583cc6f21c754a7f742397bc
Release: v20
Status: ✅ Deployed successfully
Build: ✅ Succeeded at 14:45:40 UTC
Service: ✅ ONLINE (gunicorn 23.0.0, 2 workers)

🔄 Estado del Servicio

[2025-10-21 14:45:37] Starting gunicorn 23.0.0
[2025-10-21 14:45:37] Booting worker with pid: 8
[2025-10-21 14:45:37] Booting worker with pid: 9
[2025-10-21 14:45:37] State changed from starting to up
[2025-10-21 14:45:40] Build succeeded

🧪 PRUEBA AHORA

Desde el Frontend

  1. Ve a tu aplicación: https://tu-app.vercel.app
  2. Inicia sesión
  3. Ve a la sección de Reports
  4. Click en "Generar Reporte"
  5. Resultado esperado: ✅ PDF se genera sin error de LayoutError

Verificar en Logs

# Ver logs en tiempo real
heroku logs --tail --app horizon-pdf-generator

# Buscar errores
heroku logs --app horizon-pdf-generator | grep "ERROR"

Test Script

cd "c:\Users\mikia\mi-proyecto\Generacion de Informe"
python test_pdf_generation.py http

🎯 Qué Esperar Ahora

✅ ANTES (Error)

reportlab.platypus.doctemplate.LayoutError: Flowable <Image>(432.0 x ???) 
too large on page 3 in frame 'normal'(511.27... x 757.88...*) of template 'Later'

✅ DESPUÉS (Funcionando)

INFO: 🔨 Construyendo PDF...
INFO: ✅ PDF generado exitosamente
INFO: 📤 PDF subido a Supabase: 048adfcc.../Reporte.pdf

📝 Cambios en el Código

Función Modificada: render_image()

Ubicación: pdf_generator.py línea ~478-492

Lógica:

  1. Si NO hay width ni height en el JSON → Usar MAX_CONTENT_WIDTH * 0.9
  2. Si SÍ hay dimensiones → Usar las especificadas
  3. SIEMPRE aplicar clamp_image_flowable() para ajustar si es necesario

Constantes:

  • PAGE_WIDTH = 595.27 puntos (A4)
  • DEFAULT_MARGIN = 36 puntos
  • MAX_CONTENT_WIDTH = 523.27 puntos
  • MAX_CONTENT_WIDTH * 0.9 = 470.94 puntos

🆘 Si Persiste el Error

Paso 1: Verificar Release

heroku releases --app horizon-pdf-generator

# Debería mostrar:
# v20  Deploy ab33adde  mimurillof@unal.edu.co  2025/10/21 14:45:34 +0000

Paso 2: Limpiar Cache

heroku repo:purge_cache --app horizon-pdf-generator
git commit --allow-empty -m "Limpiar cache de Heroku"
git push heroku main

Paso 3: Revisar el Código Deployado

heroku run bash --app horizon-pdf-generator
# Dentro del dyno:
grep -A 5 "SIEMPRE crear imagen" /app/pdf_generator.py

📊 Métricas Esperadas

Métrica Antes Después
Tasa de error LayoutError 100% 0%
Tiempo de generación N/A (fallaba) 5-10s
Imágenes escaladas No Sí (automático)
Tamaño máximo imagen Sin límite 470px ancho

🎉 Siguiente Paso

PRUEBA AHORA desde el frontend:

  1. Genera un reporte
  2. Observa los logs (no debería haber LayoutError)
  3. Verifica que el PDF se cree en Supabase
  4. Descarga el PDF y confirma que se ve correctamente

Si funciona:

  • ✅ Problema resuelto
  • 🎊 Celebra
  • 📚 Revisa REGENERATE_PDF_QUICKSTART.md para usar el endpoint directo

Si aún falla:

  • 📞 Comparte los nuevos logs
  • 🔍 Verifica que no haya un proxy/cache entre frontend y backend
  • ⚠️ Asegúrate de que el error sea del nuevo deployment (después de 14:45 UTC)

📚 Documentación Relacionada

  • Guía completa: PDF_REGENERATION_SOLUTION.md
  • Comandos de deployment: COMANDOS_DEPLOYMENT.md
  • Script de test: test_pdf_generation.py
  • Endpoint directo: /api/ribbon/regenerate-pdf (aún no deployado en backend)

Estado: ✅ LISTO PARA PROBAR
Deployment: ✅ COMPLETADO
Próximo paso: PRUEBA DESDE EL FRONTEND 🚀