这是一个使用 Slint UI 框架构建的 Rust 桌面应用程序,用于统计文件夹中所有 PDF 文件的页数,并支持导出统计结果到 Excel 文件。
slint_app/
├── Cargo.toml # 项目配置和依赖
├── build.rs # 构建脚本
├── src/
│ └── main.rs # 主程序入口
├── ui/
│ └── appwindow.slint # Slint UI 定义文件
└── README.md # 项目说明
- 🔍 文件夹扫描:递归扫描指定文件夹中的所有 PDF 文件
- 📊 页数统计:自动读取每个 PDF 文件的页数
- 📋 表格显示:在界面中以表格形式展示文件名、页数和相对路径
- 📤 Excel 导出:将统计结果导出为格式化的 Excel 文件
- 🎨 现代化界面:使用 Slint 构建的美观 GUI 界面
- 🔄 容错处理:对损坏或无法读取的 PDF 文件进行智能处理
- 🖥️ 跨平台支持:支持 Windows、macOS、Linux 操作系统
- Rust 1.70 或更高版本
- Cargo 包管理器
# 克隆项目
git clone <repository-url>
cd slint_app/slint_app
# 运行应用程序
cargo run- 选择文件夹:点击"选择文件夹"按钮,选择包含 PDF 文件的目录
- 查看统计:应用会自动扫描并显示所有 PDF 文件的页数统计
- 导出结果:点击"导出到Excel"按钮,选择保存位置导出统计结果
# 构建优化版本
cargo build --release
# 可执行文件位置
# Windows: target/release/slint_app.exe
# Linux/macOS: target/release/slint_appslint: Slint UI 框架运行时 - 用于构建现代化桌面界面slint-build: Slint 构建工具(构建时依赖)rfd: 原生文件对话框 - 用于文件夹选择和文件保存pdf: PDF 解析库 - 用于读取 PDF 文件页数rust_xlsxwriter: Excel 文件生成 - 用于导出统计结果chrono: 日期时间处理 - 用于生成带时间戳的文件名
- 使用缓存和非缓存两种模式尝试读取 PDF 文件
- 对无法解析的文件提供默认页数处理
- 支持各种格式的 PDF 文件
- 深度优先遍历指定目录及其子目录
- 自动识别 PDF 文件(不区分大小写)
- 生成相对路径便于查看文件位置
- 自动格式化表格样式(边框、对齐、颜色)
- 包含统计汇总信息(总文件数、总页数)
- 生成带时间戳的文件名避免覆盖
- 响应式布局:使用 Slint 的 VerticalBox 实现自适应布局
- 数据绑定:实时更新表格显示和按钮状态
- 用户体验:清晰的操作流程和即时反馈
- 确保有足够的磁盘空间用于处理大量 PDF 文件
- 某些加密或损坏的 PDF 文件可能无法正确读取页数
- 导出的 Excel 文件会自动添加时间戳以避免文件名冲突
- 建议在处理大量文件时耐心等待扫描完成
Q: 某些 PDF 文件显示页数为 0 或 1 A: 这通常是由于 PDF 文件损坏、加密或格式特殊导致的,程序会自动设置默认页数
Q: 程序运行缓慢 A: 处理大量或大尺寸的 PDF 文件需要时间,请耐心等待。可以考虑分批处理
Q: Excel 导出失败 A: 检查目标文件夹是否有写入权限,确保文件名不包含特殊字符
本项目采用开源协议,欢迎贡献代码和提出改进建议。