这个项目能做什么

## 项目概览 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 声明软件按“原样”提供,作者不对使用后果承担责任。