自托管 BentoPDF,在浏览器里合并和拆分 PDF
自托管 BentoPDF 工具页,验证 PDF 合并、拆页和下载,明确浏览器计算、HTTPS 隔离响应头与离线依赖的条件。
文章目录
把几个 PDF 合并、拆出指定页或调整页面顺序,是常见的小工作。为了这些操作反复上传文件到不同网站,既麻烦,也容易忘记文件去了哪里。BentoPDF 可以自建一个工具入口,主要文件处理在访问者的浏览器里完成。
这里使用项目提供的自托管版镜像 bentopdf-simple。它包含 PDF 工具,但省去了面向商业站点的宣传页面。VPS 提供应用文件,文件大小和浏览器内存仍会影响操作体验,不能因为部署在 VPS 上就期待服务器替电脑承担全部计算。
先用一个本机端口部署工具页
准备 Linux VPS、Docker Engine、Compose 和 SSH 账号。首次运行不需要数据库或个人文件库。
BentoPDF 主要在浏览器处理文件,VPS 负责提供工具页面。已有 Linux VPS 可先复用;如果计划同时部署其他自托管服务,可以查看雨云云服务器,优惠码 KuZhuJi,按这些服务的总资源需求选择配置。仅为一个静态工具页,也可以考虑已有静态托管空间;大 PDF 的处理能力仍要在使用者的设备上验证。
mkdir -p ~/apps/bentopdf
cd ~/apps/bentopdf
umask 077
docker pull ghcr.io/alam00000/bentopdf-simple:latest
printf 'BENTOPDF_IMAGE=%s\n' "$(docker image inspect --format '{{index .RepoDigests 0}}' ghcr.io/alam00000/bentopdf-simple:latest)" > .env
确认镜像摘要非空,保存为 compose.yml:
services:
bentopdf:
image: ${BENTOPDF_IMAGE:?请固定镜像摘要}
restart: unless-stopped
ports:
- "127.0.0.1:3018:8080"
容器端口是 8080,宿主机示例使用 3018,避免与其他服务抢端口。处理后的文件由浏览器下载到使用者的设备,这份部署不需要文档持久卷。
docker compose config --quiet
docker compose up -d
docker compose ps
docker compose logs --tail=100 bentopdf
电脑上运行:
ssh -N -L 3018:127.0.0.1:3018 user@VPS_IP
替换账号和 VPS 地址,打开 http://localhost:3018。先用没有个人信息的文件检查页面,不直接拿重要合同或证件做第一次尝试。
用三页测试文件核对结果
准备两份测试 PDF,分别含两页和一页,把它们合并为三页文件。下载后用独立 PDF 阅读器打开,检查页数、顺序、文字是否清晰,再从合并结果拆出其中一页。
这组动作能检查导入、处理和下载,而不仅是看工具按钮是否存在。文件带数字签名时,编辑或重组页面可能影响签名有效性,应保留原文件并用实际阅读器核验。压缩和格式转换也要逐页看结果,不能只根据输出文件变小就认为处理成功。
大文件卡住时,观察浏览器内存与页面响应,先用较小样本确认工具功能。VPS 的 CPU 和内存升级并不直接解决浏览器端内存不足;换设备、减少一次处理的页数或分批操作可能更符合这个架构。
HTTPS 和隔离响应头会影响部分转换工具
普通 PDF 操作与 Office 文件转换的运行条件不完全一样。官方说明中,LibreOffice WASM 的 Office 转换需要 SharedArrayBuffer,这要求安全上下文及跨源隔离。localhost 可用于本机测试;直接通过公网 IP 的 HTTP 页面访问,可能看到主页正常,但相关转换功能不可用。
正式域名应通过 HTTPS 提供页面。若 Caddy 在 VPS 宿主机上,可以代理到本机端口:
pdf.example.com {
reverse_proxy 127.0.0.1:3018
}
替换域名、核对 DNS 和证书条件,验证后重载。不要让其他代理层随意移除应用的 COOP、COEP 响应头。接入域名以后,再实际尝试需要的转换功能;只确认主页 HTTPS 正常还不够。
项目的部分 WASM 依赖可能在浏览器运行时加载。需要断网或内网使用时,应采用项目的 air-gap 构建方案,把相关依赖一并放到可访问的位置;普通 Docker 镜像运行成功,不代表所有工具都已具备离线条件。
页面重建与文档保存分开管理
部署侧需要保存 Compose、.env、镜像摘要和代理配置。使用者需要保存原始 PDF 与处理后的文件,并记录重要处理的步骤。网站目录备份不会把每位用户浏览器中处理的文件一起带走。
私人入口可以继续使用 SSH 隧道或 VPN,也可以在代理层给全部路径增加认证。入口认证限制谁能打开工具页,不负责替使用者管理下载文件。
升级时先保留旧镜像摘要,在新版本中重跑合并、拆页和实际需要的转换样本。核对输出页数、顺序和关键内容以后再处理正式资料。如果工具页出现资源加载失败,检查网络请求与代理响应头,再区分页面本身、WASM 依赖和文件处理的问题。
镜像、浏览器处理与离线构建说明见 BentoPDF 官方 README,自托管版镜像可查看 官方镜像仓库。











