Signature PDF 1.11.0 介绍与选型指南

认知 Signature PDF 1.11.0(24eme/signaturepdf)的定位、架构与功能边界,并与 Docuseal、Papra、PdfDing、Stirling-PDF 等自托管 PDF 签名/处理项目做量化选型对比。

Signature PDFSignature PDFPDF电子签名PDF 处理2026/11/02

Signature PDF 1.11.0 介绍与选型指南

目标:认知 Signature PDF(24eme/signaturepdf)是什么、解决什么问题、架构与功能边界如何,并与自托管 PDF 签名/处理赛道的常见替代项做量化选型对比。本篇为认知篇,全部内容来自官方仓库与公开渠道联网溯源(查询日期 2026-11-02),部署与接口实测结论见本专栏姊妹篇。

一、环境信息

  • 溯源对象:GitHub 仓库 24eme/signaturepdf(法国 24ème 协会维护)
  • 溯源渠道:仓库 README.md / installation.md / LICENSE、data.jsdelivr.com git tags 版本线、shields.io 徽章服务(星数/版本/许可证,查询日期 2026-11-02)
  • 最新稳定版:v1.11.0(来源:https://img.shields.io/github/v/release/24eme/signaturepdf.json,2026-11-02 实查)
  • 社区规模:GitHub 星数 831(来源:https://img.shields.io/github/stars/24eme/signaturepdf.json,2026-11-02 实查,徽章返回值 831)
  • 许可证:AGPL-3.0(来源:仓库 LICENSE 文件与 README 徽章)
  • 技术栈:PHP(Fat-Free 微框架)+ Apache,前端 PDF.js / Fabric.js,服务端依赖 pdftk、rsvg-convert、potrace、ImageMagick、Ghostscript、GPG

💡 说明:Signature PDF 与同名近似项目(如 Docuseal、Papra、PdfDing、Stirling-PDF)容易混淆,本篇第二章先给出实体定论,第七章再逐项对比差异。

二、软件概述

2.1 实体定论

Signature PDF 是法国开源促进协会 24ème(24eme association,https://www.24eme.fr)开发的**自由 Web 软件**,官方仓库为 24eme/signaturepdf,一句话定位(README 原文):

Free web software for signing (alone or with others), organizing (merge, sort, rotate, delete, extract pages, ...), editing metadatas or compressing PDFs.

即:单人或多人签署 PDF、页面整理(合并/排序/旋转/删除/抽页)、编辑元数据、压缩 PDF 的自托管 Web 工具。它不是「电子签名平台」(无签署人身份认证、无审计流),而是一个把 PDF 处理装进浏览器的轻量工具站:上传即处理,默认不留存。

  • 开发主体:24ème 协会员工在工作时间内主导开发,贡献者共 9 人(Vincent LAURENT、Jean-Baptiste Le Metayer、Tangui Morlier、Gabriel POMA、Tanguy Le Faucheur(均 24ème),Xavier Garnier、Simon Chabot(Logilab),Étienne Deparis、battosai30)(来源:README Contributions 节,2026-11-02 实查)。
  • 资助来源:Logilab 公司出资 1365 €(共享签名)与 1950 €(元数据编辑);NLNet 基金会多笔资助(国际化、压缩、加密存储、密钥签名、客户端页面整理、deb 包各 1040 €,PDF 外置存储 520 €)(来源:README Fundings 节)。
  • 公共实例:官方 README 收录 17 个公共部署实例,包括 pdf.24eme.fr、framapdf.org(Framasoft 运营)、pdf.libreon.fr、signature.pdf.hostux.net 等(来源:README Instances 节)。

2.2 版本与发布节奏

版本线取自 data.jsdelivr.com git tags(2026-11-02 实查,共 24 个 tag):1.11.0、1.10.0、1.9.2、1.9.1、1.9.0、1.8.0、1.7.4 … 1.5.0。节奏为每季度至半年一个小版本,无 LTS 分支;README 声明「最新稳定版在 master 分支」,升级即 git pull -r。官方在 Docker Hub 发布镜像 xgaia/signaturepdf(README 徽章显示拉取量统计入口,2026-11-02 实查),基础镜像为 php:8.2-apache。

2.3 「签名」语义辨析

💡 技术拓展:PDF「签名」在业界指两条完全不同的技术路径,本项目两者都支持,选型前务必分清——

路径原理效力Signature PDF 的实现
外观签名(electronic signature)把手写/文本/图片渲染成 SVG 图层,用 pdftk multistamp 压印到 PDF 页面证明「谁在页面上签了字」,不可密码学验真默认路径,开箱即用
数字签名(digital signature)用 PKI 证书对文件摘要做密码学签名(PKCS#7),嵌入签名栏可被阅读器验真防篡改可验证,法律效力更强可选,依赖 pdfsig(poppler-utils)+ NSS 证书库,官方镜像默认未装

本文所述「签名」默认指外观签名路径;数字签名配置方法见 《Signature PDF 1.11.0 配置参数详解》 的 NSS 章节。

三、核心架构

3.1 分层与数据流

Signature PDF 是单体 PHP 应用(Fat-Free 微框架路由 + 模板直出),无数据库、无后台队列,所有状态都落在文件系统:

浏览器(PDF.js 渲染页面 + Fabric.js 画布摆放签名元素)
        │  multipart POST(pdf + svg[] 图层文件)
        ▼
Apache + PHP(Fat-Free 路由,public/index.php 入口)
        │  shell_exec
        ▼
外部工具链:rsvg-convert(SVG→PDF)→ pdftk(multistamp 压印)
            → Ghostscript(压缩)→ GPG(共享存储加密)→ pdfsig(数字签名,可选)
  • 前端负责「画」:手写签名板(signature_pad)、文本转路径(OpenType.js + Caveat 手写字体)、图片导入矢量化(服务端 /image2svg:ImageMagick→mkbitmap→potrace)。
  • 后端负责「合」:收到的 SVG 图层先 rsvg-convert 转 PDF,再 pdftk multistamp 逐层压印到原 PDF;单人模式处理完即回传、不落盘(README 首页原文提示 "The PDF will be processed by the server without being retained or stored")。
  • 多人协作模式才启用服务端存储:PDF_STORAGE_PATH 目录下按 32 位哈希建目录存放 original.pdf + 每层签名 <时间戳>.svg.pdf/.sign.pdf,并配 .expire(保留期)与 .admin(管理密钥)两个旁路文件。

3.2 路由面(v1.11.0 源码实查)

应用路由全部定义在仓库根 app.php(2026-11-02 拉取 v1.11.0 tag 源码核对),共 20 余条,分三组:

组路由用途
页面GET /、/signature、/organization、/metadata、/compress、/ocr四大功能 Tab(签名/整理/元数据/压缩)+ OCR
处理POST /sign、/share、/image2svg、/compress、/ocr;GET /signature/@hash/pdf、/signature/@hash/nblayers、/signature/@hash/delete/@key、/cron签名合成、共享流程、图片矢量化、清理到期共享
APIPOST /api/share/new;GET /api/share/get/@hash/@symmkey、/api/share/delete/@hash/@adminkey、/api/file/get以 JSON 驱动共享签名生命周期

💡 说明:该项目没有独立 CLI 管理命令,运维与集成均走上述 HTTP 面;逐条实测见 《Signature PDF 1.11.0 API 使用详解》。

四、功能特性

按 README 与 v1.11.0 源码归纳(2026-11-02 实查):

  1. 单人签名:手写绘制、键入文本(Caveat 手写体渲染)、导入图片(可矢量化)三种签名元素;支持签名、缩略章(initials)、印章、文本、删除线、复选框、涂抹区(redaction)、水印;flatten 选项将结果栅格化(ImageMagick,防图层剥离)。
  2. 多人协作签名:把 PDF 存到服务端并生成分享链接,多人先后在同一文档上叠加签名层;保留期可选 1 小时~1 年(可自定义);发起人持有管理密钥可随时删除共享;可启用 GPG 对称加密存储(密钥藏在链接 # 片段中,服务端不可读明文)。
  3. 数字签名(可选):配置 NSS 证书库后,每次压印自动调用 pdfsig 附加密码学签名("Signed with SignaturePDF")。官方镜像未预装 poppler-utils/libnss3-tools,需自行补装。
  4. 页面整理:合并、排序、旋转、删除、抽页,上限受 MAX_FILE_UPLOADS(页数+1)约束;整理动作由前端 PDF-LIB 计算、后端 pdftk 执行。
  5. 元数据编辑:基于 cantoo-scribe 维护的 pdf-lib fork 改写文档信息字典,可预置默认字段(文本/日期/数字/邮箱等 HTML 输入类型)。
  6. 压缩:Ghostscript pdfwrite 三档(/screen、/ebook、/printer),压缩无收益时返回 204 不产出文件。
  7. OCR:/ocr 路由调用 ocrmypdf --force-ocr,需自行安装 ocrmypdf(官方镜像未预装)。
  8. 多语言:15 种界面语言(ar/de/en/es/eu/fr/it/gl/kab/nl/oc/pl/ro/ta/tr),托管在 hosted.weblate.org 协作翻译;阿拉伯语自动 RTL。

五、快速开始

官方 installation.md 给出的最小启动方式(事实转述,2026-11-02 实查原文):

# 官方 Docker 方式(README/installation.md 原文命令)
docker run -d --name=signaturepdf -p 8080:80 xgaia/signaturepdf
# 打开 http://localhost:8080
# 裸机最小方式(Debian/Ubuntu)
sudo apt-get install php librsvg2-bin pdftk imagemagick potrace ghostscript locales gpg
git clone https://github.com/24eme/signaturepdf.git
cd signaturepdf
php -S localhost:8000 -t public

两条路径都不需要数据库与额外中间件,装齐 6 个外部命令即可跑通「上传→画签名→下载」闭环。生产化部署(端口规划、上传限额、共享存储目录、语言)见 《Signature PDF 1.11.0 Docker Compose 部署指南》。

六、适用场景与限制

适合:

  • 协会/小微团队/个人自托管的「轻量签署站」:合同、确认单、回执的单页手写签名与多方接力签署;
  • 需要把 PDF 工具箱(签名/整理/元数据/压缩)以零依赖 Web 形式开放给非技术用户的场景;
  • 对「服务器不留存文件」有洁癖的场景(单人模式默认流式处理即焚)。

不适合 / 限制:

  • 无签署人身份体系:共享链接即凭证,拿到链接的人都能签,无邮箱验证、无账号、无审计日志——不能替代 Docuseal/DocuSign 这类有合规签署流的电子签名平台;
  • 外观签名不可验真:默认路径的签名是「压印的图像」,防篡改能力弱(可用 flatten 与数字签名路径部分弥补);
  • 多人模式强制服务端留存 PDF(README 明确提示),与「不留存」定位互斥,需自行评估保留期与加密;
  • 上传限额双约束:单文件 ≤ UPLOAD_MAX_FILESIZE、页数 ≤ MAX_FILE_UPLOADS - 1;
  • 数字签名与 OCR 均依赖镜像外组件,官方镜像开箱不含;
  • 界面为纯工具页,无模板、无字段角色、无批量签署任务管理。

七、同类选型对比

候选范围锁定「自托管、Web、与 PDF 签署/处理相关」的开源项目,星数与版本取自 shields.io 徽章 JSON 端点(查询日期 2026-11-02),许可证以各仓库 LICENSE/官方口径为准:

项目星数(2026-11-02)最新版本许可证形态定位多人协作签署签署人身份/审计API
Signature PDF831v1.11.0AGPL-3.0PHP+Apache 单体,无数据库轻量签名+PDF 工具箱✅ 链接分享接力签❌ 无✅ 共享生命周期 JSON API
Docuseal19kv3.3.4AGPL-3.0(社区版)Rails,SQLite/PostgreSQL合规电子签名平台(DocuSign 替代)✅ 多角色签署流✅ 邮箱验证+审计链✅ 完整 REST
Papra5.7k26.7.1AGPL-3.0Node.js,PostgreSQL/S3文档归档管理❌❌✅ REST
PdfDing1.8k(GitHub 镜像)1.14AGPL-3.0Go 单体个人 PDF 库管理/标注❌❌有限
Stirling-PDF96kv3.2.2open-core(社区版免费)Java,单体PDF 处理全家桶❌(无协作签署)❌✅ REST 50+ 操作

对比解读:

  • 要「签署流程合规」(身份验证、审计、模板角色)→ 选 Docuseal,见 《Docuseal 3.3.4 介绍与选型指南》;Signature PDF 与之不在同一赛道。
  • 要「文档库/归档」→ Papra(《Papra 26.7.1 介绍与选型指南》)或 PdfDing(《PdfDing 介绍与选型指南》)。
  • 要「批量 PDF 处理自动化」(转换、合并、OCR 流水线)→ Stirling-PDF(《Stirling-PDF 3.2.0 介绍与选型指南》),它不做多人接力签署。
  • 要「零依赖、五分钟上线的签名小站,同事间手写签字互认」→ Signature PDF 是这组里唯一直接命中「多人共享链接接力签名」且无任何数据库依赖的项目;星数虽少,但由法国协会长期维护、NLNet 资助迭代、17 个公共实例在生产运行,成熟度证据充分。

「如果…则…」速记:

  • 如果签署双方互不相识、需要法律追责链 → 不用 Signature PDF,上 Docuseal 或商业服务;
  • 如果是协会/小团队内部单据签字、且介意文件上传第三方 → 自托管 Signature PDF;
  • 如果既想签名又想顺手压页/改元数据 → Signature PDF 一站完成,不必再配 Stirling-PDF。

八、参考链接