@signpdf

@signpdf

C'EST QUOI ?

@signpdf est une famille de paquets npm qui signent électroniquement des PDF depuis Node.js. Le principe tient en deux temps : on insère d'abord un emplacement de signature dans le document, c'est-à-dire un objet Sig et un Widget rattachés à un formulaire déclaré dans le Root du PDF, puis @signpdf/signpdf remplace les zéros réservés dans le descripteur Contents par la signature réelle. Le projet assume son objectif : montrer ce flux dans du code lisible, parce que le reconstituer depuis la spec prend des heures.

POURQUOI C'EST INTÉRESSANT ?

  • Découpage en petits paquets : @signpdf/signpdf orchestre, un signer fournit la crypto, un helper pose le placeholder. Tu n'installes que la combinaison qui correspond à ton cas.
  • Un helper par façon d'obtenir un PDF : placeholder-pdfkit pour PDFKit 0.11 et plus, placeholder-pdfkit010 pour PDFKit 0.10, placeholder-pdf-lib pour PDF-LIB, placeholder-plain pour un fichier .pdf déjà sur le disque.
  • Signature détachée : @signpdf/signer-p12 signe un buffer avec un bundle P12 via node-forge. En détaché, la longueur de la signature ne dépend pas de la taille du document mais du certificat, donc tu calibres la taille du placeholder une fois pour toutes.
  • PAdES : le sous-filtre ETSI.CAdES.detached se déclare avec l'option subFilter des helpers, à la place de la valeur Adobe par défaut.
  • Les limites sont écrites : placeholder-plain travaille par opérations de chaîne, donc il est fragile, ne gère pas les streams et s'arrête au PDF 1.3. Le README le dit, tout en précisant que c'est le helper le plus utilisé.
  • Types et exemples : les paquets publient leurs déclarations TypeScript, et le dépôt contient un exemple exécutable par combinaison, en JS comme en TS.

CAS D'USAGE

  • Signer à la volée des factures ou des contrats générés avec PDFKit ou PDF-LIB.
  • Apposer un certificat d'entreprise sur des PDF venus de sources variées, dans un job backend.
  • Produire des signatures conformes PAdES pour un usage réglementaire européen.
  • Traiter des documents qui arrivent déjà avec leur placeholder, posé par un autre outil, avec @signpdf/signpdf et un signer seuls.
  • Lire une implémentation courte du format de signature PDF avant d'écrire la sienne.

Le README annonce lui-même son périmètre : seuls les scénarios de base de la signature PDF sont couverts. La signature elle-même passe par node-forge, déclaré en peer dependency du signer P12.