Comment puis-je ajouter un fichier .png de signature à un PDF sous Linux?

66

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

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

Freedom_Ben
la source

Réponses:

86

En utilisant Xournal, vous pouvez annoter des fichiers PDF et ajouter des images personnalisées (par exemple, un fichier PNG transparent). Bien qu'il soit utilisé pour prendre des notes à main levée et pour dessiner, il peut également annoter des PDF.

Sur Ubuntu:

  • Installer Xournal via le Centre de logiciel Ubuntu
  • Ouvrez Xournal
  • Sélectionnez "Annoter PDF" dans le menu Fichier et sélectionnez le fichier PDF à signer.
  • Cliquez sur le bouton "Image" dans la barre d'outils (cela ressemble à la silhouette d'une personne).
  • Cliquez sur le document.
  • 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/

Nate Lampton
la source
7
Xournal était vraiment bogué - lorsque j'ai finalement réussi à importer la signature et à exporter le fichier PDF, le fichier PDF numérisé était flou - ma signature était le seul élément précis du fichier PDF obtenu.
Antti Haapala
1
Je viens de faire ceci avec xournal sur arch et cela a fonctionné assez bien, mais le pdf de fond était un document, pas un scan. peut-être pertinent?
Brandon Kuczenski
Travaillé pour moi aussi sur Ubuntu 16.04. En tant que note, vous pouvez également utiliser xournal pour annoter le PDF en ajoutant du texte au dessus de celui-ci dans différentes couches (utile par exemple pour compléter des formulaires).
jotadepicas
hm. donc ça marche, en fait, mais d'autres programmes pdf sur menthe ne sauvegardent pas les champs de texte ...
mendota
9

Il convient de mentionner Xournal qui possède une interface utilisateur agréable et permet d’ajouter du texte, des images et des notes manuscrites à des fichiers PDF. Le seul problème que j'ai eu est qu'il ne semble pas bien gérer le texte des formulaires PDF natifs.

Mike Chelen
la source
8

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

Vous pouvez également le télécharger à partir de cette URL pastebin:

Il y a aussi ce Q & A sur AskUbuntu qui a beaucoup d'autres méthodes pour le faire. La Q & A s'intitule: Comment mettre une image sur un fichier pdf existant? .

slm
la source
@ Freedom_Ben - aussi si cela vous intéresse, j'ai trouvé comment signer vos PDF en utilisant des certificats au lieu d'un simple fichier PNG. LMK.
slm
3
Le problème est que cela crée des images de pages de très mauvaise qualité. : / L'autre réponse (à propos de updf) fonctionne mieux. :)
odinho - Velmont
2
@slm: très vrai. Mais il crée toujours une / image / de la page, au lieu d’apposer l’image sur l’affichage, contrairement à updf. pdftk est également capable de faire de telles opérations, mais aurait besoin d'un script de pilote comme celui-ci.
Odinho - Velmont
1
J'ai déjà utilisé pdftk et reportlab pour faire des choses similaires auparavant (fusion de courrier au-dessus de pdf): stackoverflow.com/questions/356502/… - a pris beaucoup d'efforts pour trouver un moyen efficace. Très nombreuses mauvaises méthodes de traitement des fichiers PDF.
Commentaires
2
Y a-t-il une version de ce qui ne l'utilise pas xv? Il est trop difficile à installer xvet ce n'est pas un logiciel libre ...
Chris Beck
8

Beaucoup de gens recommandent Xournal, mais j’ai trouvé que cela fonctionnait comme une version de Gimp que je ne peux pas utiliser. Ainsi, si vous connaissez Gimp, je vous recommanderais de l’essayer.

  • Vous devriez avoir un fichier avec la signature (même une photo prise avec le téléphone ou la webcam) et un fichier avec le document à signer. Ce dernier sera au format PDF, pouvant ê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 en haut 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 lorsque je dois signer des documents d'une page et cela me prend plus ou moins cinq minutes. Malheureusement, cela ne fonctionnera pas si, par exemple, vous devez signer chaque page d'un document de plusieurs pages. Dans ce dernier cas, je viens d'imprimer, de signer et de numériser à nouveau!

Danza
la source
2
J'ai essayé toutes les solutions ci-dessus, elles ont toutes échoué après de nombreux efforts. xournalne fonctionne pas vraiment correctement, il semble y avoir des bugs dans son interface utilisateur et je n’ai pas pu redimensionner ou déplacer les images après les avoir importées. xvne compile pas, nécessite de nombreux correctifs pour le code C, puis finalement ne fonctionne pas non plus. updf, ou son PPA d'ubuntu, n'existe plus. (testé sur ubuntu xenial dec 2016) gimpest la voie à suivre, merci pour cela!
Chris Beck
2
C'est une belle solution! Certaines compétences en édition d'image sont nécessaires pour créer la signature avec un arrière-plan transparent et pour redimensionner l'image lorsqu'elle est ajoutée au document en tant que calque. En passant, la date peut également être ajoutée au fichier XCF de travail en tant que couche peu compliquée (taille et emplacement du texte). L'export PDF résultant est tout à fait acceptable!
Tom Russell
1
Si le document a plusieurs pages: importer la page en tant que calques (option par défaut), enregistrez le document au format ".mng" (plusieurs png), en ajoutant simplement les extensions .mng et l'option "exporter en tant que" sur gimp. : convert original_name.mng output_name.pdf. C'est tout. Soit dit en passant, si la résolution de sortie est faible, essayez d’agrandir la taille des images pdf tout en important le pdf au début: essayez quelque chose comme "2000" pour la largeur. Lors de l'exportation au format MNG, n'oubliez pas de cocher l'option "Niveau de compression" au maximum afin que le fichier final ne soit pas trop lourd.
Diego Andrés Díaz Espinoza le
Cette réponse ainsi que celle ( onlinesignature.com/es/draw-a-signature-online ) est tout ce dont vous avez besoin
Alfergon
6

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

Puis corrigez un bogue en modifiant 2 lignes dans un script Python .

Usage

Lancez uPdf, sélectionnez l' outil Ajouter une image , tracez un rectangle autour de la zone souhaitée et sélectionnez le fichier image portant votre signature. Un fichier PNG avec un arrière-plan transparent convient le mieux.

Kynan
la source
4
lol, c'est tellement drôle au sujet de l'édition 2 lignes de Python. Parce que je suis celui qui a créé ce commentaire. Et ici, je suis à la recherche d'un moyen de signer à nouveau un fichier PDF, si heureux des personnes utiles sur les sites Internet intarwebs :)
odinho - Velmont
On dirait que la dernière version était pour Ubuntu Quantal. Ajout du repo sur les erreurs 15.04 (Vivid) avec "Echec de la récupération ..."
Ponkadoodle le
@Wallacoloo Le package n'est conçu que pour Raring et Saucy. Pour toute autre distribution, vous devez modifier manuellement la distribution dans le lstfichier créé dans /etc/apt/sources.list.d.
Kynan
Bloque après l'écran de démarrage sur Wily 15.10 en utilisant des distributions Precise ou Quantal.
Jonathan Neufeld
Fonctionne pour moi sur Debian Buster. D'autres réponses, telles que les scripts personnalisés, utilisent pdftk, actuellement indisponible, et Xournal ne figure pas dans les référentiels. Page de téléchargement Updf ou lien de téléchargement direct . Installez avec sudo dpkg -i file.deb; sudo apt install -f, puis modifiez le code Python comme indiqué dans la réponse.
Luc
4

Tout en plaçant mes propres commandes de signature dans un script shell, je cherchais un moyen de sélectionner de manière interactive la zone dans laquelle la signature devrait apparaître. 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 ImageMagicks displayau lieu dexv
  • utiliser stdbuf -oLet la -updatepossibilité d'avoir un aperçu en direct
  • superposer la signature avec pdftk stamppour empêcher la dégradation de la qualité de l'image
  • extraire uniquement la page spécifique du fichier pdf
  • décrypter la signature avec gpg
  • chiffrer le fichier pdf signé avec pdftk
  • nettoyer les fichiers intermédiaires contenant la signature avec wipe

Alors voici 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
Bodo
la source
Cela ne fonctionne pas pour moi, imagamagick se charge mais affiche uniquement un écran de démarrage.
Andreas
2

Par souci d'exhaustivité, il existe un script alternatif qui ne convertit pas le pdf en image (de faible qualité), contrairement à celui mentionné jusqu'à présent : https://github.com/martinruenz/signpdf

Mon expérience avec les autres solutions était:

  • Xournal a déconné avec le pdf (cela semblait fonctionner après la construction de la source)
  • Le script SignPDF convertit les fichiers PDF en images et réduit considérablement la qualité. Il a aussi une dépendance gênante (xv)
  • Je n'ai pas essayé l' option gimp et updf
  • J'ai finalement utilisé Acrobat Reader sur un ordinateur virtuel, car je devais également remplir divers formulaires.
Martin R.
la source
Merci de nous avoir partagé. Je vais vérifier votre script. J'ai eu un très bon succès avec Xournal, mais vous devez vous assurer de ne pas exporter vers le nom de fichier d'origine car cela pourrait causer des problèmes. Si vous choisissez un nouveau nom pour l'exportation (afin de ne pas écraser le pdf d'origine), vous éviterez ce problème.
Freedom_Ben
1

Okular PDF Viewer intègre cette fonctionnalité avec des annotations. Ouvrez le fichier PDF que vous souhaitez signer, sélectionnez les commentaires dans la barre située à gauche, puis sélectionnez la troisième option du menu contextuel intitulée "Ligne à main levée". Dessinez votre signature. Si vous souhaitez utiliser l'encre noire plutôt que le vert fluo, sélectionnez "Paramètres" dans le menu, sélectionnez "Configurer Okular", sélectionnez le bouton "Annotations" sur la gauche. Sélectionnez «Ligne à main levée» dans les options, puis sélectionnez le bouton «Modifier». Vous pouvez ajuster l'épaisseur du trait et la couleur ici. Appuyez sur Appliquer et profitez-en.

Christian
la source
0

updf est vraiment bon pour cela. Ayant utilisé la prévisualisation sur MacOS pour "signer" des documents, updf offre à l'utilisateur l'expérience la plus proche.

Ce qui suit fonctionne sur Ubuntu 14.10 et Debian 8.

Je ne souhaitais pas ajouter un ppa tiers à mon système, aussi le programme de mise à jour s'exécutait-il de la manière suivante:

$ bzr branch lp:updf

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

Installer des dépendances:

# 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. Tous les colis ne sont pas forcément nécessaires).

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

$ ./src/updf.py

Malheureusement, la qualité peut être gravement affectée dans le document de sortie par rapport au document de base. La bonne façon de procéder consiste à superposer la signature et à ne pas modifier l’original, sans perte. Alors que updf semble s’engager dans le ré-encodage de l’original.

projeter
la source
J'ai dû ajouter python-gi-cairodes dépendances pour que cela fonctionne.
Joma
Joma: merci; J'ai maintenant ajouté python-gi-cairo à la liste.
projix
0

Je gère une entreprise et Xournal n’a pas la qualité ou l’étendue du contrôle sur les fichiers pdf dont j'ai besoin.

J'utilise aussi ou applique des signatures numériques tout le temps.

Master PDF Editor (version 5 à compter de cette date) est une application payante qui dépasse de loin les attentes et qui est maintenant mon lecteur de pdf par défaut pour Ubuntu. Principales caractéristiques: - signer des documents - remplir des formulaires - modifier du texte et des objets - annoter et mettre en surbrillance des documents - fusionner et diviser des fichiers PDF - etc.

Pour plus de détails, allez à: https://code-industry.net/masterpdfeditor/?-about&ver=5438

Brad Horn
la source