合并签字页、压缩身份证复印件、把几百页扫描件转成可搜索文本,最省事的做法常常是找个在线 PDF 网站上传处理。问题在于文件已经传到了别人的服务器,处理完是否删除只有对方知道。
Stirling PDF 是一个可以自己部署的开源 PDF 工具集,把五十多个 PDF 功能打包进一个 Docker 镜像,浏览器打开就是完整界面,也提供桌面客户端,还能部署到自己的服务器上作为私有 API 使用。文件全程留在自己的机器上。后端使用 Java,前端在 V2 版本中用 React 重写。
这篇文章适合需要在本地或内网处理敏感 PDF、想把重复 PDF 操作自动化,或者需要一个 PDF 处理后端的开发者。下面依次说明它的工作方式、自动化流水线、API、安装方式和许可证注意事项。

Stirling PDF 和在线 PDF 网站有什么不同
在线 PDF 站点通常一个功能一个页面。先拆页、再加水印、再压缩,就要下载三次、上传三次。
Stirling PDF 更像一个工作台:
- 文件上传后保留在工作区,缩略图依次排开,可以选中指定页面执行操作,做完直接进入下一步,中间不用导出。
- 操作有完整的撤销和重做历史,改错了可以回退。
- 页面渲染使用 PDF.js,客户端修改使用 PDF-LIB.js,缩略图和文件缓存存放在浏览器的 IndexedDB 中,翻页预览不需要每次请求后端。
工具按类目组织,包括格式转换、页面操作、内容编辑、签名/加密/脱敏、OCR、压缩、文档对比、表单填写和手机扫描。界面支持四十多种语言。

用 Automate 流水线批量处理 PDF
这个功能在 V2 中叫 Automate,在 V1 中叫 Pipeline,底层没有变化,V1 的 JSON 配置可以直接沿用。
在界面中搭建流水线
在界面上把多个操作串起来即可,例如:先拆分文件,再给每一份加水印,最后统一压缩。搭好后点击验证,显示通过即表示配置可用,然后可以把这份配置下载为 JSON 文件。
用监听文件夹自动执行
把 JSON 配置放到 pipeline/watchedFolders 下的某个目录,程序每分钟扫描一次,发现新文件就按这份配置处理。
一份最小的 OCR 配置如下:
{
"name": "ocr",
"pipeline": [
{
"operation": "/api/v1/misc/ocr-pdf",
"parameters": { "fileInput": "automated" }
}
],
"outputDir": "{outputFolder}",
"outputFileName": "{filename}"
}
fileInput 必须写成 automated,这是监听文件夹能够运行的前提。
输出路径支持以下占位符:{outputFolder}、{folderName}、{filename}、{pipelineName}、{date}、{time}。例如扫描仪把文件存入共享目录,流水线处理后输出的就是可搜索的 PDF,中间不需要人工值守。
流水线的限制
- 同一个操作在一条流水线中不能出现两次。
- 文件和操作都按顺序串行执行。
- 界面版无法搭建需要多种输入类型的操作,例如往 PDF 中插入一张单独的图片。
- 配置文件中可能保存密码,注意收紧目录和文件权限。

把 Stirling PDF 当作 PDF 处理 API
这是它和普通桌面 PDF 软件拉开差距的地方。界面上的功能基本都对应一个 REST 接口,例如 OCR 对应 /api/v1/misc/ocr-pdf,流水线 JSON 中填写的正是这些接口路径。
因此它可以直接作为 PDF 处理后端使用:业务系统生成的发票需要盖章、用户上传的附件需要统一压缩、归档前需要批量转换格式,都可以通过调用接口完成,不必在自己的项目里引入 PDFBox 从头实现。
项目还提供 MCP server,AI 助手可以直接调用这些 PDF 工具。
安装方式:Docker、桌面端与 JAR
Docker 快速启动
最快的方式是一条命令:
docker run -p 8080:8080 docker.stirlingpdf.com/stirlingtools/stirling-pdf
启动后访问 http://localhost:8080 即可看到完整界面。
镜像分为三个版本:
| 镜像标签 | 特点 | 适用场景 |
|---|---|---|
latest | 默认版本 | 一般使用 |
latest-fat | 额外包含字体和转换工具,格式覆盖最全 | 需要处理多种文档格式 |
latest-ultra-lite | 体积最小 | 配置紧张的机器 |
桌面客户端
不想运行容器可以使用桌面端,提供 Windows 安装包、Mac 通用 DMG 和 Linux DEB。桌面端使用 Tauri 打包,Rust 负责系统集成,内置用 JLink 裁剪过的 JRE,双击即可打开,不需要登录,还可以注册到系统的"打开方式"菜单。
直接运行 JAR
也可以自行运行 JAR,需要安装 JDK 25。部分依赖是可选的,安装后才会启用对应功能:
- LibreOffice:文档转 PDF
- Tesseract:OCR
- qpdf:PDF 优化
程序启动时会自动检测这些依赖,未安装的功能会被关闭,而不是等到点击时才报错。
企业功能
项目也提供企业部署所需的能力:OAuth2 和 SAML 单点登录、用户与权限管理、审计日志,以及 SSRF 防护和 Fail2Ban。

部署前先确认许可证范围
Stirling PDF 采用 open-core 模式。根目录 LICENSE 是 MIT,但以下目录单独划出,各自适用自己的许可:
app/proprietary、app/saas、engine- 前端 editor 下的
proprietary、desktop、saas、cloud
个人使用和公司内部部署没有问题。如果打算基于它做对外服务或打包进商业产品,先逐一确认这些目录的许可条款。
总结
试用 Stirling PDF 的门槛很低,一条 docker run 就能跑起来。真正节省时间的是 Automate 加监听文件夹:把每周都要重复的 PDF 操作固化成一份 JSON,之后放入文件就会自动处理,不再需要打开在线 PDF 网站。