# pdf签字 **Repository Path**: wuke121/pdf-signature ## Basic Information - **Project Name**: pdf签字 - **Description**: No description available - **Primary Language**: Python - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-12-14 - **Last Updated**: 2025-12-14 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # PDF签名系统 一个使用Python开发的完整PDF签名系统,能够实时监控指定目录内的PDF文件,自动提取内容保存到数据库,支持双屏交互和客人手写签名功能。 ## 功能特性 - 📁 **目录监控**:实时监控指定目录内的PDF文件,支持文件创建和修改事件 - 📄 **内容提取**:自动提取PDF文件中的文本内容,支持登记单和账单两种不同样式 - 💾 **数据库存储**:将提取的内容保存到SQLite数据库,支持宾客登记和结账单据两张表 - 🖥️ **可视化界面**:提供直观的主界面,显示文件列表、详细信息和操作按钮 - 🖼️ **双屏交互**:主屏面向前台,扩展屏面向客人,支持触控屏签名 - ✍️ **客人手写签名**:支持笔迹平滑、实时显示、撤销、清除功能 - 📑 **签名嵌入**:将手写签名精准嵌入PDF对应位置,生成不可编辑的新文件 - 🔍 **快速查询**:支持按客人姓名、房号、确认号码等条件查询 - 📋 **日志记录**:详细记录系统运行状态和文件处理结果 - ⚙️ **目录管理**:自动管理待处理、待人工处理、已签署和已归档四个目录 - 🛡️ **临时文件过滤**:自动过滤处理过程中的临时文件,避免重复处理 ## 技术栈 - **Python 3.7+** - **watchdog** - 文件系统监控 - **pdfplumber** - PDF内容提取 - **PyPDF2** - PDF处理和印章添加 - **reportlab** - 生成PDF和文字印章 - **SQLite** - 轻量级数据库存储 ## 安装步骤 ### 1. 克隆或下载项目 将项目文件下载到本地目录。 ### 2. 安装Python依赖 使用pip安装项目所需的依赖包: ```bash cd pdf_monitor_python pip install -r requirements.txt ``` ### 3. 创建目录结构 系统会自动创建所需的目录结构: - `to_process/` - 待处理文件夹(系统监控目录) - `manual_process/` - 待人工处理文件夹 - `signed/` - 已签署文件夹 - `archived/` - 已归档文件夹 - `data/` - 数据库目录 - `logs/` - 日志目录 ## 使用方法 ### 基本使用 运行完整的PDF签名系统主程序: ```bash cd pdf_monitor_python python main_app.py ``` ### 系统操作流程 1. **启动系统** - 运行`main_app.py`启动PDF签名系统 - 系统自动初始化数据库和目录结构 - 主界面显示文件列表和操作区域 2. **开始监控** - 点击"启动监控"按钮开始监控`to_process`目录 - 系统自动处理目录中已存在的PDF文件 - 新添加到`to_process`目录的PDF文件会被自动处理 3. **文件处理** - 监控到新PDF文件后,系统自动: - 提取PDF内容 - 分析PDF类型(登记单或账单) - 提取关键信息 - 生成新文件名 - 移动文件到`manual_process`目录 - 保存信息到数据库 4. **客人签名流程** - 在主界面选择待处理的PDF文件 - 点击"请客人签名"按钮 - 客人签名窗口显示在扩展屏上 - 客人在触控屏上完成签名 - 前台点击"确认签名"按钮 - 系统将签名嵌入PDF,移动到`signed`目录 - 更新数据库签名状态 5. **查询和管理** - 使用查询功能按客人姓名、房号、确认号码等条件查询 - 支持导出Excel功能(开发中) - 支持打印和邮件发送功能(开发中) ### 主界面功能 - **文件列表**:显示待处理、待人工处理和已签署的文件 - **详细信息**:显示选中文件的详细信息和提取的内容 - **操作按钮**: - 启动/停止监控 - 刷新界面 - 设置 - 请客人签名 - 重新签名 - 确认签名 - 标记为已处理 - 移动到待人工处理 - 导出Excel - 打印 - 邮件发送 ### 客人签名界面 - **签名区域**:客人在触控屏上进行手写签名 - **提示文字**:清晰的"请在此处签名"提示 - **功能按钮**: - 清空签名 - 撤销上一笔(开发中) ### 单独使用监控功能 如果只需要使用PDF监控功能,可以运行: ```bash python pdf_monitor.py -d /path/to/monitor/directory ``` ### 命令行参数 ``` usage: pdf_monitor.py [-h] --monitor-dir MONITOR_DIR [--db-path DB_PATH] [--stamp-path STAMP_PATH] PDF监控系统 optional arguments: -h, --help show this help message and exit --monitor-dir MONITOR_DIR, -d MONITOR_DIR 监控目录 --db-path DB_PATH, -db DB_PATH 数据库路径 --stamp-path STAMP_PATH, -s STAMP_PATH 印章图片路径 ``` ## 配置说明 ### 配置文件 项目根目录下的`config.py`文件包含了系统的配置选项: - `MONITOR_DIR` - 默认监控目录 - `DB_PATH` - 数据库文件路径 - `STAMP_PATH` - 印章图片路径 - `STAMP_SIZE` - 印章大小(单位:厘米) - `STAMP_TEXT` - 默认文字印章内容 - `STAMP_OPACITY` - 印章透明度 - `STAMP_ROTATION` - 印章旋转角度 - `LOG_LEVEL` - 日志级别 - `LOG_FILE` - 日志文件路径 - `WAIT_TIME` - 文件写入等待时间 - `PROCESS_EXISTING_FILES` - 是否处理已存在的文件 - `SEARCH_LIMIT` - 搜索结果限制 ### 命令行参数优先 命令行参数会覆盖配置文件中的设置。 ## 项目结构 ``` pdf_monitor_python/ ├── main_app.py # 完整PDF签名系统主程序 ├── pdf_monitor.py # PDF监控模块 ├── signature_gui.py # 签名GUI模块 ├── config.py # 配置文件 ├── requirements.txt # 依赖包列表 ├── README.md # 项目说明文档 ├── test_core_functionality.py # 核心功能测试脚本 ├── stamp.png # 示例印章图片(可选) ├── logs/ # 日志目录 │ ├── pdf_monitor.log # 监控日志文件 │ ├── pdf_sign_system.log # 签名系统日志文件 │ └── test_core_functionality.log # 测试日志文件 ├── data/ # 数据目录 │ ├── pdf_data.db # 监控数据数据库 │ └── pdf_sign.db # 签名系统数据库 ├── to_process/ # 待处理文件夹 ├── manual_process/ # 待人工处理文件夹 ├── signed/ # 已签署文件夹 └── archived/ # 已归档文件夹 ``` ## 工作流程 ### 1. 系统初始化 - 启动`main_app.py` - 初始化数据库,创建宾客登记和结账单据两张表 - 创建必要的目录结构 ### 2. 目录监控 - 点击"启动监控"按钮开始监控`to_process`目录 - 系统自动处理目录中已存在的PDF文件 - 开始监听目录内的文件创建和修改事件 ### 3. PDF文件处理 - 监控到新PDF文件后: - 等待文件完全写入(避免处理临时文件) - 提取PDF文本内容 - 分析PDF类型(登记单或账单) - 根据PDF类型提取关键信息 - 生成带时间戳的新文件名 - 将文件从`to_process`移动到`manual_process`目录 - 将提取的信息保存到对应的数据库表 - 更新文件列表显示 ### 4. 客人签名流程 - 前台在主界面选择待处理的PDF文件 - 查看并确认提取的信息 - 点击"请客人签名"按钮 - 客人签名窗口显示在扩展屏上 - 客人在触控屏上完成签名 - 支持平滑笔触 - 实时显示签名过程 - 可清空签名重新开始 - 前台点击"确认签名"按钮 - 系统将签名嵌入PDF文件 - 将已签署的PDF文件从`manual_process`移动到`signed`目录 - 更新数据库中的签名状态 - 原始文件自动归档到`archived`目录 ### 5. 查询和管理 - 使用查询功能按客人姓名、房号、确认号码等条件查询 - 查看历史签名记录 - 支持导出Excel功能(开发中) - 支持打印和邮件发送功能(开发中) ### 6. 系统维护 - 系统自动记录详细日志 - 定期清理旧日志和临时文件 - 数据库自动维护 ## 数据库结构 ### 宾客登记表 (guest_register) - `id` - 主键ID - `file_name` - 文件名 - `original_path` - 原始文件路径 - `current_path` - 当前文件路径 - `guest_name` - 宾客姓名 - `check_in_date` - 入住日期 - `check_out_date` - 离店日期 - `confirmation_number` - 确认号码 - `room_type` - 房间类型 - `room_number` - 房间号码 - `company_name` - 公司名称 - `phone_number` - 电话号码 - `nationality` - 国籍 - `signature_status` - 签名状态(未签署/已签署) - `process_time` - 处理时间 - `sign_time` - 签名时间 ### 结账单据表 (bill) - `id` - 主键ID - `file_name` - 文件名 - `original_path` - 原始文件路径 - `current_path` - 当前文件路径 - `guest_name` - 宾客姓名 - `check_in_date` - 入住日期 - `check_out_date` - 离店日期 - `confirmation_number` - 确认号码 - `member_number` - 会员号码 - `room_number` - 房间号码 - `company_name` - 公司名称 - `receivable_account` - 应收账号 - `cashier_number` - 收银员号 - `total_amount` - 合计金额 - `signature_status` - 签名状态(未签署/已签署) - `process_time` - 处理时间 - `sign_time` - 签名时间 ## 搜索功能 ### 主界面搜索 PDF签名系统主界面提供了直观的搜索功能: - **搜索条件**: - 宾客姓名 - 房号 - 确认号码 - **操作步骤**: 1. 在搜索区域输入查询条件 2. 点击"查询"按钮 3. 搜索结果显示在下方的结果列表中 4. 点击"重置"按钮清空查询条件和结果 ### 高级搜索(开发中) 计划实现的高级搜索功能: - 日期范围搜索 - 多条件组合搜索 - 搜索结果导出 ## 更新日志 ### v2.0.0 (2025-12-10) - 全新发布完整PDF签名系统 - 实现了完整的双屏交互功能 - 添加了客人手写签名功能 - 实现了目录管理功能(待处理、待人工处理、已签署、已归档) - 实现了宾客登记和结账单据两张数据库表 - 提供了完整的可视化主界面 - 支持平滑笔触和实时签名显示 - 实现了灵活的搜索功能 - 优化了文件处理流程 ### v1.0.0 (2024-05-20) - 初始版本发布 - 实现基本的PDF监控和处理功能 - 支持内容提取和数据库存储 - 支持图片印章和文字印章 - 支持内容搜索功能 ## 注意事项 1. **权限问题**:确保程序对监控目录有读写权限 2. **性能考虑**:处理大量或大型PDF文件时可能会占用较多系统资源 3. **印章格式**:印章图片建议使用PNG格式,支持透明背景 4. **文件锁定**:某些情况下,正在写入的文件可能会被锁定,系统会等待后重试 5. **数据库备份**:建议定期备份数据库文件,防止数据丢失 6. **Python版本**:请使用Python 3.7或更高版本 ## 故障排除 ### 常见问题 1. **程序无法启动** - 检查Python版本是否符合要求 - 检查依赖包是否正确安装 - 检查命令行参数是否正确 2. **无法提取PDF内容** - 检查PDF文件是否加密 - 检查PDF文件格式是否支持 - 查看日志文件获取详细错误信息 3. **印章没有添加到PDF** - 检查印章图片是否存在 - 检查印章图片格式是否正确 - 查看日志文件获取详细错误信息 4. **数据库操作失败** - 检查数据库路径是否有写权限 - 检查数据库文件是否损坏 ### 查看日志 系统日志保存在`logs/pdf_monitor.log`文件中,可以查看详细的运行状态和错误信息。 ## 许可证 本项目采用MIT许可证,详见LICENSE文件。 ## 贡献 欢迎提交Issue和Pull Request来改进这个项目。 ## 联系方式 如有问题或建议,请通过以下方式联系: - 提交GitHub Issue - 发送邮件到:your-email@example.com ## 更新日志 ### v1.0.0 (2024-05-20) - 初始版本发布 - 实现基本的PDF监控和处理功能 - 支持内容提取和数据库存储 - 支持图片印章和文字印章 - 支持内容搜索功能 --- **感谢使用PDF监控系统!** 🎉