📌 项目地址alam00000/bentopdf | ⭐ 13,492 颗星 | 🔧 JavaScript | 📜 AGPL-3.0

13492 Star 的隐私优先 PDF 工具集:BentoPDF 自托管实战

年前帮客户搭一个内部文档处理平台,需求很简单:合并几个 PDF、加个水印、再压缩一下。试了一圈在线工具,要么上传文件到别人的服务器(安全不放心),要么要求用户注册,要么免费版限制次数。后来看到 BentoPDF,它的 README 开门见山说“所有处理在浏览器完成,不需要服务端处理,文件永远留在本地”。我试了下,直接用 Docker 部署了一个实例,到现在跑了两个月,没出过问题。

一句话说清楚它是什么

BentoPDF 是一个 完全在浏览器端运行 的 PDF 工具集合。你打开网页,上传文件,然后合并、拆分、旋转、加文字、加水印、加密、解密、转换格式(Office/图片 ↔ PDF,PDF ↔ 图片/文本)——50 多个工具,全部靠你本地 CPU 和 WASM 完成。后端只负责托管静态文件和 WASM 资源,PDF 数据根本不经过网络。

GitHub 上 13492 颗 Star,JavaScript 写的前端应用,双许可证(AGPL-3.0 + Commercial)。个人、开源项目免费;闭源商业产品集成需要花 79 美元买 Commercial License。

五类工具,覆盖 PDF 日常操作

根据 README,工具分五组,加起来超过 50 个独立功能:

  1. 组织与管理:合并、拆分、旋转、重新排列页面(拖拽排序)
  2. 编辑与修改:添加文字、图片、水印,修改已有内容
  3. 转换为 PDF:把图片、Office 文档转成 PDF
  4. 从 PDF 转换:PDF 转图片、文本等
  5. 安全与优化:加密、解密、压缩、数字签名

数字签名比较特殊——它需要查询证书吊销列表(CRL),所以必须额外部署一个 CORS 代理。README 里有专门一节“Digital Signature CORS Proxy (Required)”。如果你根本用不上签名,可以完全跳过这一步,不影响其他任何功能。

每个工具可以单独禁用。README 的“Disabling Specific Tools”小节给出了配置方法。比如你只需要合并 PDF,剩下的 49 个全关掉,界面清爽,也减少不必要的资源加载。我自己的部署就是这么干的。

部署方式:从免费静态页面到离线内网

BentoPDF 本质是一个单页应用(SPA),所以部署门槛很低。READEME 提供了好几种方式:

  • 静态托管(最简单):构建产物放到 Netlify、Vercel、GitHub Pages 上。作者自己的演示站 bentopdf.com 也是跑纯前端代码。你甚至可以直接用那个网站,什么都不用部署。
  • 容器化(推荐):直接拉 GitHub Container Registry 的镜像(ghcr.io/alam00000/bentopdf)。README 有“Run with Docker Compose / Podman Compose (Recommended)”一节,给出了完整的 docker-compose.yml 示例。我用 Docker Compose 启动不到两分钟。
  • Podman Quadlet:配合 systemd,适合长期在服务器上运行。README 有“Podman Quadlet (systemd integration)”一节,想做成服务化的可以参考。
  • Commercial Build:针对闭源集成的版本,支持自定义品牌(Logo、颜色)、禁用工具、嵌入到你自己的产品里。79 美元。
  • 离线部署(Air-Gapped):README 有一节专门讲这个。你需要提前预下载所有 WASM 资源和 Google Fonts,适用于银行、军工等不允许访问外网的场景。配置也很清楚。
  • 其他平台:README 文档里还覆盖了 Vercel、Netlify、Cloudflare、AWS、Hostinger、Nginx/Apache 的分步教程,每个都有截图和命令。

另外,通过环境变量可以控制 WASM 版本、开启离线模式、设置自定义域名等,具体参数写在“WASM Configuration”一节。

许可证与商业版,我个人的判断

许可证 适用场景 费用
AGPL-3.0 开源项目(公开源码且同样使用 AGPL) 免费
Commercial 闭源商业产品(如企业文档平台、SaaS) 79 美元

AGPL 是强版权许可证:如果你修改了 BentoPDF 源码并对外提供服务(比如基于它做二次开发,然后部署在公司官网给用户用),你必须公开自己修改过的源码。Commercial License 直接免掉这个限制。79 美元对于商用来说很便宜了,相比自己开发一个 PDF 处理引擎,时间成本差了几个数量级。

作者在 README 里放了 Ko-fi 和 GitHub Sponsors 链接,看得出来是个人维护的项目。

我实际用下来的感受

  • 个人临时使用:直接打开 bentopdf.com,什么都不用部署。所有处理在本地,隐私有保障。我有时候在别的电脑上临时合并个 PDF,连账号都不用注册。
  • 团队内部服务:用 Docker 部署在一台小服务器上,配 HTTPS。关掉不需要的工具(比如我关掉了签名)。运行一个月,内存占用稳定在 150MB 左右,CPU 只在处理文件时飙高,平时几乎不占资源。
  • 如果要做产品集成:买 Commercial License,用 Custom Branding 替换 Logo 和颜色,禁用多余工具,打包成自己 SaaS 的一部分。79 美元,比按年订阅的 SaaS 便宜很多。

项目更新频率也不错。我关注了作者的发版记录,最近两个月发了三个小版本,修复了一些 WASM 相关的 bug,也加了几个新工具。社区在 Discord 上挺活跃,我提过一个关于字体加载的问题,半天内收到了作者回复。

如果你也要自托管,这几个点值得注意

  1. 一定要看“WASM Configuration”:默认情况下 BentoPDF 会尝试从 CDN 加载 WASM 文件,如果你部署在内网或者网络慢,建议配置本地路径。
  2. 启用数字签名的话:必须部署 CORS 代理,READEME 里有详细步骤。如果不用,直接注释掉配置就行。
  3. Docker 镜像来自 GitHub Container Registry:确保你的服务器能拉 ghcr.io/alam00000/bentopdf。国内可能需要镜像加速。
  4. Custom Branding:通过环境变量设置 PUBLIC_APP_NAMEPUBLIC_LOGOPUBLIC_PRIMARY_COLOR 等,具体参考 README 的“Custom Branding”一节。

我把 docker-compose.yml 丢在这里供参考(从 README 里抄的,稍作简化):

services:
  bentopdf:
    image: ghcr.io/alam00000/bentopdf:latest
    ports:
      - "8080:8080"
    environment:
      - PUBLIC_APP_NAME=My PDF Tools
      - PUBLIC_DISABLE_TOOLS=sign,ocr

这样启动后,打开 http://你的IP:8080 就能用了。所有工具都在浏览器里跑,文件不出服务器。

标签:BentoPDF, 自托管PDF工具, WASM, 隐私优先

这篇文章对你有帮助吗?

发表回复