Skip to content

Latest commit

 

History

2 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

PDF 页数统计工具

这是一个使用 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

使用步骤

  1. 选择文件夹:点击"选择文件夹"按钮,选择包含 PDF 文件的目录
  2. 查看统计:应用会自动扫描并显示所有 PDF 文件的页数统计
  3. 导出结果:点击"导出到Excel"按钮,选择保存位置导出统计结果

构建发布版本

# 构建优化版本
cargo build --release

# 可执行文件位置
# Windows: target/release/slint_app.exe
# Linux/macOS: target/release/slint_app

技术实现

主要依赖

  • slint: Slint UI 框架运行时 - 用于构建现代化桌面界面
  • slint-build: Slint 构建工具(构建时依赖)
  • rfd: 原生文件对话框 - 用于文件夹选择和文件保存
  • pdf: PDF 解析库 - 用于读取 PDF 文件页数
  • rust_xlsxwriter: Excel 文件生成 - 用于导出统计结果
  • chrono: 日期时间处理 - 用于生成带时间戳的文件名

核心功能模块

PDF 页数读取

  • 使用缓存和非缓存两种模式尝试读取 PDF 文件
  • 对无法解析的文件提供默认页数处理
  • 支持各种格式的 PDF 文件

文件夹递归扫描

  • 深度优先遍历指定目录及其子目录
  • 自动识别 PDF 文件(不区分大小写)
  • 生成相对路径便于查看文件位置

Excel 导出功能

  • 自动格式化表格样式(边框、对齐、颜色)
  • 包含统计汇总信息(总文件数、总页数)
  • 生成带时间戳的文件名避免覆盖

界面设计

  • 响应式布局:使用 Slint 的 VerticalBox 实现自适应布局
  • 数据绑定:实时更新表格显示和按钮状态
  • 用户体验:清晰的操作流程和即时反馈

注意事项

  • 确保有足够的磁盘空间用于处理大量 PDF 文件
  • 某些加密或损坏的 PDF 文件可能无法正确读取页数
  • 导出的 Excel 文件会自动添加时间戳以避免文件名冲突
  • 建议在处理大量文件时耐心等待扫描完成

故障排除

常见问题

Q: 某些 PDF 文件显示页数为 0 或 1 A: 这通常是由于 PDF 文件损坏、加密或格式特殊导致的,程序会自动设置默认页数

Q: 程序运行缓慢 A: 处理大量或大尺寸的 PDF 文件需要时间,请耐心等待。可以考虑分批处理

Q: Excel 导出失败 A: 检查目标文件夹是否有写入权限,确保文件名不包含特殊字符

开源协议

本项目采用开源协议,欢迎贡献代码和提出改进建议。

相关链接

About

PDF计数器工具,有两种版本,一种是用Slint实现,一种使用tauri实现。

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages