PdfCraft是一款对标Acrobat Pro DC的 PDF 阅读器和编辑器工具,用纯 Rust clean-room 重写 Adobe Acrobat,从解析、渲染到编辑全部自己写。作为一个软件工具,它把 PDF 的阅读、查找、页面整理、合并拆分、密码保护、表单、图层、批注和附件做进了一个原生应用。作为一个开源软件,它走 MIT OR Apache-2.0 双许可,macOS、Windows、Linux、FreeBSD 和浏览器里的 WebAssembly 都能跑,不登录、不遥测、不上云。

核心优势
纯本地:无账号、无遥测,文档不出本机
一站式:阅读、整理、合并、拆分、加密一个应用
纯原生:Rust 编写,启动快、占用低
许可宽松:MIT 与 Apache-2.0 双许可
主要功能特点
阅读排版不翻车
字距连字、从右到左和复杂文字、竖排日文、彩色 emoji、渐变、软蒙版和透明度,全部按作者本意渲染。深放大走瓦片渲染,文字不糊。983 个 pdf.js 测试语料里 0 崩溃,坏文件能自己修。连续、单页、对开、旋转、全屏和无干扰阅读模式,浅色深色两套主题。
查找选中,阅读顺序对
边打字边搜全文,⌘G 跳下一个;选文字出来的顺序对——分栏、从右到左、CJK 都对。书签、页面缩略图和文档自己的页码标签(i、ii、1、2……)帮你导航长文档。
页面整理像桌上摆卡片
打开 Organize pages,所有页面摊成缩略图。点、⌘点、⇧点选页面,旋转、删除、插空白页、从别的文件插页、前后拖动。每一步都能撤销,保存后还能撤销。保存是增量的(原字节逐字保留)、原子的(先写临时文件再换入)、用 qpdf 独立校验过。
合并拆分不丢东西
合并任意多个 PDF,每个文件带自己的书签嵌套;抽页、按每 n 页拆分、在指定页前拆。合并过程中链接和命名目标重新接到新页面、表单字段还能交互、图层默认开关保留、附件跟着走。合并后每页跟源文件像素级一致。
密码保护完整实现
PDF 标准安全处理器全实现:从 40 位 RC4 到 AES-256,用户密码和所有者密码(Unicode 密码走 SASLprep 归一化)、加密过滤器、仅附件加密。作者加了限制的文档会明确提示,PdfCraft 尊重这些权限;输入所有者密码才解除限制。加密文档编辑后仍按原密钥加密保存。这种把桌面软件做成本地原生应用的路子,文件不上云这一点就赢过一半在线工具。
Agent 可驱动,MCP opt-in
每个引擎功能都能脱离 GUI 通过一组 JSON-Schema 工具调用:打开、检查、渲染 PNG、提取查找文字、旋转删除移动插入页面、改书签页码、加回复重排版删除批注、列出填写表单字段、密码保护、设元数据、撤销重做、保存合并抽页拆分。pdfcraft-cli run 跑脚本,pdfcraft-cli mcp 起 MCP 服务器(opt-in,stdin/stdout,–root 把文件锁在一个目录里)。作为一个 Skill工具,它在跨平台应用这条线上把 PDF 处理这件事从云绑定拉回了本地。
适用人群
日常处理 PDF 的办公用户
不想把 PDF 上传在线服务的用户
需要合并拆分文档的用户
关注 Rust 原生应用的极客
个人使用感受
我用下来最直接的感受是「它不是在仿 Acrobat,它是把 PDF 这套规范从解析器又做了一遍」。自己写 PDF 标准安全处理器(从 RC4 到 AES-256)、983 个 pdf.js 测试语料 0 崩溃、保存用 qpdf 独立校验——这种工程严谨度在 开源 PDF 工具里没见过。以前合并两个 PDF 要开在线网站传文件,现在本地拖一下就完,文件不出本机。购买剪辑软件
也得说清它的边界:现在标着年轻项目,仓库 2026 年 9 月底才建;它主打阅读、整理、合并拆分、保护、表单批注图层附件,不是 PDF 编辑器——不能从零排版做一份新 PDF;MCP 服务器是 opt-in 的,不会自己启动也不开网络端口。但如果你受够了 Acrobat 月费、又不想把敏感合同上传到在线 PDF 网站,这个把 PDF工具做开源的纯 Rust 工作台,值得放进你的工具推荐清单。它没替你签合同,只是让你处理 PDF 这件事,终于不用把文件传到别人服务器上。
更新日志
v0.15.0版本
由 @Silvertree2010 在 #4630 中提交:在解析 XFA 图像哈希值时过滤非十六进制字符
由 @Silvertree2010 在 #4592 中提交:修复 AFNumber 格式在输出大有限值时显示“inf”的问题
由 @Silvertree2010 在 #4586 中提交:在 FormCalc URL 解码转义序列中将“+”视为非十六进制字符
修复 FormCalc 舍入运算中大数值溢出为无穷大的问题,由 @Silvertree2010 提交于 #4508
M7:在页眉和页脚中采用点分隔、日期靠前的日期格式,由 @Hagma2023 提交于 #4503
fix(xfdf):导入的 FDF 注释的弹出窗口会显示在页面上,而非作为直接字典复制进去,由 @marcoarnulfo 在 #4493 中提出
fix(platform):在 Windows 上,保存的文件会保留其隐藏和系统属性,由 @FriedCerebrum 在 #4647 中提出
修复(编辑):调整共享剪贴板下图片的大小时,其所属剪贴板也会随之缩放,由 @meethere 在 #4639 中提出
M3:辅助功能窗口的名称与窗口标题一致(#4614),由 @Lcoding15 在 #4640 中提出
M6:圆形 XFA 复选框的字段高亮区域呈圆形,与单选按钮一致,由 @EricKaden 在 #4512 中提出
修复(xfdf):导入的 XFDF 文件中,空字段会清空该字段,与 FDF 和 XML 行为一致,由 @marcoarnulfo 在 #4483 中提出
M7.5:裁剪已添加的图片时,可从任一侧裁剪超过一半,由 @Hagma2023 在 #4521 中提出
M9:根据SOM路径为已排版XFA表单的签名字段命名,以便其他查看器能找到该签名(由@EricKaden在#4507中提出)
M3:在指针移出前恢复“保留”按钮的释放状态(Wayland)(由@bmh129在#4500中提出)
测试:当系统繁忙时,XFA 计算测试不再失败,由 @dotCooCoo 在 #4535 中提出
i18n(fa):添加波斯语界面翻译,由 @shahriar-hd 在 #4558 中提出
M6:包含数千个字段数据的静态 XFA 表单可在数秒内打开(#4637),由 @mtlcl410 在 #4638 中提出
M4:文档属性可读取命名打开目标的页面,因此选择第 1 页将替换该页面(ISO 32000-2 12.3.2.4),由 @mtlcl410 在 #4574 中提交
M7:移动文本框时的拖动预览仅显示该文本框(#4464),由 @mtlcl410 在 #4475 中提交
M2:DeviceCMYK 组中的亮度柔光蒙版按 ISO 32000-2 10.4.2 规定进行转换,因此 100% K 可完全遮罩,由 @mtlcl410 在 #4423 中提出
M3:双击附件的行可将其打开,并带有右键菜单(#3466),由 @Lcoding15 在 #4513 中提出
M10:Word 导出时,句内连续的斜体文本将保留在同一段落中(#4158),由 @mtlcl410 在 #4411 中实现
M6:使用 NeedAppearances 时,复选框和单选按钮将绘制其 /MK 标注(ISO 32000-2 表 224),由 @mtlcl410 在 #4454 中实现
M3:在“页面”面板中添加“页面工具”菜单(#4415),由 @Lcoding15 发布于 #4583
重构(UI):craft-ui 任务窗格和共享侧边栏中的侧边面板,由 @aiongg 发布于 #4606
将 PdfCraft 迁移至 egui 0.37,由 @skylartaylor 在 #4591 中提交
功能:启动更新提示模态框及直接自我更新,由 @dylanmtaylor 在 #4654 中提交
提案(编辑):防止剪切区域后方保留机密矢量路径(F-008),由 @dylanmtaylor 在 #4577 中提交
构建:将 craft-update 固定到 craft-libs 主分支 (495e597),作者:@dylanmtaylor,问题 #4721
构建:将 craft-update 固定到 craft-libs 主分支 (495e597),作者:@dylanmtaylor,问题 #4728
维护(依赖):提升 11 个安全依赖项的版本,作者:@skylartaylor,问题 #4737
测试(ui):若缺少 craft-fonts,CJK 界面测试将被跳过,由 @aiongg 在 #4706 中提交
功能(ui):采用 craft-menu 提供的菜单,macOS 上原生实现,由 @aiongg 在 #4752 中提交
重构(引擎):将 lib.rs 拆分为多个模块,由 @alehel 在 #4730 中提交
提案(redact):在内容遮蔽时解除未使用的 Type 3 字形程序和字体的关联(F-011),由 @dylanmtaylor 在 #4579 中提出
修复(sonar):清除表单操作中的 css:S9441 和 S3776,由 @dylanmtaylor 在 #4747 中提出
CI:要求使用 nextest 0.9.150,由 @skylartaylor 在 #4880 中提交
重构:共享模块布局(craft-contrib#20),由 @aiongg 在 #4889 中提交
性能优化(引擎):在工作线程上导出页面图像(实际运行时间减少约 80%),由 @Silvertree2010 在 #5026 中提交
打包:从 ONNX URL 获取 OCR 模型(旧版 RTEN URL 返回 403 错误)由 @Jeremy8776 在 #5039 中提交
重构(UI):所有下拉菜单均使用 craft-ui 的 ComboBox 由 @aiongg 在 #4988 中提交
Windows 安装策略:PdfCraft,由 @Jeremy8776 在 #4892 中提交
通过 Clippy 强制执行 Rust 编码规范,由 @dylanmtaylor 在 #4897 中提交
依赖项:将 craft-libs 固定在 e11f9d9a 版本(在 Cargo 1.99 之前,craft-menu 会加载),由 @aiongg 在 #5094 中提交