Sign inSign up

mooloco/pdf-web

By mooloco

•Updated 8 days ago

PDF merge: upload, sort, merge, download.

Image
0

95

mooloco/pdf-web repository overview

⁠pdf-web — PDF 合并工具

单容器 Go + qpdf 实现的多 PDF 上传、排序、合并、下载。

⁠概览(Overview)

在浏览器里把多个 PDF 按想要的顺序拼成一个 merged.pdf 再下载。 后端是 Go 标准库 HTTP 服务 + qpdf 做合并,前端是单个静态页面(拖拽排序), 所有上传文件按随机 Job ID隔离存放,合并完成后下载,过期任务自动清理。

⁠用法(Usage)

网页操作(推荐):

  1. 打开 http://服务器IP:8081。
  2. 把多个 PDF 拖进虚线框,或点「选择文件」(可多选,也可分多次添加)。
  3. 在文件列表里上下拖动调整顺序(顺序即合并后页序),不需要的可点删除。
  4. 点「合并 PDF」,等待状态变为完成。
  5. 点「下载 merged.pdf」保存结果。

API 操作:

⁠快速启动

docker compose up -d --build
curl http://127.0.0.1:8080/health

打开 http://服务器IP:8080 使用。

⁠环境变量

变量默认
PDFWEB_BIND0.0.0.0:8080
PDFWEB_DATA_DIR/data
PDFWEB_QPDF/usr/bin/qpdf
PDFWEB_MAX_FILE_SIZE_MB200
PDFWEB_MAX_JOB_SIZE_MB500
PDFWEB_MAX_FILES_PER_JOB50
PDFWEB_JOB_TTL_MINUTES60
PDFWEB_MAX_CONCURRENT_JOBS4
PDFWEB_MERGE_TIMEOUT5m

⁠API

  • POST /api/v1/jobs 创建任务
  • POST /api/v1/jobs/{id}/files 上传(multipart file,可多文件)
  • GET /api/v1/jobs/{id} 查询
  • DELETE /api/v1/jobs/{id}/files/{fid} 删除
  • POST /api/v1/jobs/{id}/merge 合并 {"files":["f2","f1"]}
  • GET /api/v1/jobs/{id}/download 下载 merged.pdf
  • GET /health

⁠Nginx 示例

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;
  proxy_read_timeout 300s;
  proxy_send_timeout 300s;
}

⁠安全设计

随机 128bit Job ID、磁盘文件名服务端生成、校验 %PDF- 头、大小/数量/并发/超时限制、qpdf 参数数组传递无 shell、下载仅限本 Job 输出、过期自动清理。

Tag summary

Content type

Image

Digest

sha256:39671a7db…

Size

36.5 MB

Last updated

8 days ago

docker pull mooloco/pdf-web