web-dev-qa-db-fra.com

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

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

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

88
Freedom_Ben

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

Sur Ubuntu:

  • Installez Xournal via le Centre logiciel Ubuntu
  • Ouvrir Xournal
  • Sélectionnez "Annoter PDF" dans le menu Fichier et sélectionnez votre fichier PDF à signer.
  • Cliquez sur le bouton "Image" dans la barre d'outils (il ressemble à la silhouette d'une personne).
  • Cliquez sur le document. Une boîte de dialogue du navigateur de fichiers s'ouvre.
  • 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'informations sur http://www.howtogeek.com/215485/sign-pdf-documents-without-printing-and-scanning-them-from-any-device/

113
Nate Lampton

Beaucoup de gens recommandent Xournal, mais je l'ai trouvé fonctionner comme une version de Gimp que je ne peux pas utiliser. Ainsi, si vous connaissez Gimp, je vous recommande de l'essayer.

  • Vous devez 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 va être 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 nouveau calque (Fichier -> Ouvrir en tant que calque)
  • Ajustez la taille et la position
  • Fusionner les calques
  • Exporter au format PDF

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

13
danza

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

9
Mike Chelen

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

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. Le Q&A est intitulé: Comment mettre une image sur un fichier pdf existant? .

8
slm

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

Installation

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

Ensuite, corrigez un bug par éditant 2 lignes dans un script Python .

Usage

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

7
kynan

Je suis surpris de trouver le premier logiciel de bureau gratuit pour Linux mentionné nulle part sur cette page. LibreOffice Draw ouvrira un PDF et vous permettra d'insérer une image. Si votre fichier de signature existe déjà dans le système de fichiers au format PNG avec un fond transparent, c'est un jeu d'enfant de le mettre sur une page , modifiez la taille et déplacez-la en place dans Draw. Draw enregistrera le document au format ODG par défaut, vous devrez donc exporter le document modifié au format PDF.

5
Tom Russell

Tout en mettant mes propres commandes de signature dans un script Shell, je cherchais un moyen de sélectionner de manière interactive la zone où la signature devrait aller. Heureusement, j'ai trouvé cette question et le script de Emmanuel Branlard contient l'idée sur la façon de le faire (avec xv). J'ai implémenté les points suivants:

  • utilisez ImageMagicks display au lieu de xv
  • utilisation stdbuf -oL et le -update option pour avoir un aperçu en direct
  • superposer la signature avec pdftk stamp pour éviter la dégradation de la qualité de l'image
  • extraire uniquement la page spécifique du fichier pdf
  • décrypter la signature avec gpg
  • crypter le fichier pdf signé avec pdftk
  • nettoyer les fichiers 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
5
bodo

Sur Debian (Bullseye), j'ai trouvé que le moyen le plus simple (?) Gratuit est d'utiliser Scribus 1.5.5 qui peut facilement importer un PDF (cela peut être possible) dans les versions antérieures également):

Importez le PDF, puis créez une zone d'image où vous voulez votre signature, choisissez votre fichier de signature, redimensionnez-le si nécessaire, puis exportez-le comme un nouveau PDF (bien sûr, vous pouvez utiliser une zone de texte pour placez le texte nécessaire tel que la date, etc.) En fin de compte, ce n'est pas différent d'utiliser GIMP ou similaire, mais si vous êtes familier avec Scribus, cela ne prend que quelques secondes. Je viens de le faire deux fois pour fermer les comptes, ce qui c'est comme ça que je me suis retrouvé ici;)

4
Dartmoor Tom

Pour être complet, il existe un script alternatif pour ce faire, qui ne convertit pas le pdf en une image (de faible qualité), contrairement à celui mentionné jusqu'à présent : https: // github.com/martinruenz/signpdf

Mon expérience avec les autres solutions a été:

  • Xournal a foiré le pdf (il semblait bien fonctionner après la construction à partir de la source)
  • Le script SignPDF convertit les fichiers PDF en images et réduit considérablement la qualité. Il a également une dépendance gênante (xv)
  • Je n'ai pas essayé les options gimp et updf
  • Au final, j'ai utilisé Acrobat Reader dans un VM car j'ai aussi dû remplir divers formulaires
3
Martin R.

Okular PDF viewer has this built-in with annotations. Open the PDF you want to sign, select reviews on the bar to the left, select the third option dans le menu contextuel qui dit "Ligne à main levée". Dessinez votre signature. Si vous la voulez à l'encre noire plutôt qu'au vert fluo, sélectionnez "Paramètres" dans le menu, sélectionnez "Configurer Okular", sélectionnez le bouton "Annotations" sur le à gauche. Sélectionnez "Ligne à main levée" dans les options, puis sélectionnez le bouton "Modifier". Vous pouvez ajuster l'épaisseur et la couleur du trait ici. Appuyez sur Appliquer et profitez.

2
Christian

Je dirige une entreprise et Xournal n'a pas la qualité ou l'étendue du contrôle des fichiers pdf dont j'ai besoin.

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

Master PDF Editor (version 5 à partir de cette date) est une application payante qui dépasse facilement les attentes et est maintenant mon lecteur pdf par défaut pour Ubuntu. Fonctionnalité clé: - signer des documents - remplir des formulaires - modifier texte et objets - annoter et surligner des documents - fusionner et diviser des fichiers pdf - etc.

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

0
Brad Horn

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

Les travaux suivants sur Ubuntu 14.10 et Debian 8.

Je ne voulais pas ajouter de ppa tiers à mon système, j'ai donc mis à jour updf de la manière suivante:

$ bzr branch lp:updf

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

Installer les 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; cependant, tous les colis peuvent ne pas être nécessaires).

puis 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 d'entrée. La bonne façon de procéder serait de superposer la signature, et non de modifier l'original, dans un processus sans perte. Alors que updf semble s'engager dans le ré-encodage de l'original.

0
projix