Come posso aggiungere una firma .png a un PDF in Linux?


66

Ho una copia scannerizzata della mia firma scritta e devo applicarla ad alcuni documenti nel blocco della firma. Lo facevo sempre su Windows, ma ora ho solo Linux.

È possibile? Come posso aggiungere un'immagine della firma a un file PDF in Linux (Gnome 3)?

Risposte:


86

Usando Xournal puoi annotare PDF e aggiungere immagini personalizzate (ad esempio un PNG trasparente). Sebbene sia usato per prendere appunti e disegni a mano libera, può anche annotare PDF.

Su Ubuntu:

  • Installa Xournal tramite Ubuntu Software Center
  • Apri Xournal
  • Seleziona "Annota PDF" dal menu File e seleziona il tuo file PDF da firmare.
  • Fai clic sul pulsante "Immagine" nella barra degli strumenti (sembra una sagoma di una persona).
  • Clicca sul documento.
  • Seleziona un'immagine PNG della tua firma.
  • Ridimensiona e posiziona l'immagine sul PDF.
  • Seleziona "Esporta in PDF" dal menu File.

Maggiori informazioni su http://www.howtogeek.com/215485/sign-pdf-documents-without-printing-and-scanning-them-from-any-device/


7
Xournal era davvero pieno di bug - quando finalmente sono riuscito a importare la firma ed esportare il PDF, il PDF scansionato era sfocato - la mia firma era l'unico elemento nitido nel pdf risultante.
Antti Haapala,

1
L'ho appena fatto con xournal su arch e ha funzionato abbastanza bene, ma il pdf di sfondo era da un documento, non da una scansione. forse rilevante?
Brandon Kuczenski,

Ha funzionato anche per me su Ubuntu 16.04. Come sidenote, puoi anche usare xournal per annotare il PDF aggiungendo del testo sopra di esso in diversi livelli (utile ad esempio per completare i moduli).
jotadepicas,

hm. quindi questo funziona, in realtà, ma altri programmi pdf su mint non salvano i campi di testo ...
Mendota,

9

Vale la pena menzionare Xournal che ha una bella interfaccia utente e consente di aggiungere testo, immagini e note scritte a mano ai file PDF. L'unico problema che ho avuto è che non sembra gestire molto bene il testo dei moduli PDF nativi.


8

Ho trovato questo script che puoi modificare per allegare una firma a un file PDF esistente.

Puoi anche scaricarlo da questo URL pastebin:

C'è anche questa domanda e risposta su AskUbuntu che ha molti altri metodi per farlo. Le domande e risposte si intitolano: Come mettere un'immagine in un file pdf esistente? .


@Freedom_Ben - anche se sei interessato, ho scoperto come firmare i tuoi PDF utilizzando i certificati anziché solo un PNG. LMK.
slm

3
Il problema è che crea immagini delle pagine di pessima qualità. : / L'altra risposta (su updf) funziona meglio. :)
odinho - Velmont

2
@slm: molto vero. Ma crea ancora un / immagine / della pagina, invece di solo timbrare l'immagine come fa updf. Anche pdftk è in grado di eseguire tali operazioni, ma avrebbe bisogno di uno script del driver come quello qui.
odinho - Velmont

1
Ho usato pdftk e reportlab per fare cose simili in precedenza (stampa unione in cima al pdf): stackoverflow.com/questions/356502/… - ho fatto molti sforzi per trovare un modo efficace. Molti modi sbagliati per elaborare i PDF là fuori.
odinho - Velmont,

2
Esiste una versione di questo che non utilizza xv? È troppo difficile da installare xve non è software libero ...
Chris Beck,

8

Molte persone raccomandano Xournal, ma ho scoperto che funziona come una versione di Gimp che non posso usare. Quindi, se hai familiarità con Gimp, consiglierei di provarlo.

  • Dovresti avere un file con la firma (anche una foto scattata con il telefono o la webcam) e un file con il documento da firmare. Quest'ultimo sarà in formato PDF, che può essere aperto da Gimp
  • Applicare una soglia sulla firma se il bianco non è abbastanza bianco
  • Converti il ​​bianco in alfa nella firma se lo sfondo del documento non è bianco
  • Apri il documento con Gimp
  • Apri la firma sopra il documento come nuovo livello (File -> Apri come livello)
  • Regola dimensioni e posizione
  • Unire i livelli
  • Esporta come PDF

Lo faccio regolarmente quando devo firmare documenti a pagina singola e mi ci vogliono più o meno cinque minuti. Purtroppo questo non funzionerà se, ad esempio, è necessario firmare ogni pagina di un documento di più pagine. In quest'ultimo caso stampo, firmo ed eseguo nuovamente la scansione!


2
Ho provato tutte le soluzioni di cui sopra, tutte fallite dopo molti sforzi. xournalnon funziona davvero correttamente, sembrano esserci dei bug nell'interfaccia utente e non sono riuscito a ridimensionare o spostare le immagini dopo averle importate. xvnon è stato compilato, richiede numerose patch al codice C, quindi alla fine non funziona neanche. updf, o il suo Ubuntu PPA, non esiste più afaict. (testato su Ubuntu xenial dicembre 2016) gimpè la strada da percorrere, grazie per questo!
Chris Beck,

2
Questa è una bella soluzione! Richiede alcune abilità di modifica delle immagini per creare la firma con uno sfondo trasparente e ridimensionare l'immagine quando viene aggiunta al documento come livello. A proposito, la data può anche essere aggiunta al file XCF funzionante come un livello con un po 'di confusione (dimensione e posizione del testo). L'esportazione PDF risultante è abbastanza accettabile!
Tom Russell,

1
Se il documento ha più pagine: importa la pagina come livelli (opzione predefinita), salva il documento come ".mng" (significa più png) semplicemente aggiungendo estensioni .mng ed opzione "esporta come" su gimp, ora vai alla riga di comando e fai : convert original_name.mng output_name.pdf. È tutto. A proposito, se la risoluzione per l'output è bassa, prova ad ingrandire le dimensioni delle immagini pdf mentre importa il pdf all'inizio: prova qualcosa come "2000" per la larghezza. Quando esporti in MNG, non dimenticare di selezionare l'opzione "livello di compressione" al massimo in questo modo il file finale non sarà troppo pesante.
Diego Andrés Díaz Espinoza,

Questa risposta insieme a questa ( onlinesignature.com/es/draw-a-signature-online ) è tutto ciò di cui hai bisogno
Alfergon

6

Ho avuto una discreta esperienza con uPdf .

Installazione

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

Poi correggere un bug per la modifica di 2 linee in uno script Python .

uso

Avvia uPdf, seleziona lo strumento Aggiungi un'immagine , disegna un rettangolo intorno all'area in cui vuoi che la firma vada e seleziona il file immagine con la tua firma. Un PNG con uno sfondo trasparente funziona meglio.


4
lol, è così divertente la modifica di 2 righe di Python. Perché sono io quello che ha creato quel commento. E qui sto cercando un modo per firmare di nuovo un PDF, così felice per le persone utili sugli intarwebs :)
odinho - Velmont

Sembra che l'ultima versione sia stata per Ubuntu Quantal. Aggiunta del repository su errori 15.04 (Vividi) con "Impossibile recuperare ..."
Ponkadoodle,

@Wallacoloo Il pacchetto è costruito solo per Raring e Saucy. Per qualsiasi altra distribuzione è necessario modificare manualmente la distribuzione nel lstfile creato in /etc/apt/sources.list.d.
kynan,

Arresti anomali dopo schermata iniziale su Wily 15.10 usando distribuzioni Precise o Quantali.
Jonathan Neufeld il

Funziona per me su Debian Buster. Altre risposte come gli script personalizzati usano pdftk che al momento non è disponibile e Xournal non è nei repository. Pagina di download dell'aggiornamento o collegamento per il download diretto . Installa con sudo dpkg -i file.deb; sudo apt install -fe poi modifica il codice Python come indicato nella risposta.
Luc

4

Mentre mettevo i miei comandi di firma in uno script di shell, stavo cercando un modo per selezionare in modo interattivo l'area in cui la firma doveva andare. Fortunatamente ho trovato questa domanda e la sceneggiatura di Emmanuel Branlard contiene l'idea su come farlo (con xv). Ho implementato i seguenti punti:

  • usa ImageMagicks displayinvece dixv
  • utilizzare stdbuf -oLe l' -updateopzione per avere un'anteprima dal vivo
  • sovrapporre la firma con pdftk stampper evitare il degrado della qualità dell'immagine
  • estrarre solo la pagina specifica dal file pdf
  • decifrare la firma con gpg
  • crittografare il file pdf firmato con pdftk
  • ripulisci i file intermedi contenenti la firma con wipe

Quindi ecco il codice:

#!/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

Questo non funziona per me, imagamagick carica ma visualizza solo la schermata iniziale.
Andreas,

2

Per completezza, esiste uno script alternativo per farlo, che non converte il pdf in un'immagine (di bassa qualità), a differenza di quello menzionato finora : https://github.com/martinruenz/signpdf

La mia esperienza con le altre soluzioni è stata:

  • Xournal ha sbagliato con il pdf (sembrava funzionare dopo aver compilato dalla fonte però)
  • Lo script SignPDF converte i pdf in immagini e riduce significativamente la qualità. Ha anche una dipendenza fastidiosa (xv)
  • Non ho provato l' opzione gimp e updf
  • Alla fine ho usato Acrobat Reader in una macchina virtuale poiché dovevo anche compilare vari moduli

Grazie per la condivisione. Controllerò la tua sceneggiatura. Ho avuto un ottimo successo con Xournal, quindi devi assicurarti di non esportare nel nome file originale in quanto ciò può causare problemi. Se scegli un nuovo nome in cui esportare (quindi non stai sovrascrivendo il pdf originale) eviterai questo errore.
Freedom_Ben

1

Okular PDF Viewer ha questo incorporato con annotazioni. Apri il PDF che desideri firmare, seleziona le recensioni sulla barra a sinistra, seleziona la terza opzione nel menu a comparsa che dice "linea a mano libera". Disegna la tua firma. Se lo desideri con inchiostro nero anziché verde neon, seleziona "Impostazioni" dal menu, seleziona "Configura Okular", seleziona il pulsante "Annotazioni" sulla sinistra. Seleziona "Linea a mano libera" dalle opzioni, quindi seleziona il pulsante "Modifica". Qui puoi regolare sia lo spessore che il colore della linea. Premi Applica e divertiti.


0

updf è davvero buono per questo. Avendo usato l'anteprima su MacOS per "firmare" i documenti, updf offre l'esperienza utente più vicina a questo.

Quanto segue funziona su Ubuntu 14.10 e Debian 8.

Non volevo aggiungere un ppa di terze parti al mio sistema, quindi invece ho avuto updatef nel modo seguente:

$ bzr branch lp:updf

quindi ha effettuato la modifica di 2 righe come indicato dall'altra risposta.

Installa dipendenze:

# 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

(quanto sopra era sufficiente; non tutti i pacchetti potrebbero essere necessari, tuttavia).

e quindi il programma python è eseguibile sul posto:

$ ./src/updf.py

Sfortunatamente, la qualità può essere gravemente compromessa nel documento di output rispetto al documento di input. Il modo giusto per farlo sarebbe sovrapporre la firma e non cambiare l'originale, in un processo senza perdite. Considerando che updf sembra impegnarsi nella ricodifica dell'originale.


Ho dovuto aggiungere python-gi-cairole dipendenze per farlo funzionare.
Joma,

Joma: grazie; Ora ho aggiunto python-gi-cairo all'elenco.
projix

0

Gestisco un'azienda e Xournal non ha la qualità o l'ampiezza del controllo sui file pdf di cui ho bisogno.

Inoltre, utilizzo o applico firme digitali in ogni momento.

Master PDF Editor (versione 5 a partire da questa data) è un'applicazione a pagamento che supera facilmente le aspettative ed è ora il mio lettore pdf predefinito per Ubuntu. Caratteristica chiave: - firma documenti - compila moduli - modifica testo e oggetti - annota e evidenzia documenti - unisci e dividi file pdf - ecc

Per maggiori dettagli vai a: https://code-industry.net/masterpdfeditor/?-about&ver=5438

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.