还在用各种在线PDF转换器担心隐私泄露?Stirling PDF是一个开源的自托管PDF工具,支持合并、拆分、压缩、转换、加密、OCR等几十种PDF操作,部署在自己的VPS上,数据完全不外泄。

前言

日常办公离不开PDF操作——合并合同、压缩扫描件、提取页面、转Word……网上免费工具不少,但你上传的文件会被第三方服务器处理,隐私风险不小。Stirling PDF 是 GitHub 上 5 万+ Star 的开源项目,功能媲美 SmallPDF,部署在自己VPS上用起来既方便又安全。

本文用 Docker 一键部署,5分钟搞定。如果你还没装Docker,先看Docker安装教程

一、功能一览

Stirling PDF 支持的PDF操作非常全面:

分类功能
页面操作合并、拆分、旋转、裁剪、重新排序、提取页面
转换PDF转图片、图片转PDF、PDF转Word/Excel/PPT、HTML转PDF
安全加密/解密、添加水印、签名、去除密码
优化压缩、OCR文字识别、修复损坏PDF
其他添加页码、对比PDF、自动重命名、多页合一打印

二、Docker 部署

1. 创建目录

mkdir -p /opt/stirling-pdf
cd /opt/stirling-pdf

2. 创建 docker-compose.yml

cat > docker-compose.yml << 'EOF'
version: '3.3'
services:
  stirling-pdf:
    image: frooodle/s-pdf:latest
    container_name: stirling-pdf
    restart: unless-stopped
    ports:
      - "8080:8080"
    volumes:
      - ./data:/usr/share/tessdata   # OCR语言包
      - ./config:/configs            # 配置文件
    environment:
      - DOCKER_ENABLE_SECURITY=false
      - SECURITY_ENABLE_LOGIN=false
      - PUID=1000
      - PGID=1000
      - TZ=Asia/Shanghai
      - INSTALL_BOOK_AND_ADVANCED_HTML_OPS=true
      - LANGS=zh_CN,en_US
EOF

3. 启动服务

docker compose up -d

首次启动会拉取镜像(约500MB),稍等一两分钟即可。

4. 访问

浏览器打开 http://你的VPS-IP:8080,就能看到Stirling PDF的界面了。

三、配置中文OCR

默认不带中文OCR语言包,需要手动安装。

# 下载中文简体语言包
wget -O ./data/chi_sim.traineddata \
  https://github.com/tesseract-ocr/tessdata/raw/main/chi_sim.traineddata

# 下载中文繁体语言包(可选)
wget -O ./data/chi_tra.traineddata \
  https://github.com/tesseract-ocr/tessdata/raw/main/chi_tra.traineddata

# 重启服务生效
docker compose restart

四、启用登录认证

如果VPS有公网IP,建议开启登录认证,防止被他人滥用。

1. 修改环境变量

编辑 docker-compose.yml,修改以下两行:

environment:
  - DOCKER_ENABLE_SECURITY=true
  - SECURITY_ENABLE_LOGIN=true
  - SECURITY_INITIAL_LOGIN_USERNAME=admin
  - SECURITY_INITIAL_PASSWORD=你的密码

2. 重启生效

docker compose down && docker compose up -d

五、Nginx 反向代理

如果想用域名访问(比如 pdf.yourdomain.com),需要配置反向代理。推荐使用Nginx Proxy Manager图形化操作,也可以直接写Nginx配置:

server {
    listen 80;
    server_name pdf.yourdomain.com;

    client_max_body_size 500M;

    location / {
        proxy_pass http://127.0.0.1:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

记得把 pdf.yourdomain.com 的DNS解析指向你的VPS IP。如果VPS的80/443端口被封,可以用Cloudflare Tunnel绕过。

六、使用技巧

批量处理

Stirling PDF 支持一次上传多个文件批量操作,比如批量压缩、批量转图片,效率很高。

自动重命名

上传一堆扫描件,用"自动重命名"功能可以根据PDF内容自动命名文件,整理资料很方便。

API 调用

Stirling PDF 还提供 REST API,可以集成到自动化流程中:

# 压缩PDF
curl -X POST http://localhost:8080/api/v1/misc/compress-pdf \
  -F "[email protected]" \
  -o output.pdf

完整的API文档访问 http://你的IP:8080/swagger-ui/index.html

七、常见问题

上传文件大小受限

默认最大上传100MB。在 docker-compose.yml 中增加环境变量:

- MAX_FILE_SIZE=500

然后重启容器。Nginx反代也要同步修改 client_max_body_size

OCR识别不准确

一是确认已安装对应语言包,二是上传的图片分辨率要够高(建议300dpi以上),三是扫描件尽量保持页面正向。

容器占用内存太大

Stirling PDF 基于 Java,内存占用相对较高(通常500MB-1GB)。如果VPS内存有限(512MB以下),可以限制内存:

deploy:
  resources:
    limits:
      memory: 512M

总结

Stirling PDF 是目前功能最全面的自托管PDF工具,Docker一键部署,中文界面友好,OCR、压缩、转换样样齐全。搭配其他自建应用如AList文件管理、Nextcloud网盘,可以打造一套完整的私有办公平台。

一台便宜VPS就能同时跑这些服务,成本比任何在线PDF工具的会员费都低。