这个项目能做什么
## 项目概览
cups-web-print 是一个基于 Python Flask 和 CUPS 的 Web 打印服务,为 CUPS 打印服务器提供 HTTP 图形界面。它可以把连接到服务器的 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 协议获取
### 安全防护
- 路径遍历攻击防护
- 文件类型白名单验证
- 文件大小限制 100MB
- 日志自动轮换
- 删除文件时自动清理预览缓存
### 双语界面
- 中文界面: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(Web 界面)与 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 地址差异、驱动less 模式、cupsenable/cupsaccept)、5000 端口无响应(进程、端口监听、防火墙、Flask 绑定地址)、页面无可用打印机、文档转换失败、PDF 预览生成失败、页面范围提取失败、墨盒/纸盒信息无法获取,以及“提示成功但无输出”的情况(需确认 -m everywhere 参数、CUPS 驱动与 PPD 文件、打印机空闲状态与 CUPS 日志)。
## 许可证
GPLv3。README 声明软件按“原样”提供,作者不对使用后果承担责任。
评论
0 评分人数达到10人后显示
登录后参与讨论。