Skip to content

Commit 064dcf3

Browse files
author
icescat
committed
Initial commit: 批量文档打印桌面应用
0 parents  commit 064dcf3

19 files changed

Lines changed: 3063 additions & 0 deletions

.cursor/rules/py.mdc

Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
---
2+
description:
3+
globs:
4+
alwaysApply: true
5+
---
6+
# Python 项目开发规范
7+
8+
## 1. Python 版本规范
9+
- 使用 Python 3.8+ 版本进行开发
10+
- 明确指定项目的 Python 版本要求
11+
- 在 `pyproject.toml` 或 `setup.py` 中声明支持的 Python 版本范围
12+
13+
## 2. 代码风格规范
14+
### PEP 8 规范
15+
- 严格遵循 [PEP 8](mdc:https:/www.python.org/dev/peps/pep-0008) 风格指南
16+
- 使用工具自动化格式检查(如 `black`, `flake8`, `pylint`)
17+
18+
### 命名规范
19+
```python
20+
# 类名:使用大驼峰命名法
21+
class UserAccount:
22+
pass
23+
24+
# 函数名:使用小写字母和下划线
25+
def calculate_total_amount():
26+
pass
27+
28+
# 变量名:使用小写字母和下划线
29+
user_name = "张三"
30+
31+
# 常量:使用大写字母和下划线
32+
MAX_CONNECTIONS = 100
33+
34+
# 模块名:使用小写字母,可以使用下划线
35+
import data_processor
36+
```
37+
38+
### 注释规范
39+
```python
40+
def process_user_data(user_id: int, data: dict) -> dict:
41+
"""
42+
处理用户数据并返回处理后的结果。
43+
44+
Args:
45+
user_id (int): 用户ID
46+
data (dict): 原始用户数据
47+
48+
Returns:
49+
dict: 处理后的用户数据
50+
51+
Raises:
52+
ValueError: 当用户ID不存在时抛出
53+
KeyError: 当必要的数据字段缺失时抛出
54+
"""
55+
pass
56+
```
57+
58+
## 4. 依赖管理
59+
### 虚拟环境
60+
- 使用 `venv` 或 `conda` 创建独立的虚拟环境
61+
- 将虚拟环境文件夹添加到 `.gitignore`
62+
63+
### 包管理
64+
- 使用 `pip` 或 `poetry` 管理依赖
65+
- 区分开发依赖和生产依赖
66+
- 锁定依赖版本,使用 `requirements.txt` 或 `poetry.lock`
67+
68+
## 5. 类型提示
69+
- 使用类型注解增强代码可读性和可维护性
70+
```python
71+
from typing import List, Dict, Optional
72+
73+
def get_user_info(user_id: int) -> Optional[Dict[str, str]]:
74+
pass
75+
76+
def process_items(items: List[Dict[str, any]]) -> None:
77+
pass
78+
```
79+
80+
## 6. 性能优化
81+
- 使用生成器处理大数据集
82+
- 适当使用列表推导式
83+
- 避免全局变量
84+
- 使用 `collections` 模块的高效数据结构
85+
86+
## 7. 文档规范
87+
- 使用 Sphinx 生成文档
88+
- 编写详细的 README.md
89+
- 包含安装说明和使用示例
90+
91+
- 提供 API 文档

.cursor/rules/rules.mdc

Lines changed: 258 additions & 0 deletions
Large diffs are not rendered by default.

.gitignore

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
# Python
2+
__pycache__/
3+
*.py[cod]
4+
*$py.class
5+
*.so
6+
.Python
7+
build/
8+
develop-eggs/
9+
dist/
10+
downloads/
11+
eggs/
12+
.eggs/
13+
lib/
14+
lib64/
15+
parts/
16+
sdist/
17+
var/
18+
wheels/
19+
*.egg-info/
20+
.installed.cfg
21+
*.egg
22+
MANIFEST
23+
24+
# PyInstaller
25+
*.manifest
26+
*.spec
27+
28+
# 虚拟环境
29+
venv/
30+
env/
31+
ENV/
32+
33+
# IDE
34+
.vscode/
35+
.idea/
36+
*.swp
37+
*.swo
38+
39+
# 操作系统
40+
.DS_Store
41+
Thumbs.db
42+
43+
# 应用数据
44+
data/*.json
45+
data/temp/
46+
47+
# 日志
48+
*.log
49+
50+
# 测试
51+
.pytest_cache/
52+
.coverage
53+
htmlcov/

README.md

Lines changed: 169 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,169 @@
1+
# 批量文档打印桌面应用
2+
3+
## 项目概括
4+
本项目旨在开发一个基于Python 3.12的Windows桌面应用,用于批量打印Word文档、PowerPoint演示文稿和PDF文件。该应用提供图形用户界面,支持灵活的文档添加方式、完善的打印设置功能,以及一键批量打印,显著提升办公文档打印效率。
5+
6+
## 技术选型
7+
- **主要编程语言**: Python 3.12+
8+
- **GUI框架**: tkinter (内置,无需额外依赖) 或 PyQt5/PySide6 (更现代的界面)
9+
- **文档处理库**:
10+
- python-docx (Word文档处理)
11+
- python-pptx (PowerPoint处理)
12+
- PyPDF2/pypdf (PDF处理)
13+
- comtypes/pywin32 (Windows COM接口,用于调用Office应用)
14+
- **打印控制**: win32print, win32api (Windows打印API)
15+
- **应用打包**: PyInstaller (生成独立exe文件)
16+
- **文件操作**: pathlib, os (文件系统操作)
17+
- **版本控制**: Git
18+
- **其他工具**:
19+
- pytest (单元测试)
20+
- black (代码格式化)
21+
- cx_Freeze 或 auto-py-to-exe (备选打包方案)
22+
23+
## 项目结构 / 模块划分
24+
- `/src/`: 核心源代码目录
25+
- `/gui/`: 图形用户界面模块
26+
- `main_window.py`: 主窗口界面
27+
- `print_settings_dialog.py`: 打印设置对话框
28+
- `document_list_widget.py`: 文档列表组件
29+
- `/core/`: 核心业务逻辑模块
30+
- `document_manager.py`: 文档管理器
31+
- `print_controller.py`: 打印控制器
32+
- `settings_manager.py`: 设置管理器
33+
- `/utils/`: 工具类和辅助函数
34+
- `file_utils.py`: 文件操作工具
35+
- `print_utils.py`: 打印相关工具函数
36+
- `config_utils.py`: 配置文件操作
37+
- `/data/`: 应用数据存储目录
38+
- `config.json`: 应用配置文件
39+
- `print_settings.json`: 打印设置配置
40+
- `/tests/`: 测试代码目录
41+
- `/build/`: 构建输出目录
42+
- `/dist/`: 最终发布目录
43+
- `main.py`: 程序入口点
44+
- `requirements.txt`: Python依赖管理
45+
- `.gitignore`: Git忽略配置
46+
- `build.bat`: Windows构建脚本
47+
48+
## 核心功能 / 模块详解
49+
- **文档添加管理** (`document_manager.py`): 支持拖拽添加单个文件、按文件夹批量添加、文件格式过滤验证(.docx, .doc, .pptx, .ppt, .pdf)、文档列表管理与预览。
50+
- **打印设置配置** (`settings_manager.py`): 检测和选择可用打印机、纸张尺寸设置(A4、A3、Letter等)、打印数量控制、双面打印选项、彩色/黑白模式选择。
51+
- **批量打印控制** (`print_controller.py`): 调用Windows系统打印API、支持多种文档格式的打印调度、打印队列管理、打印进度显示、错误处理和重试机制。
52+
- **图形用户界面** (`main_window.py`): 直观的主界面设计、文档列表展示、拖拽支持、实时状态更新、打印进度条显示。
53+
- **应用配置管理** (`config_utils.py`): 用户偏好设置持久化、最近使用的打印设置、应用程序状态保存与恢复。
54+
55+
## 数据模型
56+
- **Document**: { id (UUID), file_path (Path), file_name (str), file_type (enum: WORD|PPT|PDF), file_size (int), added_time (datetime), print_status (enum: PENDING|PRINTING|COMPLETED|ERROR) }
57+
- **PrintSettings**: { printer_name (str), paper_size (str), copies (int), duplex (bool), color_mode (enum: COLOR|GRAYSCALE), page_range (str), orientation (enum: PORTRAIT|LANDSCAPE) }
58+
- **AppConfig**: { last_printer (str), default_settings (PrintSettings), window_geometry (dict), recent_folders (List[str]) }
59+
60+
## 技术实现细节
61+
62+
### 核心架构设计
63+
- **数据模型层**: 使用dataclass定义Document、PrintSettings、AppConfig等核心数据结构
64+
- **业务逻辑层**: DocumentManager处理文档管理,PrinterSettingsManager管理打印设置,PrintController执行打印任务
65+
- **界面交互层**: 基于tkinter的MainWindow主界面和PrintSettingsDialog设置对话框
66+
- **配置管理**: 通过ConfigManager实现JSON格式的配置持久化
67+
68+
### 文档管理器实现 (#document_manager)
69+
- 支持.doc/.docx/.ppt/.pptx/.pdf格式的文件验证和添加
70+
- 实现文件去重机制,防止重复添加相同文档
71+
- 提供批量文件夹扫描功能,支持递归搜索
72+
- 文档状态管理:PENDING → PRINTING → COMPLETED/ERROR
73+
74+
### 打印设置管理 (#settings_manager)
75+
- 通过win32print API检测系统可用打印机
76+
- 支持A4/A3/Letter等标准纸张尺寸设置
77+
- 彩色/黑白模式选择,双面打印控制
78+
- 打印机连接测试和状态验证
79+
80+
### 批量打印控制器 (#print_controller)
81+
- 多线程打印执行,避免界面阻塞
82+
- 支持PDF(通过系统关联)、Word(COM接口)、PowerPoint(COM接口)三种打印方式
83+
- 实时进度回调和状态更新
84+
- 错误处理和重试机制
85+
86+
### 配置持久化 (#config_utils)
87+
- JSON格式配置文件存储在data目录
88+
- 支持应用设置和打印设置的分离存储
89+
- 配置备份和恢复功能
90+
- 窗口几何属性保存
91+
92+
## 开发状态跟踪
93+
| 模块/功能 | 状态 | 负责人 | 计划完成日期 | 实际完成日期 | 备注与链接 |
94+
|------------------|----------|--------|--------------|--------------|------------|
95+
| 项目架构搭建 | ✅已完成 | AI | 2024-12-19 | 2024-12-19 | [技术实现](#core-architecture) |
96+
| 文档管理器 | ✅已完成 | AI | 2024-12-19 | 2024-12-19 | [文档管理](#document_manager) |
97+
| 打印设置管理 | ✅已完成 | AI | 2024-12-19 | 2024-12-19 | [设置管理](#settings_manager) |
98+
| 主界面设计 | ✅已完成 | AI | 2024-12-19 | 2024-12-19 | [主界面](#main_window) |
99+
| 打印控制器 | ✅已完成 | AI | 2024-12-19 | 2024-12-19 | [打印控制](#print_controller) |
100+
| 工具函数模块 | ✅已完成 | AI | 2024-12-19 | 2024-12-19 | [配置管理](#config_utils) |
101+
| 应用配置管理 | ✅已完成 | AI | 2024-12-19 | 2024-12-19 | [配置持久化](#config_utils) |
102+
| 单元测试编写 | 待完成 | AI | 2024-12-20 | | 需要后续添加 |
103+
| 应用打包构建 | ✅已完成 | AI | 2024-12-20 | 2024-12-19 | build.bat脚本 |
104+
105+
## 代码检查与问题记录
106+
[本部分用于记录代码检查结果和开发过程中遇到的问题及其解决方案。]
107+
108+
## 环境设置与运行指南
109+
### 开发环境要求
110+
- Python 3.12+
111+
- Windows 10/11 操作系统
112+
- Microsoft Office (用于Word和PPT文档处理)
113+
- 至少一台可用的打印机
114+
115+
### 依赖安装
116+
```bash
117+
pip install -r requirements.txt
118+
```
119+
120+
### 开发运行
121+
```bash
122+
# 直接运行主程序
123+
python main.py
124+
125+
# 或者在src目录下运行
126+
cd src
127+
python -m gui.main_window
128+
```
129+
130+
### 应用构建
131+
```bash
132+
# 使用构建脚本(推荐)
133+
build.bat
134+
135+
# 手动构建
136+
pyinstaller --onefile --windowed --name="批量文档打印器" --icon=resources/app_icon.ico main.py
137+
```
138+
139+
#### 图标配置
140+
- **应用图标位置**: `resources/app_icon.ico`
141+
- **图标格式**: ICO格式,支持多尺寸
142+
- **推荐尺寸**: 16x16, 32x32, 48x48, 64x64, 128x128, 256x256像素
143+
- **如果没有图标**: 将使用PyInstaller默认图标
144+
145+
#### 构建脚本功能
146+
`build.bat` 脚本包含以下功能:
147+
- ✅ 自动检查Python环境
148+
- ✅ 安装项目依赖
149+
- ✅ 检测应用图标文件
150+
- ✅ 生成版本信息
151+
- ✅ 清理旧构建文件
152+
- ✅ 优化打包参数
153+
- ✅ 包含资源文件
154+
155+
#### 构建输出
156+
- **可执行文件**: `dist/批量文档打印器.exe`
157+
- **版本信息**: 包含开发者署名"喵言喵语"
158+
- **文件大小**: 约30-60MB(包含所有依赖)
159+
160+
## 部署与发布
161+
- **目标平台**: Windows 10/11 (64位)
162+
- **发布方式**: 独立exe可执行文件
163+
- **运行要求**:
164+
- Windows系统
165+
- Microsoft Office (用于Word/PPT打印)
166+
- PDF阅读器 (用于PDF打印)
167+
- 可用打印机
168+
- **安装说明**: 无需安装,下载exe文件直接运行
169+
- **首次运行**: 可能需要较长时间初始化

main.py

Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
"""
2+
办公文档批量打印器 - 主程序入口
3+
支持批量打印Word、PowerPoint、PDF文档的桌面应用程序
4+
"""
5+
import sys
6+
import os
7+
from pathlib import Path
8+
9+
# 添加源代码路径到系统路径
10+
src_path = Path(__file__).parent / "src"
11+
sys.path.insert(0, str(src_path))
12+
13+
try:
14+
# 导入主窗口
15+
from src.gui.main_window import MainWindow
16+
17+
def main():
18+
"""主函数"""
19+
print("=" * 50)
20+
print(" 办公文档批量打印器 v1.0")
21+
print(" 支持 Word、PowerPoint、PDF 文档")
22+
print("=" * 50)
23+
24+
try:
25+
# 检查系统要求
26+
check_system_requirements()
27+
28+
# 创建并运行主窗口
29+
app = MainWindow()
30+
app.run()
31+
32+
except Exception as e:
33+
print(f"应用程序运行失败: {e}")
34+
import tkinter.messagebox as messagebox
35+
messagebox.showerror("错误", f"应用程序运行失败:\n{e}")
36+
sys.exit(1)
37+
38+
def check_system_requirements():
39+
"""检查系统要求"""
40+
import platform
41+
42+
# 检查操作系统
43+
if platform.system() != "Windows":
44+
raise RuntimeError("此应用程序仅支持Windows操作系统")
45+
46+
# 检查Python版本
47+
if sys.version_info < (3, 8):
48+
raise RuntimeError("需要Python 3.8或更高版本")
49+
50+
# 检查必要的依赖
51+
required_modules = [
52+
'tkinter',
53+
'pathlib',
54+
'win32print',
55+
'win32api'
56+
]
57+
58+
missing_modules = []
59+
for module in required_modules:
60+
try:
61+
__import__(module)
62+
except ImportError:
63+
missing_modules.append(module)
64+
65+
if missing_modules:
66+
raise RuntimeError(
67+
f"缺少必要的依赖模块: {', '.join(missing_modules)}\n"
68+
"请运行: pip install -r requirements.txt"
69+
)
70+
71+
print("✓ 系统要求检查通过")
72+
73+
if __name__ == "__main__":
74+
main()
75+
76+
except ImportError as e:
77+
print(f"导入模块失败: {e}")
78+
print("请确保已安装所有依赖: pip install -r requirements.txt")
79+
sys.exit(1)

0 commit comments

Comments
 (0)