这个项目解决什么问题
办公岗位的单据处理痛点非常具体:合同、提单、报价单外发前要逐份加水印,订单 Excel 列名中英文混乱、日期五花八门、金额带 $ 和千分位不能直接求和,表格里还带着客户电话邮箱怕泄密。本项目把这些高频操作整合成一条流水线,并提供"生成演示文档"按钮——没有真实单据也能完整演示全流程。
核心亮点
- 水印位置智能避让:不是简单全页糊满水印——先用 PyPDF2 的
visitor_text回调收集每页文字坐标,把页面划成网格统计字符密度,水印自动跳过正文密集的格子,避免盖住关键内容(扫描件提取不到文字时自动退化为全页平铺)。 - 敏感字段遮蔽:勾选一个开关,电话 / 邮箱列输出前自动打码成
138****5678、w***@demo.com,针对单据外发的防泄密场景。 - 线程池任务队列 + 进度轮询:多文件处理走后台线程,前端每 800ms 轮询
/api/progress/<task_id>实时刷新进度条,处理完成自动打包 ZIP,每个文件的结果与耗时都落盘到日志页可查。 - 一键演示数据:reportlab 现场生成 3 份提单 PDF + 2 个中英文混乱列名的订单 Excel,课程汇报时零准备。
效果预览
首页上传与参数配置——水印文字 / 字号 / 角度 / 透明度 / 间距均可调:

水印智能避让前后对比——开启后正文区域不再被水印遮挡:

整体处理流程:上传 → 任务队列 → PDF/Excel 分流处理 → 进度轮询 → ZIP 打包:

预览图基于演示数据渲染实际处理效果,界面示意以实际运行页面为准。
你将学到
- Flask 异步任务的轻量实现:ThreadPoolExecutor + 全局任务字典 + 轮询接口(不必上 Celery)
- PDF 的程序化操作:ReportLab 生成水印层、PyPDF2 逐页叠加 / 合并 / 按页码范围拆分
- pandas 数据清洗套路:列名映射、去重、日期统一、金额数值化与合计
- 如何把"批处理 + 进度反馈 + 流水日志"做成一个完整的 Web 工具
适合谁
需要完成"工具类 / Web 应用方向"毕业设计,或想积累 PDF/Excel 办公自动化实战经验的学习者。难度 ★★☆,代码中文注释齐全,跑通一遍即可理解全部流程。
交付内容:完整可运行源码、README.md(逐步运行方法与实现说明)、requirements.txt。
许可:个人使用,可用于自己的学习、课程实验与研究报告,请勿转售或公开传播。