Sobre el proyecto
## Resumen del proyecto
cups-web-print es un servicio de impresión web basado en Python Flask y CUPS, que proporciona una interfaz gráfica HTTP para servidores de impresión CUPS. Puede convertir impresoras USB conectadas al servidor en impresoras de red, permitiendo que los dispositivos de la red local impriman a través del navegador, sin necesidad de instalar controladores o configurar colas de impresión en cada dispositivo.
## Capacidades principales
### Gestión de archivos
- Admite PDF, DOC, DOCX, PPT, PPTX, XLS, XLSX, TXT, RTF y formatos de imagen como JPG, JPEG, PNG, GIF, BMP, SVG
- Admite carga mediante arrastrar y soltar
- Vista previa en línea: vista previa de PDF en computadoras, vista previa de imágenes en dispositivos móviles
- Visualización y eliminación de lista de archivos
### Configuración de impresión
- Tamaño de papel: oficina A1-A4, fotos de 5-10 pulgadas, etc.
- Material del papel: papel normal, papel fotográfico brillante, etc.
- Modo de color: color / blanco y negro
- Impresión a doble cara: una cara, doble cara con encuadernación en borde largo, doble cara con encuadernación en borde corto
- Orientación de impresión: vertical / horizontal
- Número de copias: 1-99 copias
- Rango de páginas: como 1-5 8 10-12
- Escala de impresión: automático / ajustar / rellenar / sin escala
- Espejo de página: admite volteo horizontal
### Gestión de tareas
- Detección de estado en línea de la impresora (solo impresoras IPP)
- Monitoreo de estado de tareas en tiempo real: enviado / procesando / completado / fallido / cancelado
- Visualización de progreso de tareas (estimado basado en tiempo y cola de CUPS)
- Cancelación de tareas
- Visualización en tiempo real de la cola de impresión
- Información de bandeja de papel, información de cartuchos de tinta, información de impresora (tiempo de funcionamiento, versión de firmware, alertas, etc.), todo obtenido mediante protocolo IPP
### Protección de seguridad
- Protección contra ataques de traversal de ruta
- Verificación de lista blanca de tipos de archivo
- Límite de tamaño de archivo de 100MB
- Rotación automática de registros
- Limpieza automática de caché de vista previa al eliminar archivos
### Interfaz bilingüe
- Interfaz en chino: http://localhost:5000/zh
- Interfaz en inglés: http://localhost:5000/en
## Pila tecnológica
- Backend: Python 3.9+ y Flask 3.0+
- Frontend: HTML5 y Tailwind CSS (CDN)
- Servicio de impresión: CUPS 2.0+
- Conversión de documentos: LibreOffice 6.0+
- Procesamiento de PDF: poppler-utils (pdftoppm), pdftk
- Protocolo IPP: ipptool (cups-client)
## Nota de compatibilidad
El proyecto utiliza el protocolo estándar IPP y comandos estándar de CUPS, teóricamente compatible con la mayoría de impresoras que admiten el protocolo IPP. El README indica que se ha probado en Canon G3881, otras impresoras requieren verificación propia.
## Métodos de implementación
### Instalación en contenedor (recomendado)
Ejecutar mediante Docker, mapeando los puertos 5000 (interfaz web) y 631 (CUPS), y montando la configuración de CUPS, colas, registros, así como los directorios de carga y vista previa. Las impresoras USB requieren modo privilegiado y montaje de dispositivo USB; si solo se usan impresoras de red, se pueden omitir estos dos elementos.
Ejemplo de adición de impresora (con impresora de red como ejemplo):
```
docker exec cups-web-print lpadmin -p Canon_G3881 -v ipp://192.168.1.16:631/ipp/print -m everywhere -E
```
### Instalación local
Se requiere instalar cups, cups-client, componentes de LibreOffice, poppler-utils, pdftk y dependencias de Python. Después de iniciar el servicio CUPS, agregar la impresora con lpadmin y luego ejecutar app.py. El README también proporciona un método opcional para el inicio automático al encender mediante crontab.
## Estructura de directorios
- app.py: archivo principal de la aplicación Flask
- ipp_client.py: obtiene información de estado como bandejas de papel y cartuchos de tinta mediante IPP
- printer_checker.py: confirma el estado en línea de la impresora mediante protocolos como IPP, BJNP
- templates/: index.html (página principal en chino) e index_en.html (página principal en inglés)
- uploads/, previews/: directorios de archivos cargados y archivos de vista previa
## Solución de problemas
El README proporciona una lista de verificación bastante completa, que cubre: fallo al agregar impresora con lpadmin (incluyendo diferencias de direcciones IPP entre marcas, modo sin controlador, cupsenable/cupsaccept), puerto 5000 sin respuesta (proceso, escucha de puerto, firewall, dirección de enlace de Flask), sin impresoras disponibles en la página, fallo de conversión de documentos, fallo de generación de vista previa de PDF, fallo de extracción de rango de páginas, imposibilidad de obtener información de cartuchos/bandejas, y el caso de "aviso de éxito pero sin salida" (se debe confirmar el parámetro -m everywhere, controlador CUPS y archivo PPD, estado de inactividad de la impresora y registros de CUPS).
## Licencia
GPLv3. El README declara que el software se proporciona "tal cual", y el autor no es responsable de las consecuencias del uso.
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.