Об этом проекте
## Обзор проекта
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 указано, что программное обеспечение предоставляется «как есть», автор не несет ответственности за последствия использования.
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.