ARTICLE · 1049022
Stirling PDF 深度拆解:50+ 工具的开源 PDF 平台,一条 Docker 命令跑起来

合并个 PDF 要开会员,去个水印要开会员,转个格式还要开会员。更让人不放心的是——你传上去的那份合同、那份财务报表、那份证件扫描件,到底躺在谁的服务器上?
Stirling PDF 把 50 多个 PDF 工具全部塞进一个你自己部署的服务里,一条 Docker 命令就能跑起来,处理过程全部发生在你自己的机器上,数据不出内网。它在 GitHub 上长期位居 PDF 类开源项目前列,社区活跃,Discord、Issues、贡献指南一应俱全。
今天这篇文章,我们从“它解决什么问题”讲到“架构怎么设计的”,再给出可跑通的安装命令和 API 调用示例,最后帮你判断:这东西到底适不适合你。
一、它到底解决什么痛点?

❓ Q:在线 PDF 工具已经很方便了,为什么还需要一个自托管的?
先说结论:在线工具的核心风险不在功能,而在文档本身。
想一想你平时用在线 PDF 工具处理的是什么:劳动合同、薪酬证明、身份证扫描件、投标文件、病历。这些文档上传到第三方服务器的瞬间,隐私链条就断了。大多数在线工具的隐私政策写得再漂亮,你也没法验证服务器端到底发生了什么。
Stirling PDF 的解法很直接:把整套工具部署在你自己的电脑、家用服务器或公司内网服务器上,浏览器只是一个操作界面,实际的 PDF 解析、转换、压缩全部发生在本地。文档一个字节都不会流出去。
用程序员熟悉的话打个比方:在线 PDF 工具像把代码贴到别人的在线编译器里跑——方便,但你不敢贴生产代码;Stirling PDF 相当于在自己机器上装了一套完整的 IDE,功能一样全,但编译过程你全程可控。
除了隐私,它还解决了第二个问题:付费墙和调用限制。拆分、合并、压缩、OCR、签名、遮盖(redact,即把敏感内容涂黑并移除底层文字数据)……这些操作在商业工具里往往按次收费或锁会员,而自托管之后,处理一万个文件和处�理一个文件的成本是一样的。
💡 一个判断标准
如果你的 PDF 里包含“你不愿意主动发给陌生人的内容”——合同、财务、证件、医疗记录——那就值得花五分钟把它跑在自己机器上。
二、核心设计:一个 Java 后端如何统一 50+ 工具?

❓ Q:50 多个工具听起来工程量巨大,它是怎么组织的?会不会是个大杂烩?
先说结论:它的架构本质是“每个操作封装为独立工具模块,底层复用成熟 Java 生态库”,而不是自己从零造了 50 个轮子。
拆开看几个关键决策:
第一,站在巨人肩膀上。 PDF 解析靠 PDFBox(Apache 的老牌 Java PDF 库),格式转换依赖 LibreOffice 的渲染引擎,OCR 用 Tesseract(开源光学字符识别引擎,把图片里的文字“读”出来)。Stirling 做的事情是把这些能力统一封装、暴露成一致的操作界面和 API。这就像 Spring Boot 没有重新发明 Tomcat 和 Jackson,而是把它们组装成一个好用的整体。
第二,三种形态同一内核。 Stirling PDF 可以作为桌面客户端运行,可以在浏览器里用 Web UI,也可以作为自托管服务端提供私有 API——三种形态共享同一套处理逻辑。这对用户意味着:你在桌面上用顺手的功能,部署到服务器后行为完全一致;对开发者意味着:不用针对不同端重复实现或测试。
第三,也是我认为最关键的设计:几乎所有工具都暴露 REST API。 换句话说,UI 里能点到的功能,程序都能调。这是它和纯 GUI 工具(比如各种桌面 PDF 软件)的本质区别——它不只是给人用的,天生就是给系统用的。后面第四节会演示实际调用。
第四,无代码工作流(pipelines)。 在 UI 里把多个工具串联成流水线,比如“OCR 识别 → 压缩 → 加水印”三步一键执行。官方定位的批处理能力可以支撑到百万级 PDF 量,适合有大量重复处理需求的团队。
第五,open-core 模式。 这个词第一次出现需要解释一下:open-core 指核心功能开源,企业级功能商业化。Stirling 的核心 50+ 工具完全开源免费,而 SSO(单点登录)、审计日志等企业特性属于商业版本。这个边界在选型时要想清楚,第五节会详细讨论。
三、怎么安装?最短路径是什么?

❓ Q:我不想看长文档,最快多久能用上?
一条命令。真的就一条:
docker run -p 8080:8080 docker.stirlingpdf.com/stirlingtools/stirling-pdf
跑起来之后打开浏览器访问:
http://localhost:8080
你会看到一个完整的 Web 界面,左侧按类别列出全部工具:页面操作(合并、拆分、旋转)、转换(Office 转 PDF、PDF 转图片)、安全(签名、加密、遮盖)、其他(OCR、压缩、水印)……中文界面开箱即用,它是 40+ 语言界面之一。
⚠️ 别只跑 demo 命令就上生产
- OCR 功能依赖 Tesseract 及对应语言包,demo 镜像可能未包含你需要的语言数据,生产部署前先确认镜像变体(官方提供了不同大小的镜像版本)。
- 大文件处理对 Java 堆内存有要求,默认配置容易 OOM,需通过环境变量显式调大(见第六节)。
- 桌面端安装、Docker Compose、Kubernetes 部署的完整指引见官方文档:docs.stirlingpdf.com。
如果你想把它变成团队共享的工具站,只需要在前面加一层反向代理(Nginx、Caddy 都行),或者用内网穿透把家里的服务器暴露给家里人用。之后全公司的同事打开一个网址,就拥有了一个不限次数、不上传云端、不用凑会员的 PDF 工具站。
这里给个直观的对比:给一个十人团队每人买一年的 PDF 会员,和花半小时部署一个 Stirling 实例——后者除了省钱,还顺便解决了“合同不能上传第三方服务”的合规问题。
四、开发者怎么用?REST API 实战
❓ Q:我需要在业务系统里处理 PDF,Stirling 能怎么帮我?
先说结论:把 Stirling PDF 当作一个内部文档处理微服务,你的应用通过 HTTP 调用它,就不需要在应用里引入一堆 PDF 处理依赖(Java 里引 PDFBox、Python 里引 PyPDF2 之类的活儿可以省了)。
最典型的例子——合并两个 PDF,一条 curl 搞定:
curl -X POST http://localhost:8080/api/v1/general/merge-pdfs \
-F 'file1=@a.pdf' \
-F 'file2=@b.pdf' \
-o merged.pdf
参数说明:-F 以 multipart 表单形式上传文件,-o 把服务端返回的合并结果直接写入本地文件。几乎所有工具都有对应的 REST 端点,具体的端点列表和参数格式见官方 API Docs 页面。
实际集成场景举例:
业务系统集成
报销系统收到上传的发票 PDF,调 API 自动压缩归档、加水印
批量自动化
用 pipelines API 按编排好的流程批量处理海量历史文档
CI/CD 流水线
构建过程中自动合并生成的多份报告为单一交付物
批量场景多说一句:pipelines 让你把“OCR → 压缩 → 添加页眉”这类多步操作编排成一次调用,官方明确其设计目标包括处理百万级的 PDF 量。如果你的团队有扫描件数字化、历史文档清洗这类需求,这条路比自己写脚本串工具稳定得多。
想参与开发或二开的话,项目使用 Task 作为统一构建命令:
task dev # 启动开发环境
task # 查看最常用的命令列表
翻译和多语言贡献有专门的 Translation Guide,贡献流程见 CONTRIBUTING.md。
五、和 iLovePDF、SmallPDF、Adobe Acrobat 比,差距在哪?

❓ Q:现成工具那么多,凭什么选它?
先给一张速览表,再逐个说差异:
对比在线工具: Stirling 的优势是数据私有、无调用限制、可团队共享;劣势也很诚实——部分复杂格式转换的质量取决于本地 LibreOffice 的渲染效果,可能不如商业在线工具打磨得细,而且你需要自己维护这个服务(升级、备份、内存调优)。
对比 Adobe Acrobat: 要坦率地说,Acrobat 的深度版式编辑和批注协作体验仍是行业标杆。Stirling 的能力偏向“操作型”任务——拆合、转换、签名、遮盖、OCR——而不是在 PDF 里像编辑 Word 那样改内容。重度 Acrobat 用户迁移过来会有落差。
对比 PDFsam 等本地工具: Stirling 在工具数量、API 能力、Web UI 团队共享三个维度上都明显更全。PDFsam 适合个人偶尔拆合并,Stirling 适合当成基础设施。
对中文用户的一个提醒:界面本身有中文,开箱即用;但 OCR 的中文识别效果取决于你安装的 Tesseract 中文语言包质量,用之前务必拿自己的实际文档测一测。
六、什么场景该用,什么场景不该用?
❓ Q:说到底,我该不该部署一个?
敢下判断版:
该用:
对文档隐私敏感的团队——法务、财务、政务、医疗场景,这条几乎是硬需求,自托管直接消解合规风险; 需要批量或自动化处理 PDF 的团队——扫描件数字化、批量加水印压缩,pipelines 就是为你准备的; 想在产品里集成 PDF 能力又不想造轮子的开发者——HTTP 调用比自己啃 PDFBox 舒服太多; 个人日常拆合、压缩、去页、加水印——一条 Docker 命令的成本,远低于攒一堆会员。
不该用:
需要深度版式编辑、复杂批注协作的重度用户——这些仍是 Acrobat 的领地,别为难自己; 没有运维能力却需要高可用服务的团队——服务挂了没人修,不如直接买商业方案; 期望开箱即得 SSO、审计日志的团队——这些属于商业版本,先评估 open-core 边界再动手,别部署到一半才发现关键功能要付费。
⚠️ 上线前必须验证的一件事
格式转换类功能底层依赖 LibreOffice,复杂排版的 Office 文档(多栏、艺术字、特殊字体)转 PDF 可能出现样式偏差。拿你团队最常见的文档模板实测一轮,再决定是否全面切换。
七、常见报错怎么排查?
❓ Q:部署之后遇到问题,从哪里下手?
四个高频问题,按出现概率排:
1. OCR 不生效。 最常见原因是 Tesseract 语言包没装,或者配置里的语言代码写错。比如中文的语言代码、对应的数据文件是否存在于容器内,都需要逐一确认。排障口诀:先查语言数据文件,再查配置项。
2. 转换后样式错乱。 本质是 LibreOffice 渲染差异,不是 Stirling 的 bug。可以尝试升级 LibreOffice 版本,或对特定问题文档换一条转换路径验证(比如先转成中间格式再转 PDF)。
3. 内存占用高 / 处理大文件报错。 Java 堆内存默认配置对大文件不够用。Docker 环境下通过环境变量显式调大堆内存;如果有并发批量处理需求,上线前务必单独压测——单文件能跑通不代表二十个并发请求不 OOM。
4. 升级后行为变化。 open-core 模式意味着部分功能在版本演进中可能与商业版分化。自托管用户升级前先看 CHANGELOG 和社区讨论,别在生产环境直接拉 latest。
排障的总入口是 GitHub Issues 和 Discord 社区,常见问题在官方文档里大多有专门章节,遇到报错先搜文档再搜 Issues,能省不少时间。
💡 运维建议
长期自托管建议用固定版本号的镜像而非 latest,升级走“测试环境验证 → 生产环境更新”的流程,和对待任何内部中间件一样。
写在最后
Stirling PDF 讲的故事很简单:PDF 处理这件事实在不该按次收费,更不该以“把敏感文档上传到陌生服务器”为代价。
一条 Docker 命令的成本,换来的是不限次数的 50+ 工具、几乎全覆盖的 REST API、可以团队共享的 Web 界面,以及最重要的——文档永远待在你自己的地盘。它不是 Acrobat 的替代品,但对绝大多数人和绝大多数团队的处理需求来说,它已经绰绰有余。
先拿几份日常文档试试,你会知道它值不值。
— END —