# PDFTools **Repository Path**: dsguang/pdftools ## Basic Information - **Project Name**: PDFTools - **Description**: No description available - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-10-12 - **Last Updated**: 2026-10-13 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README

PDFTools

开源、纯 Rust 从零构建的 PDF 工作台。
阅读、查找、整理、合并、拆分、批注、填表、签发与保护 PDF。
Windows(x64 · x86 · ARM64) · 界面:English + 简体中文

License: MIT OR Apache-2.0 · Written in Rust · 无账号、无遥测

--- ## 这是什么 PDFTools 对标 Acrobat Pro 的**离线**功能集,并且是清洁室实现:行为只来自公开规范(ISO 32000-2、Arlington 模型)、公开文档和黑盒观察,不含 Adobe 产品的任何代码或素材。 **只做 Windows**:x64、x86、ARM64。没有 macOS、Linux 或网页版。 **先把现状说清楚**(详细数字与评估见 `ROADMAP.md`,实时数据用 `cargo xtask parity`): - `parity/acrobat-features.toml` 跟踪 806 项 Acrobat Pro 功能,约一半已有实现并且至少有一个测试覆盖;按工作量加权约完成三分之一。 - 渲染目前仍由引导用的 `hayro` 完成,自研渲染器(M2)尚未落地,所以世界文字系统、竖排 CJK、渐变、软蒙版这些渲染 P0 项仍是 partial。 - 编辑 PDF 里**已有**的文字和图片(M7)、签名时间戳与 LTV、PDF/A·X·UA 预检、XFA、Office 导入导出都还没有。 - 还没有代码签名安装包。 已经立得住的是「查看 + 整理 + 批注 + 填表 + 签发 + 自动化」这条线。 ## 现在能做什么 **查看。** Acrobat 风格的外壳:菜单、工具栏、快捷键、命令面板都出自同一个命令注册表。布局有连续、单页、双页、视图旋转、全屏和无干扰阅读模式;明暗两套主题。大页面分块渲染,放大后文字依然清晰。每页独立渲染——一页出问题不影响其余页面,损坏的文档尽量修复,而且已知不规范的文件记录在基线里,任何崩溃或质量退化都会让 `cargo xtask check` 失败。 **查找与复制。** 边输入边搜、逐个跳转匹配项,选中的文本按正确的阅读顺序输出,多栏、从右到左的片段和 CJK 同样处理。 **导航。** 可编辑的书签、页面缩略图,以及文档自带的页码标签(i、ii、1、2……)。 **整理页面。** 一眼看到全部页面:单击、Ctrl 单击、Shift 单击选择,拖动重排,旋转、删除、复制、插入空白页、从其他文件插入页面,以及 Crop 与 Set Page Boxes。 **合并与拆分。** Combine 把任意数量的 PDF 合成一个(每个文件得到自己的书签,其自带书签嵌套在下);Extract 把选中页面复制成新文档;Split 每隔 *n* 页或在指定页前切开。链接和命名目的地被重新接线到复制后的页面,表单字段保持可交互,图层保留默认开/关状态,附件随行。 **撤销与保存。** 每次修改都是历史中的一步,编辑菜单会写明这一步(「撤销 旋转页面」)。保存是增量的——原始字节逐字节不变;写入是原子的——先写临时副本再替换原文件;修改每分钟自动保存,意外退出后下次打开会提议恢复;加密文档在磁盘上保持加密。 **批注与评论。** 便签、高亮/下划线/删除线/波浪线、文本框、墨迹、直线、箭头、矩形、椭圆、多边形、云形、标注框、插入文字,以及动态图章、Sign Here 和标准商务图章,都带外观流。支持回复、状态、标记、锁定、移动/缩放/改样式/删除,有属性对话框、面板过滤与排序、摘要、XFDF/FDF 导入导出、展平,以及 Fill & Sign。 **表单与 JavaScript。** 填写所有字段类型并重生成外观;Prepare a form 覆盖每种字段类型与 Field Properties 的各标签页。Acrobat 的 AF 格式/击键/校验/计算函数和简化字段记法按 Acrobat 的事件顺序原生执行;自定义脚本由沙箱化的 JavaScript 引擎(boa)运行,文档脚本和控制台也可用。另有制表顺序、展平,以及 FDF/XFDF/XML/CSV/文本的数据交换。 **签发。** PAdES B-B 签名(可见、不可见、写入已有字段、带 DocMDP 的认证签名)与验签(信任库、签名后变更分类);自签名数字 ID;Windows「当前用户」个人证书存储(CNG 软件密钥,私钥不可导出);签名面板与消息条。结果用 pdfsig 和 OpenSSL 独立核对过。**还没有**时间戳(B-T)、LTV(DSS/OCSP/CRL)、智能卡和 PKCS #11。 **保护与脱密。** 打开受保护文档、查看权限、Protect Using Password、移除安全性;密文遮盖支持标记文字/区域/页面,带模式匹配的 Search & Redact,应用时移除字形、图像像素、矢量与 XObject 内容,并做验证;Remove Hidden Information 与 Sanitize 可以清掉隐藏内容。**还没有**证书安全性。 **无障碍检查。** 覆盖全部 32 条规则的检查器:报告、Fix/Skip/Explain、选项对话框与结果面板。**还没有**自动加标签、Tags/Order/Content 面板和 Reading Order 工具。 **测量。** 2D 距离、周长和面积,带持久化的视口标定、吸附、实时信息与 CSV 导出。 **OCR。** 针对拉丁文字的可搜索图像,支持单页、页面范围和多个文件。其他文字系统、可编辑文本输出和倾斜校正**还没有**。 **创建与导出。** 从空白页、文本或 PNG/JPEG/TIFF(含多页)/GIF/BMP 创建;导出 PNG/JPEG/TIFF 与文本,也能导出全部图片。 **打印。** Acrobat 式的缩放方式、n-up、小册子、海报、注释与表单、打印预览,走 Windows 打印后台,另有带裁切标记的单面叠放拼版。 **优化。** Reduce File Size 与 PDF Optimizer:按图像实际绘制尺寸测量、双三次降采样、只在更小时才重新压缩、丢弃无用对象与用户数据、Flate 清理、资源合并、对象流打包。 ## 命令行 同一个引擎在 `pdftools-cli` 里也能用(`render` 支持 `.png`、`.jpg`、`.tif`、`.pam`): ```sh pdftools-cli info report.pdf # 文档概要(JSON) pdftools-cli render report.pdf --page 1 --dpi 96 --out page1.png pdftools-cli text report.pdf # 提取文字 pdftools-cli edit in.pdf --out out.pdf --rotate 1,3:90 --delete 2,4 --move 5:1 pdftools-cli combine report.pdf appendix.pdf --out combined.pdf pdftools-cli extract report.pdf --pages 1,3,5 --out highlights.pdf pdftools-cli split report.pdf --every 10 --out-dir parts/ pdftools-cli check some/dir # 稳健性巡检:每个文件在独立子进程里打开并完整渲染 ``` ## 自动化与代理 用户能做的每一件事都可以无界面调用,界面和 CLI 走的是同一张工具表(当前 133 个工具): ```sh pdftools-cli tools # 列出全部工具及其 JSON Schema pdftools-cli run doc_open file=report.pdf # 单个工具 pdftools-cli run --script steps.json --root DIR # JSON 脚本,整批步骤共用一个会话 pdftools-cli mcp # 可选的 MCP 服务器(stdio,显式启动) pdftools-cli ui --control FILE screenshot --out x.png # 驱动一个以 --control 启动的应用 ``` 默认是安全的:MCP 服务器不会被应用、CLI 或安装器自动启动,只在这条命令被显式执行时运行,只走 stdin/stdout;界面控制通道只在以 `--control ` 启动时开启,绑定回环地址并用每次启动生成的随机令牌鉴权。所有自动化操作都原子写入、遵守 `--root` 限制,出错时返回可读的错误,而不是静默丢弃工作。 ## 构建与运行 需要 Rust 1.90 或更新版本(edition 2024)。仓库只在 Windows 上构建和运行。 ```sh cargo run -p pdftools -- some.pdf # 桌面应用 cargo test --workspace # 测试 cargo xtask ci # 全部门禁 ``` `cargo xtask ci` 按顺序跑七步,遇到第一个失败就停:`fmt` → `clippy -D warnings` → `test --workspace` → `layers`(crate 分层)→ `assets`(资产策略)→ `deny`(依赖许可证与安全公告)→ `parity`(进度声明必须对得上真实存在的命令、工具与测试)。**仓库目前没有托管 CI**,这条命令需要在本地手动跑。 `cargo xtask` 还提供 `parity`(对标进度)、`check`(corpus 稳健性巡检)、`fuzz`(变异模糊测试)、`corpus` / `models`(拉取测试语料与 OCR 模型)、`demo-pdf`、`version` 等子命令,`cargo xtask help` 会列出全部。 **中日韩等非拉丁字形是可选的构建输入。** 界面和写入 PDF 的文字所用字体来自同级的 craft-fonts 检出目录,`.cargo/config.toml` 默认指向 `../craft-fonts`: ```sh CRAFT_FONTS_DIR=../craft-fonts cargo build ``` 没有该检出目录时,PDFTools 依然能构建、测试和运行,但界面没有 CJK 字形(中文会显示为替代方块),把 CJK 文字写进 PDF 会返回明确的错误。字体文件永远不提交到这个仓库。 ## 许可与致谢 以 **MIT OR Apache-2.0** 双许可发布(见 `LICENSE-MIT`、`LICENSE-APACHE`)。 每个第三方素材——图标、字体、示例文档——都记录在 `ATTRIBUTION.toml` 中,`ATTRIBUTION.md` 由它生成,`NOTICE` 保存各许可证要求的声明,`cargo xtask assets` 会逐项校验(缺失条目、SHA-256 不符、许可证不在白名单内都会失败)。界面图标来自 Lucide,UI 字体是 Inter、JetBrains Mono 和 Dancing Script。 本项目是清洁室实现:仓库里不含 Adobe 产品的任何代码或素材,行为只来自公开规范、公开文档和黑盒观察;GPL/AGPL 工具只作为外部参照进程运行,从不复制其代码。规则细节见 `AGENTS.md`。 ## 仓库 代码托管在 AtomGit: 参与之前请先读 `AGENTS.md`(硬性规则:资产政策、清洁室、禁止崩溃)和 `CLAUDE.md`(日常工作流程),再看 `ROADMAP.md` 决定做什么。