PrintCost
Estimador automático de costos de impresión
- Rol
- Desarrollador Full Stack Desktop
- Cliente
- Uso personal / distribución pública
- Duración
- 15-02-2026 — 05-03-2026
- Año
- 2026
- Equipo
- 1 persona

Problema
¿Qué había que resolver?
La estimación manual de costos de impresión es propensa a errores y consume mucho tiempo, especialmente en entornos con alta volumetría de trabajos.
Solución
¿Cómo se resolvió?
Implementar una solución automática que analice visualmente los documentos PDF y calcule los costos de impresión basados en la cobertura de tinta por canal CMYK.
Características
Lo que hace
- Análisis de cobertura CMYK por página mediante renderizado con PyMuPDF y cálculo vectorizado con NumPy
- Detección automática de nuevos PDFs en carpeta vigilada via Watchdog
- Cálculo de costos basado en precio y cantidad de tinta comprada en ml
- Cola de trabajos con selección de impresora diferente por trabajo
- Reenvío silencioso a impresora física via Sumatra PDF
- Historial de trabajos en SQLite con consultas por día, mes y fecha específica
- Exportación de reportes en Excel, CSV, PDF carta y PDF ticket 80mm
- Tipos de papel personalizados (opalina, fotográfico, sticker, etc.)
- Sistema de banners publicitarios con caché local e imágenes descargadas
- Modo claro y oscuro con paleta completa
- System tray — vive en segundo plano sin interrumpir el flujo de trabajo
- Selector de copias con recálculo de costos en tiempo real
- Precio sugerido editable por trabajo
Responsabilidades
Mi rol en el proyecto
- Diseño e implementación completa de la arquitectura de la aplicación
- Desarrollo del motor de análisis CMYK con PyMuPDF y NumPy
- Implementación de la interfaz gráfica con CustomTkinter
- Integración con APIs de Windows para gestión de impresoras via pywin32
- Diseño del sistema de persistencia con SQLite y JSON
- Implementación del sistema de banners con caché local y descarga asíncrona
- Generación de reportes en múltiples formatos con ReportLab y OpenPyXL
Retos técnicos
Lo que no fue trivial
Intercepción de impresión
Interceptar trabajos de impresión sin depender de una marca específica de impresora, resuelto usando una impresora virtual como PDFCreator como intermediaria
Estimación CMYK
Estimar cobertura de tinta CMYK con precisión razonable sin acceso al RIP de la impresora, resuelto mediante conversión RGB→CMYK por canal con NumPy sobre páginas renderizadas
Impresión silenciosa en Windows
Reenviar trabajos a impresoras físicas de forma silenciosa y confiable en Windows, resuelto usando Sumatra PDF con cadena de fallback a ShellExecute
Persistencia de datos
Mantener datos del usuario separados del ejecutable para soportar actualizaciones sin pérdida de información, resuelto almacenando todo en AppData/Local/PrintCost
Procesamiento eficiente de documentos
Procesar documentos de 50 a 100 páginas sin bloquear la interfaz, resuelto con ThreadPoolExecutor para análisis paralelo por página y reducción de DPI de renderizado
Resultado
Qué se logró
- Tiempo de análisis reducido en ~70% al pasar de procesamiento secuencial a paralelo con DPI optimizado
- Sistema funcional que detecta, analiza y reenvía trabajos de impresión de forma completamente automática
- Historial completo con cálculo de ganancias por día y mes listo para uso en entorno real de papelería
- Arquitectura modular que permite escalar a versión SaaS o punto de venta en futuras iteraciones
- El modo RAW de win32print no es compatible con impresoras de inyección de tinta domésticas — requieren pasar por el driver de Windows
- CustomTkinter en Python 3.14 tiene comportamientos inconsistentes con grab_set y CTkScrollableFrame que requieren workarounds específicos
- La conversión RGB→CMYK es una aproximación útil para estimación de costos pero no reemplaza el análisis del RIP real de la impresora
- Separar los datos del usuario en AppData desde el inicio del proyecto evita problemas de migración al crear el instalador