Comment puis-je append une signature .png à un PDF sous Linux?

J'ai une copy scannée de ma signature écrite et je dois l'appliquer à certains documents dans le bloc de signature. J'avais l'habitude de le faire sur Windows tout le time mais je n'ai maintenant que Linux.

Est-ce possible? Comment puis-je append une image de signature à un file PDF sous Linux (Gnome 3)?

Avec Xournal, vous pouvez annoter des files PDF et append des images personnalisées (par exemple un file PNG transparent). Bien qu'il soit utilisé pour prendre des notes à main levée et dessiner, il peut aussi annoter des PDF.

Sur Ubuntu:

  • Installer Xournal via le Centre de logiciels Ubuntu
  • Ouvrir Xournal
  • Sélectionnez "Annoter PDF" dans le menu Fichier et select votre file PDF à signer.
  • Cliquez sur le button "Image" dans la barre d'outils (il ressemble à une silhouette d'une personne).
  • Sélectionnez une image PNG de votre signature.
  • Redimensionnez et positionnez l'image sur le PDF.
  • Sélectionnez "Exporter au format PDF" dans le menu Fichier.

Plus d'infos sur http://www.howtogeek.com/215485/sign-pdf-documents-without-printing-and-scanning-them-from-any-device/

J'ai trouvé ce script que vous pouvez modifier pour attacher une signature à un file PDF existant.

Vous pouvez également le download depuis cette URL de pastebin:

Il y a aussi ce Q & A sur AskUbuntu qui a beaucoup d'autres methods pour le faire. Le Q & A est intitulé: Comment mettre une image sur un file PDF existant? .

J'ai eu une assez bonne expérience avec uPdf .

Installation

 sudo add-apt-repository ppa:atareao/updf sudo apt-get update sudo apt-get install -y updf 

Corrigez ensuite un bug en éditant 2 lignes dans un script Python .

Usage

Lancez uPdf, select l'outil Ajouter une image , dessinez un rectangle autour de la zone où vous voulez que la signature aille et select le file image avec votre signature. Un PNG avec un fond transparent fonctionne mieux.

Il vaut la peine de mentionner Xournal qui a une belle interface user et permet d'append du text, des images et des notes manuscrites aux files PDF. Le seul problème que j'ai eu est qu'il ne semble pas gérer le text des formulaires PDF natifs très bien.

Tout en plaçant mes propres commands de signatures dans un script shell, je cherchais un moyen de sélectionner de façon interactive la zone où la signature devrait se rendre. Heureusement, j'ai trouvé cette question et le script d' Emmanuel Branlard contient l'idée sur la façon de le faire (avec xv ). J'ai implémenté les points suivants:

  • utiliser l' display ImageMagicks au lieu de xv
  • utilisez stdbuf -oL et l'option -update pour avoir un aperçu en direct
  • superposer la signature avec le pdftk stamp pour éviter la dégradation de la qualité de l'image
  • extrayez uniquement la page spécifique du file pdf
  • décrypter la signature avec gpg
  • crypter le file pdf signé avec pdftk
  • nettoyage des files intermédiaires contenant la signature avec wipe

Voici donc le code:

 #!/bin/env zsh #dependencies: pdftk, ImageMagick, gpg, wipe, openssl signature=~/PGP/signature.png.gpg f=${1%.pdf} page=$2 density=144 bo=0.2 #baseline overlap in relation to y-size of the signature pagecount=$(pdftk $f.pdf dump_data | grep NumberOfPages | sed "s/.*: //") #sign on last page by default if [ -z "$page" ]; then page=$pagecount; fi function cleanup { echo "Cleaning up..." rm $f.$page.pdf wipe $f.$page.signature.pdf $f.$page.signed.pdf $f.signed.pdf signature.png } trap cleanup EXIT echo "Signing document $f.pdf on page $page." echo "Decrypting signature..." gpg -d $signature > signature.png identity=$(identify -format "%w,%h,%x,%y" signature.png) sdata=(${(s/,/)identity}) echo "Please give the signature area with two clicks and finish by pressing 'q'!" #extract page pdftk $f.pdf cat $page output $f.$page.pdf cp $f.$page.pdf $f.$page.signed.pdf size=$(identify -format "%wx%h" $f.$page.pdf) #select signature area display -density $sdata[3]x$sdata[4] -immutable -alpha off -update 1 -debug X11 -log "%e" -title "sign $f.pdf#$page" $f.$page.signed.pdf 2>&1 >/dev/null | \ grep --line-buffered "Button Press" | \ stdbuf -oL sed -r "s/^.*\+([0-9]+)\+([0-9]+).*$/\1,\2/" | \ while read line do p1=($p2) p2=(${(s/,/)line}) if [ -n "$p1" ] then p=(0 0) if (( p1[1] < p2[1] )); then dx=$((p2[1]-p1[1])); p[1]=$p1[1]; else dx=$((p1[1]-p2[1])); p[1]=$p2[1]; fi if (( p1[2] < p2[2] )); then dy=$((p2[2]-p1[2])); p[2]=$p1[2]; else dy=$((p1[2]-p2[2])); p[2]=$p2[2]; fi dy=$((dy*(1+bo))) if (( $dx*$sdata[2] > $sdata[1]*$dy )) then resize=$(((dy+0.0)/sdata[2])) p[1]=$((p[1]+(dx-resize*sdata[1])/2)) else resize=$(((dx+0.0)/sdata[1])) p[2]=$((p[2]+(dy-resize*sdata[2])/2)) fi echo "Inserting signature..." convert -density $density -size $size xc:transparent \( signature.png -resize $((resize*100))% \) -geometry +$p[1]+$p[2] -composite $f.$page.signature.pdf pdftk $f.$page.pdf stamp $f.$page.signature.pdf output $f.$page.signed.pdf unset p1 p2 fi done if [ -z "$p" ] then echo "You have to click two times. Aborting..." exit 1 fi echo "Joining PDF pages..." sew=( pdftk A=$f.pdf B=$f.$page.signed.pdf cat ) if (( page > 1 )); then sew+=A1-$((page-1)) fi sew+=B if (( page < pagecount )); then sew+=A$((page+1))-end fi sew+=( output $f.signed.pdf ) $sew echo "Encrypting PDF file..." pdftk $f.signed.pdf output $f.signenc.pdf user_pw PROMPT owner_pw $(openssl rand -base64 32) allow AllFeatures 

Beaucoup de gens recommandnt Xournal, mais je l'ai trouvé comme une version de Gimp que je ne peux pas utiliser. Ainsi, si vous êtes familier avec Gimp, je vous recommand de l'essayer.

  • Vous devriez avoir un file avec la signature (même une photo prise avec le téléphone ou la webcam), et un file avec le document à signer. Ce dernier sera au format PDF, qui peut être ouvert par Gimp
  • Appliquer un seuil sur la signature si le blanc n'est pas assez blanc
  • Convertir le blanc en alpha dans la signature si l'arrière-plan du document n'est pas blanc
  • Ouvrez le document avec Gimp
  • Ouvrez la signature au-dessus du document en tant que nouvelle couche (Fichier -> Ouvrir en tant que couche)
  • Ajuster la taille et la position
  • Fusionner les calques
  • Exporter en PDF

Je le fais régulièrement quand je dois signer des documents d'une seule page, et cela me prend plus ou less cinq minutes. Malheureusement cela ne fonctionnera pas si vous avez besoin, par exemple, de signer chaque page d'un document multi-pages. Dans ce dernier cas, je viens d'imprimer, signer et numériser à nouveau!

(J'aurais laissé un commentaire à la réponse updf, mais la politique de stackexchange sur "karma" m'empêche de commenter, mais ne m'empêche pas de laisser une réponse).

updf est vraiment bon pour cela. Ayant utilisé l'aperçu sur MacOS pour «signer» des documents, updf offre l'expérience user la plus proche de cela.

Les travaux suivants sur Ubuntu 14.10 et Debian 8.

Je ne voulais pas append un ppa tierce à mon système, donc j'ai updf en cours d'exécution de la manière suivante:

 $ bzr branch lp:updf 

puis fait l' édition de 2 lignes comme référencé de l'autre réponse.

Installer les dependencies:

 # apt-get install python-poppler gir1.2-gtk-3.0 gir1.2-gdkpixbuf-2.0 gir1.2-poppler-0.18 python-cairo librsvg2-2 gir1.2-rsvg-2.0 python-gi-cairo 

(ce qui précède était suffisant, mais pas tous les packages peuvent être nécessaires).

et puis le programme python est exécutable sur place:

 $ ./src/updf.py 

Malheureusement, la qualité peut être sérieusement affectée dans le document de sortie par rapport au document d'input. La bonne façon de le faire serait de superposer la signature, et non de changer l'original, dans un process sans perte. Alors que updf semble s'engager dans le ré-enencoding de l'original.