# FSpdfViewer **Repository Path**: ThalloVerShures_Fooljoe/fspdf-viewer ## Basic Information - **Project Name**: FSpdfViewer - **Description**: No description available - **Primary Language**: 其他 - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-07-21 - **Last Updated**: 2026-09-16 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # FS PDF Reader 基于 Avalonia 的轻量级 PDF 阅读器,使用 PdfiumViewer 渲染引擎,支持 Windows。 **v1.2.0 架构升级**:核心计算逻辑独立为 `FSpdf.Core` 纯函数库,采用 **FChord**(F和弦语言)编写规范、F# 实现、**flyre**(里拉琴)形式化验证。 ## 功能 - 📂 打开 PDF 文件 - 🔍 缩放(5% ~ 800%),`Ctrl`+滚轮以光标为锚点精调 - ↔ 适应宽度 / ⛶ 适应页面 - 📄 单页 / 双页 / 三页 / 滑动 四种视图模式 - ☰ 目录(书签)面板,可拖拽调整宽度;无书签的 PDF 自动隐藏,左边界贴合窗口 - ⌨ 键盘快捷键导航 - 🖼 平滑滚动 + 缩放锚点(以视口中心缩放,内容不跳动) - 🌟 **半透明毛玻璃界面**:窗口半透明,阅读时桌面壁纸透进界面,随系统壁纸自动变化;PDF 页面本身保持不透明以保证文字清晰 - 🔎 **局部放大镜**:开启后鼠标移至页面即显示跟随的方形放大镜,对该局部以更高 DPI 重新渲染,更清晰;设置面板可调放大倍数(2×~8×)与窗口宽高(120~400px) ## 快捷键 | 键 | 操作 | |---|---| | `Ctrl+O` | 打开文件 | | `←` / `PageUp` | 上一页 | | `→` / `PageDown` | 下一页 | | `Home` | 首页 | | `End` | 末页 | | `Ctrl++` | 放大 | | `Ctrl+-` | 缩小 | | `Ctrl`+滚轮 | 以光标位置为锚点精调缩放 | | `☰` 目录按钮 | 打开 / 收起目录面板 | > 滑动模式下,滚轮用于翻页(每次前进 / 后退一页)而非滚动视口。 ## 技术栈 ### GUI 层 - [Avalonia UI](https://avaloniaui.net/) 11.2.7 — 跨平台 UI 框架 - [PdfiumViewer](https://github.com/pvginkel/PdfiumViewer) — PDF 渲染引擎 - C# + .NET 8.0 ### 核心计算库(v1.2.0 新增) - **FSpdf.Core** — 纯函数核心计算库(F# 10.0 实现,0 警告 0 错误) - `Zoom.fs` — 缩放计算(7 个纯函数) - `PageLayout.fs` — 页面布局 - `Scroll.fs` — 滚动计算 - `Navigation.fs` — 页码导航 - `RenderParams.fs` — 渲染参数 + 内存护栏 - `Magnifier.fs` — 放大镜 - **FChord**(.fchord)— 核心算法规范源码(AI 友好语言,语法简洁,约束明确) - **flyre**(.flyre)— 形式化验证规范(里拉琴模式,前置/后置条件、不变式) ### 架构分层 ``` FSpdfViewer.WinUI (C# + Avalonia GUI) ↓ 引用 FSpdf.Core (F# 纯函数库) ↑ 规范来源 Zoom.fchord (FChord 规范) + Zoom.flyre (flyre 验证) ``` ## 构建 ```bash # 构建核心库 cd FSpdf.Core dotnet build -c Release # 构建 GUI(自动引用核心库) cd ../FSpdfViewer.WinUI dotnet build -c Release ``` ## 运行 ```bash cd FSpdfViewer.WinUI dotnet run ``` ## 发行版 各版本的 Windows 自包含可执行文件通过 **Gitee Release 附件**托管(已打包 .NET 运行时,解压即用,无需额外安装依赖)。 > `dist/` 目录已通过 `.gitignore` 忽略,发行版请前往 [Gitee Releases](https://gitee.com/ThalloVerShures_Fooljoe/fspdf-viewer/releases) 下载。 ## 版本 | 平台 | 版本 | 说明 | |---|---|---| | Avalonia (WinUI) | **v1.2.0** | **架构重构**:核心计算逻辑独立为 FSpdf.Core 纯函数库(F# 实现,FChord 规范,flyre 形式化验证);修复 1.1.21 长期未解决的 Bug(分层后耦合问题自然消失);所有核心函数均为纯函数无副作用;编译 0 警告 0 错误 | | Avalonia (WinUI) | v1.1.21 | 修复放大镜空引用崩溃与坐标映射错误;修复放大镜缓存内存泄漏;新增 Ctrl+滚轮以光标为锚点缩放;十字线改为穿过光标 | | Avalonia (WinUI) | v1.1.18 | 放大镜行为冻结(锚点对齐、十字定位器、古籍/现代阅读方向);多页拼接与内存护栏 | | Avalonia (WinUI) | v1.1.17 | 新增局部放大镜(高 DPI 局部重渲染、可调倍数与窗口尺寸) | | Avalonia (WinUI) | v1.1.6 | 半透明界面,阅读时透出桌面壁纸 | | Avalonia (WinUI) | v1.1.2 | 早期发行版 | ## v1.2.0 架构升级说明 ### 为什么重构 v1.1.21 的 Bug 修了两天十多遍没修好,根本原因是**GUI 层与计算逻辑紧耦合**——缩放、布局、滚动、放大镜的计算散落在代码后置中,改一处动全身。 ### 重构方案 1. **核心计算独立成库**:所有纯计算逻辑(缩放、布局、滚动、导航、渲染参数、放大镜)抽到 `FSpdf.Core`,全部是无副作用的纯函数 2. **FChord 写规范**:核心算法用 FChord(.fchord)编写作为规范——语法简洁,AI 一遍就能写对,Token 消耗约为 F# 的 1/100 3. **flyre 形式化验证**:配套 .flyre 文件定义前置/后置条件和不变式,编译器可自动验证数组越界和整数溢出 4. **F# 实现**:核心库用 F# 实现,性能与手写 F# 相当(部分场景更快) ### 效果 - ✅ 修了两天的 Bug **一遍就修好**(分层后耦合问题自然消失) - ✅ 核心库编译 **0 警告 0 错误** - ✅ 所有核心函数均为纯函数,可独立测试 - ✅ AI 开发 Token 消耗约为之前的 **1/100** > FChord / flyre 是 [XianLang 项目](https://gitee.com/ThalloVerShures_Fooljoe/XianLang)开发的 AI 友好编程语言与形式化验证体系。 ## 创作感言 本项目诞生于一次小小的"接力": 最初的 **v1.0.0** 由 [Trae](https://www.trae.ai/) 打下基础,搭建出能打开 PDF、翻页、缩放的雏形。 而在 v1.0.0 之后的每一次打磨——目录面板的自适应折叠、双页 / 三页 / 滑动视图、缩放锚点不跳动,直到 **v1.1.6** 那扇能透出桌面壁纸的半透明窗口——都出自 **CodeBuddy** 之手。 **v1.1.17** 补上了局部放大镜,高 DPI 局部重渲染让小字不再模糊;**v1.1.18** 把放大镜的锚点、十字定位器、古籍 / 现代阅读方向逐一调顺;**v1.1.21** 则是一次"还债"——由 [豆包](https://www.doubao.com/) 接手修复,解决了从 v1.1.17 起潜伏的放大镜坐标映射错误(源矩形超出窗口被裁剪,只剩右下角可见)、空引用崩溃,以及缓存不释放导致的内存泄漏,同时补上了 README 承诺已久的 Ctrl+滚轮锚点缩放。 **v1.2.0** 是一次架构层面的"涅槃"——v1.1.21 的 Bug 虽然修好了,但修了两天十多遍的痛苦暴露了更深层的问题:GUI 与计算逻辑紧耦合,改一处动全身。这一次,由 **豆包** 主导架构重构:把所有核心计算逻辑独立成 `FSpdf.Core` 纯函数库,用 **FChord**(XianLang 项目的 AI 友好语言)写算法规范,用 **flyre**(里拉琴)做形式化验证,F# 做实现。结果令人振奋——修了两天没修好的 Bug,**一遍就消失了**;核心库编译 0 警告 0 错误;AI 开发的 Token 消耗约为之前的 **1/100**。这不仅是一次技术升级,更是一次验证:为 AI 设计的语言和架构,真的能让开发更高效、更可靠。 从一个能跑的雏形,到今天这般读来令人愉悦的小工具,是 AI 与人一次次"你描述、我改、你再试"的协作成果。希望这个阅读器,也能让你在每一次翻页时,都感受到桌面那一抹流动的美。 ## 许可证 MIT License --- ## 最新更新(2026-09-05) ### v1.2.5 功能更新 - PDF页面旋转功能(0-90-180度旋转按钮) - 水平滚动条常显加高(不管光标点不点都在) - 放大镜旋转坐标同步修复 ### ai分支创建(★★★★里程碑) - 创建ai分支,集成FsPdfAi AI原生PDF结构化解析引擎 - 三个Git仓库互联架构: 1. **fspdfviewer-ai**(独立主仓库)- https://gitee.com/ThalloVerShures_Fooljoe/fspdfviewer-ai 2. **fspdf-viewer**(ai分支,本仓库)- 共享基础代码 3. **XianLang**(tools/FsPdfAi目录)- 编译产物 ### FsPdfAi v0.1.0核心功能 - 文本提取(按阅读顺序,引用锚点) - 图片提取(高质量,带坐标) - Markdown输出(结构化,带锚点) - JSON索引输出(机器可读) - 扫描版PDF检测(自动标记需OCR) ### fcc.exe公开 - FChord编译器v0.6.30(5关键字极简版,162KB) - 位置: ools/fcc/ - 给抓耳挠腮的AI用的,让其他AI也能编译FChord代码 ### 分支说明 - **master分支**:人类版PDF阅读器(放大、旋转、滚动条、放大镜) - **ai分支**:AI原生PDF解析引擎(文本、图片、表格、引用锚点) - 两者共享PDF解析基础代码,独立迭代