原生 AI 集成的本地阅读器:阅读 PDF(文字版 / 扫描版)与图片文件,选中文字即可翻译、解释、搜索;支持文本层与图像层标记;内置完全离线的本地 OCR 与多模态识图。
当前阶段:M0–M6 全部核心功能已完成。 书库管理、PDF 管线、选区与文本层标记、AI 对话与识图、整页 OCR 与图像层标记、全文搜索均已实现,另有 OCR 精度增强(7.1.x 系列)。详见
docs/IMPLEMENTATION_STATUS.md。
┌────────────────────────────────────────────────┐
│ Flutter Desktop(UI 层,Dart) │
│ 书库 阅读区 标记层 侧边栏 AI 面板 设置 │
│ 状态管理:Riverpod 路由:go_router │
└───────────────────┬────────────────────────────┘
│ flutter_rust_bridge v2(类型安全 FFI)
┌───────────────────┴────────────────────────────┐
│ Rust 核心层(无 UI,全部重活) │
│ PDF(pdfium-render) OCR(rapidocr-core) │
│ AI(reqwest SSE 流式)SQLite + FTS5 + jieba │
│ 数据模型 / 命令接口(FRB 导出) │
└────────────────────────────────────────────────┘
- 分工原则:所有重活与数据在 Rust 侧(PDF 渲染、OCR、AI 网络、数据库、搜索索引);Flutter 只做绘制与交互。
- 完全离线 OCR:rapidocr-core(PP-OCRv4 det/cls/rec,ONNX Runtime 静态链接),高精度 + 快速双模式,模型随安装包内置(~210MB)。
- AI 侧:OpenAI 兼容协议(BYOK,可配 DeepSeek / Kimi / 通义等),流式对话(Markdown + LaTeX 渲染)+ 自由截图多模态识图。
- 目标平台:Linux 桌面(Arch / Debian / Ubuntu / Fedora 等,详见
docs/LINUX_PACKAGES.md)。 - 零参考:完全重写,不迁移任何旧代码。
详见 docs/FEATURES.md(需求)、docs/TECH_ROADMAP.md(技术路线)与 docs/IMPLEMENTATION_STATUS.md(实施状态)。
ZhiYue/
├── docs/ # 需求与技术文档
│ ├── FEATURES.md # 需求规格
│ ├── TECH_ROADMAP.md # 技术路线
│ ├── IMPLEMENTATION_STATUS.md # 实施状态与后续开发方向
│ ├── ARCHITECTURE.md # 架构设计
│ ├── DEPENDENCIES.md # 工具链依赖说明
│ ├── LINUX_PACKAGES.md # Linux 分发包(deb/rpm/AppImage)
│ └── FLUTTER_UI_MIGRATION.md # Flutter UI 迁移说明
├── scripts/ # 构建与安装脚本
│ ├── setup.sh # 工具链安装(pacman 依赖 / FRB codegen)
│ ├── fetch_pdfium.sh # 获取 pdfium 动态库(构建前置)
│ ├── download_ocr_models.sh # 下载 OCR 模型(运行时 / 打包内置)
│ ├── build_packages.sh # 构建 deb/rpm/AppImage
│ └── build_deb.sh # 单独构建 deb(被 build_packages.sh 调用)
├── rust/ # Rust 核心 lib crate(rbwa_core)
│ ├── Cargo.toml
│ ├── libpdfium/ # pdfium 动态库(fetch_pdfium.sh 下载)
│ └── src/
│ ├── api.rs # FRB 导出层(Flutter->Rust 唯一入口)
│ ├── models/ # 共享数据模型(跨 FFI)
│ ├── db/ # SQLite 连接 + schema + FTS5 索引
│ ├── pdf/ # PDF 渲染与文本提取(pdfium-render)
│ ├── ocr/ # OCR 引擎(rapidocr-core,懒加载)
│ ├── ai/ # AI 客户端(手写 reqwest SSE 流式)+ 系统提示词
│ ├── search/ # 全文搜索(FTS5 + jieba 分词)
│ ├── export.rs # 标注导出(Markdown/JSON)
│ ├── error.rs # 统一错误类型
│ └── frb_generated.rs # FRB 生成的 Rust 侧绑定(勿手改)
├── lib/ # Flutter Dart 代码
│ ├── main.dart # 启动初始化(窗口+FRB+SQLite)
│ ├── app.dart # 根 widget(标题栏+主题+路由)
│ ├── router/ # go_router 配置
│ ├── core/ # 主题 / 通用组件
│ ├── features/ # 功能模块(library/reader/annotation/ai/search/screenshot/settings/shell)
│ ├── data/ # 数据层(repositories,桥接 FRB)
│ └── src/rust/ # FRB 生成的 Dart 绑定(勿手改)
├── linux/ # Flutter Linux 桌面 runner(CMake:cargo 编译 + .so/pdfium 打包进 bundle)
├── test/ # 单元 / 组件 / 冒烟测试(flutter test)
├── integration_test/ # 集成测试(flutter test integration_test)
├── packaging/ # Linux 打包资源(ZhiYue.desktop / ZhiYue.spec / 图标)
├── assets/ # 应用图标(ZhiYue.png)
├── dist/ # 分发包产物(deb/rpm/AppImage,构建时生成)
└── pubspec.yaml
sudo bash scripts/setup.sh脚本会安装 cmake / ninja 等系统依赖(pacman)与 flutter_rust_bridge_codegen。Flutter SDK 需自行安装(脚本会检测并提示;默认路径 ~/develop/flutter,解压后把 bin 加入 PATH)。详见 docs/DEPENDENCIES.md。
# 获取 pdfium 动态库(构建前置,Rust 核心的 PDF 渲染依赖它)
bash scripts/fetch_pdfium.sh
# 重新生成 FRB 绑定(修改 rust/src/api.rs 后执行)
flutter_rust_bridge_codegen generate
# 构建(debug 或 release)-- CMake 会自动 cargo 编译 Rust 并把 .so 打进 bundle
flutter build linux --release
# 运行(可执行文件名为 ZhiYue)
./build/linux/x64/release/bundle/ZhiYue
# 或直接热重载开发
flutter run -d linuxOCR 模型不参与构建,运行时整页 OCR 功能需要(开发模式下载到 ~/.local/share/RBWA/models):
bash scripts/download_ocr_models.sh --all# Rust 单元测试(系统提示词 / 数据层 / 注入防御等)
cargo test --manifest-path rust/Cargo.toml
# Dart 测试(AI 冒烟等需先 cargo build --release 生成 librbwa_core.so 供加载)
flutter test一键构建 deb / rpm / AppImage 分发包(内置 OCR 模型,约 250MB):
bash scripts/build_packages.sh安装与使用方式见 docs/LINUX_PACKAGES.md。
应用启动后:
- 书库页:导入 PDF / 图片 → 网格展示 + 封面缩略图,支持收藏、删除、分类(拖拽归类)、检索
- 阅读器:单页 / 双滚动 / 双页三模式,缩放、翻页、进度恢复、侧栏(目录树、缩略图轨)
- 文字版 PDF:划词选区 → 高亮 / 下划线 / 删除线 / 笔记,标注侧栏 + Markdown/JSON 导出
- 扫描版 PDF / 图片:整页 OCR(高精度 / 快速双模式)→ 隐形文本层可选中;低置信度行标记 + 手动修正
- AI 侧栏:流式对话(提示词模板 / 自定义),自由截图 → 多模态识图
- 搜索:书库全局全文搜索(命中书 / 页 / 摘要 + 页内高亮)
- 数据:
~/.local/share/RBWA/rbwa.db(SQLite WAL + FTS5 索引)
| 里程碑 | 内容 | 状态 |
|---|---|---|
| M0 骨架 | 工程脚手架 + FRB 管道 + SQLite schema + UI 空壳 | ✅ 完成 |
| M1 书库 | 导入 / 网格 / 收藏 / 删除 / 分类(拖拽归类)/ 封面缩略图 / 无边框标题栏 / 主题持久化 | ✅ 完成 |
| M2 PDF 管线 | pdfium 渲染 → GPU 纹理 / 虚拟滚动 / 三视图模式 / 缩放 / 翻页 / 进度恢复 / 侧栏 | ✅ 完成 |
| M3 选区与文本层标记 | 字符盒精确选区 / 高亮 / 下划线 / 删除线 / 笔记 / 标注侧栏 / Markdown+JSON 导出 | ✅ 完成 |
| M4 AI 与识图 | 流式对话(Markdown + LaTeX)/ 提示词模板 / 历史持久化 / 自由截图 → 多模态识图 | ✅ 完成 |
| M5 整页 OCR 与图像层标记 | 扫描页自动检测 / 双模式整页扫描 / 隐形文本层 / 按页缓存 / 图片阅读 / 画笔 / 便签 / 图章 / 形状 / 拼合导出 | ✅ 完成 |
| M6 全文搜索 | FTS5 + jieba / 后台预构建 + 增量索引 / 失败终态标记 / 全局搜索跳转 / 页内高亮 | ✅ 完成 |
| 7.1.x OCR 精度 | 预处理增强 / 90° 自适应矫正 / 180° cls 矫正 / 置信度展示 / 手动修正 | ✅ 完成 |
各里程碑的详细实施记录见 docs/IMPLEMENTATION_STATUS.md。
GNU General Public License v3.0 — Copyleft:允许使用、修改与分发,但衍生作品必须以 GPL 开源