PdfCraft 开源 PDF 工具:压缩、合并与命令行用法
【导语】一个纯 Rust 写的开源 PDF 工作台,能离线压缩、合并、加密,也能用命令行批量跑一整个文件夹。
它是什么:建仓 26 天,1.7 万星
PdfCraft 是一个本地运行的 PDF 阅读与编辑程序,代码用 Rust 从头写,仓库在 storytold/pdfcraft。GitHub 上的数据:2026 年 9 月 30 日建仓,10 月 25 日还在提交,17831 个 star、6818 个 fork、2055 个未关闭 issue。
一个月的项目挂着两千多个 open issue,看着吓人。翻一下提交记录能看出原因:10 月 21 日到 25 日连发 0.10.1、0.11.0、0.12.0、0.13.0、0.14.0 五个版本,最新是 v0.14.0。改得快,报得也快,属于早期项目的高频迭代期。
支持 Windows(x64、x86、ARM64)、macOS(APPle 芯片与 Intel 通用包)、Linux(Flatpak、AppImage、deb、rpm、tar,x86_64 与 aarch64 都有)、FreeBSD x86_64,以及浏览器里的 WebAssembly 版。
启动不需要账号,不带遥测,不上传文件,断网能用。处理合同、发票、简历这类东西的人,这一条比功能清单更重要。
压缩的真实参数:Standard 和 Mobile 只有两组数字
官方把压缩模块叫 optimize,实现的是 Acrobat「缩小文件大小」那一套。只有两档预设:Standard 把超过 225 ppi 的图像重采样到 150 ppi、JPEG 质量取中;Mobile 把超过 144 ppi 的降到 96 ppi、JPEG 质量取高。没有那种从 1% 拖到 100% 的质量滑条。
命令行默认更狠一点:JPEG 质量 60,超过 225 ppi 的图降到 150 ppi。--ppi 可以设 9 到 1600,同时把阈值定成目标值的 1.5 倍;--quality 取 1 到 100。
判断依据在有效分辨率。压缩器不看文件多大,而是算每张图在页面上实际画出来的 ppi:沿页面的变换矩阵追到 12 层嵌套的表单对象,取所有使用位置里最小的那个;页面带 /UserUnit 的按物理英寸计算。只有分辨率超标的图才重采样,用双三次(Catmull-Rom)滤波,存成 JPEG 或 ZIP。替换之前还会比字节数,结果更大就保留原图。
官方给了一个真实案例。某些 PDF 打印机把整页图切成上千条一行高的薄片,这种文件能到 4.3MB。PdfCraft 先把首尾相接、左右边缘对齐、同色彩空间的连续薄片合并成一张无损图,再做重采样,同一页在 Standard 下变成 231KB,Mobile 下 161KB。
- 判断压不压的依据是有效 ppi,不是文件总大小
- Standard:225 ppi 以上降到 150 ppi,JPEG 质量中
- Mobile:144 ppi 以上降到 96 ppi,JPEG 质量高
- 命令行默认:质量 60,目标 150 ppi,阈值 225 ppi
- 重采样结果比原图大就保留原图,不做无意义替换
哪些文件压不动:扫描件常掉不动体积
有一批格式它直接跳过:CMYK 和其他非 RGB/灰度色彩空间、image mask、带 decode 数组的图、超过 8 位的图、JPEG 2000、JBIG2、CCITT。
这条限制对扫描件影响最大。扫描仪导出的黑白页通常是 CCITT G4 或 JBIG2 编码,本身已经压到极限,重采样不会更小。把一份 50MB 的扫描合同丢进去,体积常常只掉几个百分点,属于正常结果,不是程序没跑。
文字层还能榨出空间:没有滤镜的流加 Flate;外挂 ASCII85 或 ASCIIHex 的层在变小的时候剥掉;LZW 编码的流转成 Flate。缩略图、备用图、文档标签、打印设置可以选择丢弃,这部分对阅读没有影响。
「目标 PDF 版本」只改文件头和对象流,不检查内容。设成 1.4 之后,文件里仍可能留着 JPEG 2000 图、16 位图、PDF 2.0 特性,拿去给老阅读器或者合规校验会翻车。官方自己把 compatibility-level 标成 partial。
下载:三个平台怎么装,别点错链接
官网是 getartcraft.com/apps/pdfcraft。页面上方那个大按钮装的是 ArtCraft Launcher(v0.5.1 的 msi),它会顺带装 PdfCraft 和其他几个应用。只想装 PdfCraft,往下翻到 Standalone 一栏。论坛里的推荐帖也专门提醒过这一点。
Windows 有 msi 安装包和免安装 zip,x64、x86、ARM64 各一套;macOS 是通用 dmg,另附命令行工具的 zip;Linux 给 Flatpak、AppImage、deb、rpm、tar 五种。免安装版解压就能跑,适合放在 U 盘里。
官网下载区的文件名还写着 0.9.0,GitHub 最新已经到 0.14.0。要新版直接去 github.com/storytold/pdfcraft/releases/latest,同目录的 SHA256SUMS.txt 可以核对校验值。
自己编译需要 Rust 1.95 以上。官网那一页写的是 1.90,两处口径不一致,以 README 为准。命令是 git clone 仓库后 cargo run --release -p pdfcraft。
批量压缩:一条命令跑完一个文件夹
图形界面适合改一两个文件。几十份合同要压,用命令行。工具叫 pdfcraft-cli,安装包里单独发布,macOS 和 Linux 版都有独立压缩包。
把当前目录连同子目录里所有 PDF 压到 compressed 文件夹:
- pdfcraft-cli batch scans --root . --recursive --steps optimize --out-dir compressed
- 指定参数:pdfcraft-cli batch scans --root . --recursive --steps optimize --out-dir out --ppi 150 --quality 80
- 先转换再压:--steps convert,optimize,图片和文本也能一起进
- 先 OCR 再压:--steps ocr,optimize,需先装模型,默认 300 dpi、默认语言 en
- 单个文件改页序:pdfcraft-cli edit in.pdf --rotate 1,2:90 --delete 5 --title Q3 --out out.pdf
- 合并与提取:pdfcraft-cli combine a.pdf b.pdf --out all.pdf;pdfcraft-cli extract all.pdf --pages 1,3,5-8 --out picks.pdf
批量模式的四条保护
同名输出不覆盖,遇到重名会自动加 (2),book.pdf 变 book (2).pdf。源文件不动也不删,输出目录不能等于或包含输入目录,避免自己压自己。
遍历有上限:一次最多选 1000 个路径、访问 10000 个条目、64 层目录。符号链接、Windows 重解析点和特殊文件会被跳过。
每个文件只有全部步骤成功才落盘,临时文件写在目标目录再改名发布。失败的文件记进 JSON 报告,命令同时返回非零退出码,脚本里可以直接判断。报告里的 completed、fAIled、skipped、stopped 四个计数能看出这批文件发生了什么。
界面里能做的四件事
Organize pages 是核心视图,每页一张卡片,能拖动排序、旋转、删除、插入,撤销记录很深。Inspector 里把缩略图在 50% 到 150% 之间调,只影响预览不影响文件。
合并时每个源文件生成一个书签,子书签嵌在下面,链接、表单域、图层、页面标签都保留。拆分可以按固定页数走 --every 10,也可以按页范围挑。
加密支持从 RC4 到 AES-256 的读取,同时遵守作者设置的权限位。保存走增量加原子写:改动追加在原文件后面,原始字节不动,崩溃也不会留下半个坏文件。
另有密文遮盖(redaction)和清理隐藏信息,对外发合同之前用得上。渲染在 983 个文件的 pdf.js 测试集上跑出 0 崩溃,坏文件会尝试修复而不是直接退出。
给 AI 用:MCP 默认是关的
软件自带一个 MCP 服务器,用 pdfcraft-cli mcp 启动,走 stdin/stdout,不监听端口,AI 断开就退出。在 Claude 这类客户端里加一段配置:{"mcpServers":{"pdfcraft":{"command":"pdfcraft-cli","args":["mcp","--root","/path/to/your/pdfs"]}}}
--root 把 AI 能读写的范围锁在一个目录里,--compact 把工具表压到十来个核心工具加一个 tool_search,省 token。要给 AI 处理几百页文档,这两项建议都开。
还有一个 UI 控制通道:加 --control 参数启动后,AI 能看到窗口里的控件树,并点击、拖拽、截图。这个通道只监听本机回环,每次连接要带随机 token,控制文件放在共享目录会被拒绝——程序会检查符号链接和文件属主。
中文用户要知道的两个短板
官方 README 的「薄或缺失」清单写得很直白:编辑已有文字不可靠,尤其 CJK 和从右到左文字;OCR 只覆盖拉丁字母;Office 文档导入导出没有;Preflight、PDF/X、PDF/UA 没有;完整 XFA 表单没有。
论坛那位推荐者的实测和这条对得上:能删掉 PDF 里的中文,加不进新的中文;OCR 也不认中文。想把扫描的中文合同变成可搜索文本,得另找工具。
路线图里「中文界面字体」排在下一批,界面中文化也还没走完。拿它替换 Acrobat 处理中文合同之前,先用自己的文件试一遍,别直接上生产。
商用权限:代码随便用,名字不能用
仓库许可是 MIT 或 Apache-2.0 二选一,README 的徽章写 MIT OR Apache-2.0,仓库里的 LICENSE 文件是 Apache-2.0。企业内部分发、改代码、嵌进自己的流程都能商用,Apache-2.0 还带明确的专利授权条款。
两处例外。一是 ArtCraft 的名字和 logo 放在 docs/brand/ 下,明确不属于开源范围,只能原样随 PdfCraft 使用;fork 或修改版必须删掉,也不能拿这个名字当自己产品名。二是引用的第三方组件各有许可,整包再分发前要逐个过一遍。
功能边界也要说清。数字签名只做到基础,缺在线长效验证(LTV)和签名令牌;密文遮盖、清理隐藏信息可以在本地跑完,但对外出具合规文件仍要走行业指定的系统。
它的优势在上传这一步:没有账号、没有云端,文件不出本机。服务器在境外、或者材料本身涉密时,本地处理能省掉一轮审批。代价是没有协作,多人改同一份 PDF 还是得发文件。
三类人怎么选
最后按使用场景给三句结论,省得自己试。
- 经常压几十份合同的行政、法务:用 batch 命令,先拿一份扫描件试,扫描件压不动是常态
- 要合并、拆分、加密码、改书签的普通办公:图形界面够用,Windows 免安装版解压就能跑
- 要把 PDF 处理接进 AI 流程的开发者:走 MCP,务必加 --root,别把整个磁盘交出去
关注格熊,持续分享最新免费资源!
- 随机文章
- 热门文章
- 热评文章
- 网站文章实现当天收录教程
- AnyTXT Searcher 一款强大免费的文件搜索软件
- SpaceEye App(PC)一款好用的壁纸软件,附百万高清壁纸下载
- HarmonyOS完全升级攻略,速来!
- Windows11升级你需要关注的事项!停在35%的解决方法
- Win7系统英雄联盟为什么进不去游戏怎么办(3分钟解决LOL进不了游戏方法)
- 「微信文件传输助手网页版」由腾讯官方出品,亲测超级方便
- 2022年红包封面第一波,16款微信红包封面免费领取
扫描二维码推送至手机访问。
版权声明:本文由格熊发布,如需转载请注明出处。
免责声明:本站收集的内容,都来自网络,版权争议与本站无关。




