Skip to content

About

⚡ Fast, lightweight, open-source PDF reader for Windows (Rust + Tauri): tabs, comments & signatures, page tools, night mode, region snapshots · 快速、轻量、开源的 PDF 阅读器:多标签、批注与签名、页面整理、夜间阅读、框选截图

Topics

Resources

Stars

3 stars

Watchers

0 watching

Forks

Repository files navigation

YetAnotherPDFReader — 快速、轻量、开源的桌面 PDF 阅读器

YetAnotherPDFReader

快速、轻量、开源的桌面 PDF 阅读器
多标签阅读 · 批注与签名 · 页面管理与合并 · 水印与密码保护 · 离线文字识别(OCR) · 夜间阅读 · 框选截图 —— 安装包约 15 MB,完全离线,不需要账号。

Release Downloads License: MIT Platform Rust Tauri Stars

简体中文 · English

下载安装 · 为什么选择 YAPR · 界面预览 · 功能一览 · 对比 · 快捷键 · 技术架构 · 从源码构建 · 更新日志

下载 Windows 和 Linux 版


📥 下载安装

Tip

v0.4.0 新功能:应用内使用说明(F1)、检查更新(可选每天 / 每周自动检查,默认关闭),更新后首次启动会介绍新版本的变化。v0.3.0 新增了离线文字识别(OCR),v0.2.0 新增了页面管理、合并与拆分、水印、密码保护和 Linux 版本。完整内容见 更新日志。

前往 Releases 下载最新版本:

版本 文件 说明
安装版(推荐) YetAnotherPDFReader_x.y.z_x64-setup.exe 安装到当前用户,不需要管理员权限;会注册 .pdf 文件关联;安装界面支持简体中文、English、繁體中文和日本語
MSI 安装包 YetAnotherPDFReader_x.y.z_x64_en-US.msi 适合企业批量部署(组策略、Intune 等)
便携版 YetAnotherPDFReader_x.y.z_x64_portable.zip 解压即用。设置、最近文件、日志和缓存都保存在程序旁边的 data 文件夹里,可以放在 U 盘中随身携带
🐧 Linux deb YetAnotherPDFReader_x.y.z_amd64.deb Debian、Ubuntu、Linux Mint 等:sudo apt install ./YetAnotherPDFReader_x.y.z_amd64.deb
🐧 Linux rpm YetAnotherPDFReader-x.y.z-1.x86_64.rpm Fedora、openSUSE 等:sudo dnf install ./YetAnotherPDFReader-x.y.z-1.x86_64.rpm
🐧 AppImage YetAnotherPDFReader_x.y.z_amd64.AppImage 适用于任意发行版:chmod +x 后直接运行

系统要求:Windows 10 / 11(x64),或 Linux x86_64(glibc 2.35 及以上,例如 Ubuntu 22.04、Debian 12、Fedora 36 及更新版本,需要 WebKitGTK 4.1;deb / rpm 安装时会自动安装依赖)。Windows 上程序使用系统中的 Microsoft Edge WebView2 运行时,Windows 11 和保持更新的 Windows 10 都已自带。如果系统中没有,安装版会自动下载安装;便携版请先手动安装 WebView2 运行时。

Note

安装包暂未做代码签名。首次运行如果出现 SmartScreen 提示,点击「更多信息」→「仍要运行」即可。每个版本文件的 SHA-256 校验值都列在 Release 说明中。


✨ 为什么选择 YAPR

特色 说明
🪶 非常轻量 安装包约 15 MB(其中约 10 MB 是离线 OCR 引擎),启动快,内存占用小。超过设定大小的文件会按 1 MB 分块从磁盘读取,几百 MB 的文档也能马上打开
🔒 完全离线,保护隐私 不需要账号,没有广告和遥测。唯一的联网功能是可选的检查更新(只访问 GitHub,默认关闭)。点击文档里的网页链接时,默认会先询问
🛡️ 保存稳妥 修改以增量更新的方式写回 PDF:原始内容原样保留,已有的数字签名不会失效。写入时先写临时文件再原子替换,可选保留 .bak 备份;程序意外退出后,可以恢复未保存的批注
✍️ 免费的完整批注 高亮、便笺、图形、图章、签名、文本框一应俱全,文件里原有的批注也能直接修改
🗂️ 免费的页面管理 在大缩略图网格中多选、拖动排序、旋转、翻转、复制、替换、删除;多个 PDF 和图片一次合并,从资源管理器直接拖到页面之间即可插入;按页数或范围拆分文档;添加文字或图片水印。每一步都能撤销
🔎 离线文字识别(OCR) 采用 PaddleOCR PP-OCRv6 模型,中英文识别准确、速度快(约 0.2 秒/页),完全在本机运行。可以框选区域识别文字后复制,也可以让整份扫描件变成可搜索、可选择的文档,页面外观不变
🔐 密码保护 AES-256 加密,可以设置打开密码,也可以只限制打印、复制和修改;移除密码同样一步完成
🌙 舒适的夜间阅读 提供深色(反色)、夜间(页面变暗,图片保持原色)、棕褐、护眼绿和自定义配色,可以跟随系统深色主题,侧栏缩略图也会一起调暗
📸 清晰的框选截图 框选页面上任意区域,按 PDF 内容重新渲染(最高 600 DPI)后直接复制到剪贴板,不是模糊的屏幕截图;截完自动退出截图模式
⌨️ 高效顺手 命令面板(Ctrl+Shift+P)、可完全自定义的快捷键、可搜索的分层设置页、9 种界面语言
🧩 开源,可审查 MIT 协议。PDF 写入核心是独立的 Rust crate,有单元测试和驱动真实应用的端到端测试

📸 界面预览

主界面:缩略图、批注列表与多种批注
主界面(深色主题):左侧是页面缩略图,右侧是批注列表,页面上有高亮、下划线、便笺、手绘、箭头和矩形批注

浅色主题与书签
浅色主题与书签目录
批注工具栏与便笺
批注工具栏、便笺与回复
框选截图
框选截图:选区以外变暗,选区保持原亮度,并显示输出图片的尺寸
截图完成
松开鼠标即复制到剪贴板,自动退出截图模式;也可以另存为 PNG
页面管理
页面管理:多选、拖动排序、悬停快捷操作,拖入文件即可插入
水印
水印:文字或图片,九宫格位置或平铺,实时预览
密码保护
密码保护:打开密码、权限限制和密码强度提示
命令面板
命令面板:搜索并执行任意命令
框选识别文字
框选识别文字:在扫描页上框选区域,识别结果可修改后复制
扫描件可搜索
文字识别后,扫描件可以直接搜索,高亮与原图文字精确对齐
使用说明
使用说明(F1):按主题介绍功能,按钮可直接打开对应功能
新功能介绍
更新后首次启动,分条介绍每个新版本的主要变化

页面配色模式:同一页文档在五种模式下的效果。注意「夜间」模式下页面变暗了,图片却保持原来的颜色。

五种页面配色模式

起始页
起始页:带封面缩略图的最近文档

截图中的演示文档由 scripts/make-demo-pdf.py 生成,截图由 scripts/readme-shots.mjs 自动拍摄。


📚 功能一览

阅读

功能 说明
多标签 拖动排序、中键关闭、重新打开已关闭的标签、启动时恢复上次的文档;再次打开同一个文件时会切换到已有标签
页面布局 单页、连续、双页(可带封面)、横向滚动、平铺
缩放 预设比例、适合页面、适合宽度、实际大小;Ctrl+滚轮和触控板双指缩放以鼠标位置为中心;旋转视图
侧栏 虚拟化的页面缩略图(可拖动重排页面)、书签(筛选、展开和折叠、跟随当前位置)、批注列表、附件、图层、全文搜索
查找 区分大小写、全字匹配、区分变音符号、高亮全部结果;按页码或页面标签跳转;前进和后退
链接与表单 文档内跳转;外部链接打开前可以确认;可填写的交互式表单
专注阅读 阅读模式、全屏、演示模式(切换动画、自动翻页、单击翻页)、自动滚动
页面配色 正常、深色、夜间(图片保持原色)、棕褐、护眼绿,以及自定义文字和背景颜色;可以跟随深色主题
框选截图 Ctrl+Alt+S 或工具栏上的 📷 按钮。可选屏幕分辨率或 150 / 300 / 600 DPI,可选是否包含批注、是否套用页面配色
其他 朗读(系统语音);打印(可选页面范围和质量);把页面导出为图片或文本;文档属性(可修改标题、作者等,可查看安全设置和字体)

批注与编辑

功能 说明
文本标记 高亮、下划线、删除线、波浪线;选中文字后会出现浮动工具栏
便笺与讨论 便笺支持回复和审阅状态;也可以添加文本框
绘图 手绘(自动平滑,相邻笔画自动合并)、橡皮擦、矩形、椭圆、直线、箭头、多边形、折线
图章与签名 标准图章、带姓名和日期的动态图章、自定义图章、图片图章;手写、键入或图片签名,可保存后重复使用
编辑批注 选择、移动、缩放、编辑顶点;修改颜色、不透明度、线宽、字体、线端样式;复制粘贴、锁定、设为工具默认样式。新建的批注和文件中原有的批注都能编辑
页面整理 旋转、删除、插入空白页、从其他 PDF 插入页面、重排、提取为新文件
撤销与保存 所有操作(包括页面操作)都能撤销和重做;有未保存的修改时会提醒;保存、另存为、还原;崩溃恢复;可选备份

页面编辑与文档保护

功能 说明
页面管理(Ctrl+Shift+O) 大缩略图网格,可调大小;单击、Ctrl / Shift+单击多选,方向键浏览;拖动排序;悬停显示旋转和删除按钮,页面之间的「+」可在该处插入;右键菜单和快捷键(R 旋转、Ctrl+D 复制、Delete 删除)
合并文件 一次选择多个 PDF 和图片(JPG、PNG、WebP、GIF、BMP),调整顺序,并可为每个 PDF 指定页码范围;图片可保持原始尺寸,或适应 A4、Letter、当前页尺寸并留边距,横竖方向自动匹配;JPEG 照片不重新压缩,并按 EXIF 方向自动摆正;也可以直接从资源管理器把文件拖到两页之间
旋转与翻转 选中页面或全部页面顺时针、逆时针或 180° 旋转;水平或垂直翻转(镜像),批注位置同步调整
复制、替换、删除、提取 复制页面(含批注)、用其他 PDF 或图片替换选中页面、删除、提取为新文件
拆分文档 按每 N 页、平均分成 N 份或自定义范围拆分,可预览生成的文件名并选择保存位置
水印 文字水印(支持中文、多行、加粗、颜色)或图片水印;可设置不透明度、旋转角度、九宫格位置或平铺整页,置于内容上方或下方;对话框中实时预览,并记住上次的设置
文字识别(OCR) 「框选识别文字」(Ctrl+Alt+T):框选区域后可查看、修改并复制识别结果;「文字识别(OCR)…」:为整个文档或指定页面添加不可见的文字层,扫描件随即可以搜索、选择和复制,默认跳过已有文字的页面,显示进度且可随时取消;打开扫描文档时会自动提示。识别方案的调研与实测见 docs/ocr.md
密码保护 AES-256 加密;打开密码和权限密码(限制打印、复制、批注、修改);密码强度提示;输入权限密码可在本次会话中解除限制;一键移除保护

易用性

  • 浅色、深色或跟随系统主题,可以调整强调色、界面密度、文字大小和动画
  • 9 种界面语言:简体中文、繁體中文、English、日本語、한국어、Deutsch、Français、Español、Русский
  • 分层设置页,支持搜索、单项重置和导入导出
  • 快捷键可以完全自定义,另有命令面板
  • 应用内使用说明(F1):按主题介绍各项功能,可以搜索,带「试一试」按钮,并列出当前生效的快捷键
  • 检查更新:在「帮助 ▸ 检查更新」中手动检查,或设置为每天 / 每周自动检查;自动选出适合当前安装方式的安装包,可以跳过某个版本
  • 新功能介绍:更新后第一次启动时,分条介绍自上次使用的版本以来的主要变化
  • 文件关联;单实例运行(从资源管理器打开的文件会进入已打开的窗口);拖放打开
  • 文件被其他程序修改或删除时会提示

🆚 与其他阅读器对比

下表是作者整理的 Windows 上几款常见阅读器免费版的大致情况,仅供参考。这些软件更新很快,如有出入,欢迎在 Issue 中指正。

YAPR Adobe Acrobat Reader Foxit PDF Reader SumatraPDF
开源 ✅ MIT ❌ ❌ ✅ GPLv3
安装包体积 约 15 MB 数百 MB 约百 MB 约 10 MB
不需要账号,无推广,无遥测 ✅ ❌ ❌ ✅
多标签 ✅ ✅ ✅ ✅
完整批注(图形、图章、签名) ✅ ✅ ✅ 基础
修改文件中原有的批注 ✅ ✅ ✅ 部分
页面整理(插入、删除、重排、提取) ✅ 免费 需付费版 视版本而定 ❌
合并多个 PDF 和图片、拆分文档 ✅ 免费 需付费版 视版本而定 ❌
水印、设置或移除密码 ✅ 免费 需付费版 视版本而定 ❌
文字识别(OCR),扫描件可搜索 ✅ 免费、离线 需付费版 需付费版 ❌
区域截图复制到剪贴板 ✅ 可选 DPI ✅ ✅ ✅
命令面板 ✅ ❌ ❌ ✅
便携版 ✅ ❌ ❌ ✅

简单来说:如果你只需要一个极简、极快的阅读器,SumatraPDF 是很好的选择;如果你想要接近 Acrobat 的批注、页面整理、水印和加密功能,但不想要几百 MB 的安装包、登录和推广,YAPR 就是为你准备的。


⚡ 常用快捷键

操作 快捷键 操作 快捷键
打开文件 Ctrl+O 命令面板 Ctrl+Shift+P / Ctrl+K
保存 / 另存为 Ctrl+S / Ctrl+Shift+S 查找 Ctrl+F
打印 Ctrl+P 转到页面 Ctrl+G
撤销 / 重做 Ctrl+Z / Ctrl+Y 适合页面 / 适合宽度 Ctrl+0 / Ctrl+2
关闭标签 / 重新打开 Ctrl+W / Ctrl+Shift+T 放大 / 缩小 Ctrl+= / Ctrl+-
切换标签 Ctrl+Tab 显示或隐藏侧栏 F4
框选截图 Ctrl+Alt+S 切换页面配色 Ctrl+Alt+N
批注工具栏 C 选择 / 手形工具 V / H
页面管理 Ctrl+Shift+O 删除当前页 Ctrl+Shift+D
框选识别文字(OCR) Ctrl+Alt+T
阅读模式 Ctrl+H 演示模式 F5 / Ctrl+L
全屏 F11 文档属性 Ctrl+D
设置 Ctrl+, 快捷键列表 Ctrl+/
使用说明 F1

所有快捷键都可以在「设置 ▸ 键盘快捷键」中修改。把鼠标悬停在批注工具栏的按钮上,可以看到各个工具的单键快捷键。


🧱 技术架构

flowchart LR
    subgraph UI["前端 · React 19 + TypeScript"]
        direction TB
        Shell["界面外壳<br/>标签 / 工具栏 / 设置"]
        DC["DocumentController<br/>(每个标签一个)"]
        Ann["批注模型<br/>撤销历史 · 工具 · 几何"]
        PDFJS["pdf.js<br/>共享 Worker 渲染"]
        Shell --> DC
        DC --> Ann
        DC --> PDFJS
    end

    subgraph Core["后端 · Rust + Tauri 2"]
        direction TB
        Cmd["IPC 命令<br/>(大数据走二进制帧)"]
        Sess["文档会话<br/>分块读取 · 检测外部修改"]
        Store["JSON 存储<br/>设置 · 最近文件 · 崩溃恢复"]
        Writer["yapr-pdf crate<br/>增量更新 · 外观流 · 页面操作"]
        Clip["系统剪贴板<br/>(截图)"]
        Cmd --> Sess
        Cmd --> Store
        Cmd --> Writer
        Cmd --> Clip
    end

    PDFJS -- "按 1 MB 分块请求" --> Cmd
    DC -- "批注差异 / 页面操作" --> Cmd
    Writer -- "原子写入" --> Disk[("PDF 文件")]
    Sess --> Disk
Loading

保存流程:每次保存只计算与原始文件的差异,再以增量更新的方式追加到文件末尾。

sequenceDiagram
    participant U as 用户
    participant F as 前端(批注模型)
    participant R as Rust(yapr-pdf)
    participant D as 磁盘
    U->>F: Ctrl+S
    F->>F: 计算与原始批注的差异(新增 / 修改 / 删除)
    F->>R: 原始字节 + 差异(二进制帧)
    R->>R: 生成外观流,追加增量更新段
    R->>D: 写入临时文件,再原子替换(可选 .bak)
    R-->>F: 新的文件信息
    F-->>U: 「所有更改均已保存」,撤销历史仍然保留
Loading

设计要点:

  • 渲染:pdf.js 在一个共享 Worker 中渲染。超过设定大小的文件按 1 MB 分块从磁盘读取;后台标签在一段时间后释放渲染缓存。
  • 批注:保存在内存模型中,文件里原有的批注由 Rust 核心读取。修改某条原有批注时,应用会隐藏 pdf.js 绘制的版本,改由自己绘制。
  • 保存:始终计算与原始字节的差异,由 Rust 以增量更新写入,原有内容不变,数字签名保持有效。
  • 页面操作:由 Rust 重建文档,并保留修改前的字节,所以可以撤销。
  • 截图:从 PDF 重新渲染选区,像素数据交给 Rust 写入系统剪贴板,避开了 WebView 剪贴板接口的权限限制。
目录结构
src/                     React + TypeScript 前端
  document/              DocumentController:pdf.js 视图、历史、保存流程、页面配色、打印、演示、朗读、搜索、缩略图、截图
  annotations/           批注模型、撤销历史、工具、几何计算、DTO、序列化
  components/            界面(外壳、阅读视图、批注叠加层、侧栏、对话框、设置)
  commands/              命令注册表和快捷键处理
  settings/              设置模型(带校验)和设置页结构
  i18n/                  多语言运行时和 9 种语言文件
  pdf/                   pdf.js 初始化(共享 Worker、分块读取)
src-tauri/               Tauri 应用外壳(Rust)
  session.rs             打开的文档、分块读取、检测外部修改
  commands.rs            IPC 命令(大数据走二进制帧)
  store.rs / fsutil.rs   防损坏的 JSON 存储和原子写入
  portable.rs            便携模式
crates/yapr-pdf/         PDF 写入核心(Rust,不依赖界面,有单元测试):批注、页面操作、图片转页面、水印、AES-256 加密
scripts/                 示例文档生成、端到端测试、界面冒烟测试、README 截图

🔧 从源码构建

环境要求:Rust(stable,Windows 上使用 MSVC 工具链)、Node.js 22 或更高版本、WebView2(Windows 10/11 已自带)。

git clone https://github.com/AlexEisie/YetAnotherPDFReader.git
cd YetAnotherPDFReader
npm install

npm run tauri dev        # 开发模式(Rust 后端 + Vite 热更新)
npm run tauri build      # 发布构建,生成 NSIS 安装包和 MSI

构建 Linux 版本:在 Linux 或 WSL(推荐 Ubuntu 22.04)中运行 bash scripts/build-linux.sh,会生成 deb、rpm 和 AppImage,所需依赖列在脚本开头。

只在浏览器中调试界面(使用模拟的后端):

python scripts/make-sample-pdfs.py   # 生成 dev/samples/ 下的示例文档(需要 PyMuPDF)
npm run dev                          # 打开 http://localhost:5174

制作便携版:把 yapr.exe 和一个名为 portable(或 portable.txt)的空文件放在同一个文件夹里。程序检测到这个文件后,会把所有数据保存到旁边的 data 文件夹。

测试

npm test                         # 前端单元测试(Vitest)
cargo test --workspace           # Rust 单元测试(PDF 写入核心、存储、IPC 帧)
cargo clippy --all-targets       # 静态检查
node scripts/e2e-tauri.mjs       # 端到端测试:驱动真实应用,校验写出的 PDF 和剪贴板内容
npm run test:ui                  # 界面冒烟测试,并保存截图
npm run test:editing             # 端到端测试:页面管理、合并图片和 PDF、水印、加密保存后重新打开
npm run test:ocr                 # 端到端测试:扫描件提示、框选识别、整篇识别、搜索与保存
npm run test:help                # 端到端测试:使用说明、检查更新(含模拟的新版本、跳过版本和网络错误)
npm run test:release             # 发布版冒烟测试

📌 路线图

  • Windows 首个版本(安装版、MSI、便携版)
  • 代码签名
  • 应用内使用说明与检查更新
  • Linux 版本(deb、rpm、AppImage)
  • macOS 版本
  • 页面管理、合并与拆分、水印、密码保护
  • 离线文字识别(OCR)
  • 跨页截图、编辑 PDF 正文

欢迎在 Issues 中提出建议或反馈问题。

🤝 参与贡献

欢迎提交 Issue 和 Pull Request。提交代码前,请确认 npm test、cargo test --workspace 和 cargo clippy --all-targets 都能通过。如果改动涉及界面文字,请同时更新 src/i18n/locales/ 下的 9 个语言文件。

📄 开源协议

本项目使用 MIT License。第三方组件(pdf.js、Tauri、React、lopdf 等)的许可信息见 THIRD-PARTY-NOTICES.md。

🙏 致谢

如果这个项目对你有帮助,欢迎点一个 ⭐ Star!

About

⚡ Fast, lightweight, open-source PDF reader for Windows (Rust + Tauri): tabs, comments & signatures, page tools, night mode, region snapshots · 快速、轻量、开源的 PDF 阅读器:多标签、批注与签名、页面整理、夜间阅读、框选截图

Topics

Resources

Stars

3 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages