乐于分享
好东西不私藏

8.9w颗星!开源 PDF 编辑器

8.9w颗星!开源 PDF 编辑器

项目地址

Stirling PDF 是一个功能强大的开源 PDF 编辑平台。可作为个人桌面应用运行、在浏览器中使用,或部署在自有服务器上并提供私有 API。无需将文档发送到外部服务,即可编辑、签名、涂黑、转换和自动化处理 PDF。

核心能力

  • 随时随地工作 - 支持桌面客户端、浏览器界面,以及带有私有 API 的自托管服务器。
  • 50+ PDF 工具 - 编辑、合并、拆分、签名、涂黑、转换、OCR、压缩等。
  • 自动化与工作流 - 界面内置无代码流水线,并提供 API,可处理数百万份 PDF。
  • 企业级能力 - 支持 SSO、审计,以及灵活的本地部署。
  • 开发者平台 - 几乎所有工具均提供 REST API,便于集成到现有系统。
  • 多语言界面 - 支持 40 多种语言。

主要 PDF 处理技术对照

能力
主要技术
核心操作(合并/拆分/旋转等)
Apache PDFBox
渲染 / 查看
PDF.js + JPDFium
客户端编辑
pdf-lib + @embedpdf
Office 转换
LibreOffice
压缩 / 优化
qpdf / Ghostscript
OCR
Tesseract / OCRmyPDF
图像增强
Python + OpenCV
PDF/A 验证
veraPDF
签名 / 加密
BouncyCastle + PDFBox

快速开始

docker run -p 8080:8080 docker.stirlingpdf.com/stirlingtools/stirling-pdf

然后打开:http://localhost:8080[1]

以下是对 Stirling-PDF 项目源代码的仔细分析,提取出的关键技术栈与架构(基于当前 main 分支的 DeveloperGuide、构建文件、package.jsonpyproject.toml、模块结构与依赖声明)。

关键技术

现在的 Stirling-PDF 已经不是早期那种“Spring Boot 塞一堆页面”的形态了。它拆成了几块:

  • 前端是完整的 React SPA
  • 后端是 Spring Boot
  • 还有一个独立的 Python FastAPI 引擎负责 AI 相关能力
  • 桌面版则用 Tauri 包了一层

文件处理尽量无状态——上传后在内存或临时目录里干活,做完就删,这点在隐私敏感场景里很实在。

后端:PDFBox 扛大梁,外部工具当帮手

后端主语言是 Java,跑在 JDK 25 上,框架是 Spring Boot,内嵌 Jetty。

真正干重活的是 Apache PDFBox。合并、拆分、旋转、加页码、改元数据、验签这些核心操作,基本都靠它。另外还用了 JPDFium(自己维护的 PDFium 绑定)、veraPDF(做 PDF/A 校验)、Tabula(抽表格)。

重一点的功能则交给外部命令行工具:

  • LibreOffice 负责 Office 文档互转
  • qpdf、Ghostscript 做压缩和优化
  • Tesseract 做 OCR

启动时会探测这些工具在不在,不在就把对应功能组关掉。这种“能用就开,不能用就藏”的做法,比硬依赖整套环境要灵活得多。

安全方面可选 Spring Security,加密和签名用 BouncyCastle。整体是典型的 Java 后端思路,稳,也方便企业部署。

前端:已经彻底重写成现代 SPA

早期用的是 Thymeleaf,现在完全换成了 React 19 + TypeScript,构建工具是 Vite。

UI 主用 Mantine,样式用 Tailwind。PDF 相关的客户端能力主要靠:

  • PDF.js 负责渲染和预览
  • pdf-lib 做轻量编辑
  • 还有一套 @embedpdf 插件,覆盖批注、涂黑、缩略图、搜索等

本地用 IndexedDB 存文件和缩略图,一些耗时操作丢到 Web Worker。新增一个工具的流程也比较规范:写参数 Hook、操作 Hook、注册到工具列表、补翻译,结构清晰。

这种前后端分离之后,交互体验明显上了一个台阶,也方便做桌面端复用。

桌面和 AI 引擎

桌面版用的是 Tauri(Rust + 前端),还带了裁剪过的 JRE,可以本地跑,也能连远程服务器补全高级功能。

另外还有一个 engine 目录,是用 FastAPI 写的 Python 服务,依赖 Pydantic-AI、向量库等,主要给 AI 文档处理用。目前它和 Java 后端通过代理通信,属于比较新的扩展方向。

项目地址

https://github.com/Stirling-Tools/Stirling-PDF

参考资料

[1] 

http://localhost:8080http://localhost:8080/