Об этом проекте

## Обзор проекта cups-web-print — это веб-сервис печати на основе Python Flask и CUPS, предоставляющий HTTP-графический интерфейс для сервера печати CUPS. Он позволяет превратить USB-принтер, подключенный к серверу, в сетевой принтер, чтобы устройства в локальной сети могли печатать через браузер без установки драйверов или настройки очередей печати на каждом устройстве. ## Основные возможности ### Управление файлами - Поддержка PDF, DOC, DOCX, PPT, PPTX, XLS, XLSX, TXT, RTF, а также изображений JPG, JPEG, PNG, GIF, BMP, SVG - Поддержка перетаскивания файлов - Онлайн-просмотр: на ПК — PDF, на мобильных — изображения - Просмотр и удаление списка файлов ### Настройки печати - Размер бумаги: офисные A1-A4, фото 5-10 дюймов и т.д. - Тип бумаги: обычная, глянцевая фотобумага и т.д. - Цветовой режим: цветной / черно-белый - Двусторонняя печать: односторонняя, двусторонняя с переплетом по длинному краю, двусторонняя с переплетом по короткому краю - Ориентация: книжная / альбомная - Количество копий: 1-99 - Диапазон страниц: например, 1-5 8 10-12 - Масштабирование: автоматически / по размеру / заполнение / без масштабирования - Зеркальное отображение: поддержка горизонтального отражения ### Управление задачами - Проверка онлайн-статуса принтера (только для IPP-принтеров) - Мониторинг статуса задач в реальном времени: отправлено / обрабатывается / завершено / ошибка / отменено - Отображение прогресса задачи (оценка на основе времени и очереди CUPS) - Отмена задач - Просмотр очереди печати в реальном времени - Информация о лотках, картриджах, принтере (время работы, версия прошивки, предупреждения) — все через протокол IPP ### Безопасность - Защита от атак с обходом пути - Проверка белого списка типов файлов - Ограничение размера файла 100 МБ - Автоматическая ротация журналов - Автоматическая очистка кэша предпросмотра при удалении файлов ### Двуязычный интерфейс - Китайский: http://localhost:5000/zh - Английский: http://localhost:5000/en ## Технологический стек - Бэкенд: Python 3.9+ и Flask 3.0+ - Фронтенд: HTML5 и Tailwind CSS (CDN) - Служба печати: CUPS 2.0+ - Конвертация документов: LibreOffice 6.0+ - Обработка PDF: poppler-utils (pdftoppm), pdftk - Протокол IPP: ipptool (cups-client) ## Совместимость Проект использует стандартный протокол IPP и стандартные команды CUPS, теоретически совместим с большинством принтеров, поддерживающих IPP. В README указано, что тестирование проводилось на Canon G3881, другие принтеры требуют самостоятельной проверки. ## Способы развертывания ### Установка в контейнере (рекомендуется) Запуск через Docker с пробросом портов 5000 (веб-интерфейс) и 631 (CUPS), монтированием конфигурации CUPS, очередей, журналов, а также каталогов загрузки и предпросмотра. Для USB-принтера требуется привилегированный режим и монтирование USB-устройства; при использовании только сетевого принтера эти пункты можно убрать. Пример добавления принтера (для сетевого принтера): ``` docker exec cups-web-print lpadmin -p Canon_G3881 -v ipp://192.168.1.16:631/ipp/print -m everywhere -E ``` ### Локальная установка Требуется установка cups, cups-client, компонентов LibreOffice, poppler-utils, pdftk и зависимостей Python. После запуска службы CUPS добавьте принтер с помощью lpadmin, затем запустите app.py. В README также описан необязательный способ автозапуска при загрузке через crontab. ## Структура каталогов - app.py: основной файл приложения Flask - ipp_client.py: получение информации о лотках, картриджах и т.д. через IPP - printer_checker.py: проверка онлайн-статуса принтера через IPP, BJNP и другие протоколы - templates/: index.html (главная на китайском) и index_en.html (главная на английском) - uploads/, previews/: каталоги загруженных файлов и файлов предпросмотра ## Устранение неполадок В README приведен достаточно полный чек-лист, охватывающий: сбой lpadmin при добавлении принтера (включая различия IPP-адресов для разных брендов, режим без драйверов, cupsenable/cupsaccept), отсутствие ответа на порту 5000 (процесс, прослушивание порта, брандмауэр, адрес привязки Flask), отсутствие доступных принтеров на странице, сбой конвертации документов, сбой генерации PDF-предпросмотра, сбой извлечения диапазона страниц, невозможность получения информации о картриджах/лотках, а также случай «успех без вывода» (требуется проверить параметр -m everywhere, драйверы CUPS и файлы PPD, состояние простоя принтера и журналы CUPS). ## Лицензия GPLv3. В README указано, что программное обеспечение предоставляется «как есть», автор не несет ответственности за последствия использования.