¿Cómo puedo agregar una firma .png a un PDF en Linux?

66

Tengo una copia escaneada de mi firma escrita y necesito aplicarla a algunos documentos en el bloque de firma. Solía ​​hacer esto en Windows todo el tiempo, pero ahora solo tengo Linux.

es posible? ¿Cómo puedo agregar una imagen de firma a un archivo PDF en Linux (Gnome 3)?

Freedom_Ben
fuente

Respuestas:

86

Con Xournal puede anotar archivos PDF y agregar imágenes personalizadas (por ejemplo, un PNG transparente). Aunque se usa para tomar notas a mano alzada y dibujar, también puede anotar archivos PDF.

En Ubuntu:

  • Instale Xournal a través del Centro de software de Ubuntu
  • Xournal abierto
  • Seleccione "Anotar PDF" en el menú Archivo y seleccione su archivo PDF para firmar.
  • Haga clic en el botón "Imagen" en la barra de herramientas (se ve como la silueta de una persona).
  • Haga clic en el documento.
  • Seleccione una imagen PNG de su firma.
  • Cambiar el tamaño y colocar la imagen en el PDF.
  • Seleccione "Exportar a PDF" en el menú Archivo.

Más información en http://www.howtogeek.com/215485/sign-pdf-documents-without-printing-and-scanning-them-from-any-device/

Nate Lampton
fuente
77
Xournal estaba realmente defectuoso: cuando finalmente logré importar la firma y exportar el PDF, el PDF escaneado estaba borroso: mi firma era el único elemento nítido en el pdf resultante.
Antti Haapala
1
Acabo de hacer esto con xournal en el arco y funcionó bastante bien, pero el pdf de fondo era de un documento, no un escaneo. tal vez relevante?
Brandon Kuczenski
También funcionó para mí en Ubuntu 16.04. Como nota al margen, también puede usar xournal para anotar el PDF agregando texto encima de él en diferentes capas (útil, por ejemplo, para completar formularios).
jotadepicas
hm. así que esto funciona, en realidad, pero otros programas de pdf en mint no guardan los campos de texto ...
mendota
9

Vale la pena mencionar Xournal, que tiene una interfaz de usuario agradable y permite agregar texto, imágenes y notas escritas a mano a los archivos PDF. El único problema que he tenido es que no parece manejar muy bien el texto de los formularios PDF nativos.

Mike Chelen
fuente
8

Encontré este script que puede modificar para adjuntar una firma a un archivo PDF existente.

También puede descargarlo desde esta URL de Pastebin:

También hay estas preguntas y respuestas en AskUbuntu que tienen muchos otros métodos para hacerlo. Las preguntas y respuestas se titulan: ¿Cómo poner una imagen en un archivo pdf existente? .

slm
fuente
@Freedom_Ben: también si está interesado, encontré cómo firmar sus archivos PDF utilizando certificados en lugar de solo PNG. LMK.
slm
3
El problema es que crea imágenes de las páginas en muy mala calidad. : / La otra respuesta (sobre updf) funciona mejor. :)
odinho - Velmont
2
@slm: Muy cierto. Pero aún así crea una / imagen / de la página, en lugar de estampar la imagen como lo hace updf. pdftk también es capaz de hacer tales operaciones, pero necesitaría un script de controlador como el de aquí.
odinho - Velmont
1
He usado pdftk y reportlab para hacer cosas similares antes (combinación de correspondencia en la parte superior del pdf): stackoverflow.com/questions/356502/… - me costó mucho trabajo encontrar una manera efectiva. Hay muchas formas malas de procesar archivos PDF.
odinho - Velmont
2
¿Hay alguna versión de esto que no use xv? Es demasiado difícil de instalar xvy no es software libre ...
Chris Beck
8

Mucha gente recomienda Xournal, pero descubrí que funciona como una versión de Gimp que no puedo usar. Por lo tanto, si está familiarizado con Gimp, recomendaría probarlo.

  • Debe tener un archivo con la firma (incluso una foto tomada con el teléfono o la cámara web) y un archivo con el documento que se debe firmar. Este último estará en formato PDF, que Gimp puede abrir
  • Aplique un umbral en la firma si el blanco no es lo suficientemente blanco
  • Convierta blanco a alfa en la firma si el fondo del documento no es blanco
  • Abre el documento con Gimp
  • Abra la firma en la parte superior del documento como una nueva capa (Archivo -> Abrir como capa)
  • Ajustar tamaño y posición
  • Fusionar capas
  • Exportar como PDF

Hago esto regularmente cuando necesito firmar documentos de una sola página, y me lleva más o menos cinco minutos. Lamentablemente, esto no funcionará si necesita, por ejemplo, firmar cada página de un documento de varias páginas. En el último caso, solo imprimo, firmo y escaneo de nuevo.

danza
fuente
2
Probé todas las soluciones anteriores, todas fallaron después de mucho esfuerzo. xournalrealmente no funciona correctamente, parece que hay errores en su interfaz de usuario y no pude escalar o mover las imágenes después de importarlas. xvno se compiló, requiere numerosos parches para el código C, y finalmente tampoco funciona. updf, o su ubuntu PPA, ya no existe en realidad. (probado en ubuntu xenial dic 2016) gimpes el camino a seguir, ¡gracias por esto!
Chris Beck
2
Esta es una hermosa solución! Requiere algunas habilidades de edición de imágenes para crear la firma con un fondo transparente y para escalar la imagen cuando se agrega al documento como una capa. Por cierto, la fecha también se puede agregar al archivo XCF de trabajo como una capa con un poco de alboroto (tamaño y ubicación del texto). ¡La exportación de PDF resultante es bastante aceptable!
Tom Russell
1
Si el documento tiene varias páginas: importe la página como capas (opción predeterminada), guarde el documento como ".mng" (significa múltiples png) simplemente agregando extensiones .mng y la opción "exportar como" en gimp, ahora vaya a la línea de comando y haga : convert original_name.mng output_name.pdf. Eso es todo. Por cierto, si la resolución para la salida es baja, intente ampliar el tamaño de las imágenes pdf al importar el pdf al principio: intente algo como "2000" para el ancho. Al exportar a MNG, no olvide marcar la opción "nivel de compresión" al máximo de esta manera, el archivo final no será demasiado pesado.
Diego Andrés Díaz Espinoza
Esta respuesta junto con esta ( onlinesignature.com/es/draw-a-signature-online ) es todo lo que necesita
Alfergon
6

He tenido una experiencia razonablemente buena con uPdf .

Instalación

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

A continuación, fijar un error de edición de 2 líneas en un script Python .

Uso

Inicie uPdf, seleccione la herramienta Agregar una imagen , dibuje un rectángulo alrededor del área donde desea que vaya la firma y seleccione el archivo de imagen con su firma. Un PNG con un fondo transparente funciona mejor.

kynan
fuente
44
jajaja, eso es muy divertido sobre la edición de 2 líneas de Python. Porque yo fui quien creó ese comentario. Y aquí estoy buscando una manera de firmar un PDF nuevamente, estoy muy contento con las personas serviciales en las redes de información :)
odinho - Velmont
Parece que la última versión fue para Ubuntu Quantal. Agregar el repositorio en 15.04 errores (Vívido) con "Error al buscar ..."
Ponkadoodle
@Wallacoloo El paquete solo está diseñado para Raring y Saucy. Para cualquier otra distribución, debe cambiar manualmente la distribución en el lstarchivo creado en /etc/apt/sources.list.d.
kynan
Se bloquea después de la pantalla de bienvenida en Wily 15.10 usando distribuciones Precise o Quantal.
Jonathan Neufeld
Funciona para mí en Debian Buster. Otras respuestas, como los scripts personalizados, usan pdftk, que actualmente no está disponible, y Xournal no está en los repositorios. Página de descarga de Updf o enlace de descarga directa . Instale con sudo dpkg -i file.deb; sudo apt install -fy luego edite el código Python como se menciona en la respuesta.
Luc
4

Mientras ponía mis propios comandos de firma en un script de shell, estaba buscando una manera de seleccionar interactivamente el área donde debería ir la firma. Afortunadamente encontré esta pregunta y el guión de Emmanuel Branlard contiene la idea de cómo hacerlo (con xv). Implementé los siguientes puntos:

  • use ImageMagicks en displaylugar dexv
  • uso stdbuf -oLy la -updateopción de tener una vista previa en vivo
  • superponga la firma con pdftk stamppara evitar la degradación de la calidad de imagen
  • solo extraiga la página específica del archivo pdf
  • descifrar la firma con gpg
  • cifrar el archivo pdf firmado con pdftk
  • limpiar archivos intermedios que contienen la firma con wipe

Entonces aquí está el código:

#!/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
fuente
Esto no funciona para mí, carga imagamagick pero solo muestra la pantalla de bienvenida.
Andreas
2

Para completar, hay una secuencia de comandos alternativa para hacer esto, que no convierte el pdf a una imagen (de baja calidad), en contraste con el mencionado hasta ahora : https://github.com/martinruenz/signpdf

Mi experiencia con las otras soluciones fue:

  • Xournal se metió con el pdf (parecía funcionar después de construir desde la fuente)
  • El script SignPDF convierte archivos PDF a imágenes y reduce significativamente la calidad. También tiene una dependencia problemática (xv)
  • No probé la opción gimp y updf
  • Al final utilicé Acrobat Reader en una máquina virtual, ya que también tuve que llenar varios formularios.
Martin R.
fuente
Gracias por compartir Revisaré tu guión. He tenido muy buen éxito con Xournal, aunque debe asegurarse de no exportar al nombre de archivo original, ya que puede causar problemas. Si elige un nuevo nombre para exportar (por lo que no está sobrescribiendo el pdf original), evitará este error.
Freedom_Ben
1

Okular PDF viewer tiene esto incorporado con anotaciones. Abra el PDF que desea firmar, seleccione reseñas en la barra a la izquierda, seleccione la tercera opción en el menú emergente que dice "línea a mano alzada". Dibuja tu firma. Si desea tinta negra en lugar de verde neón, seleccione 'Configuración' en el menú, seleccione 'Configurar Okular', seleccione el botón 'Anotaciones' a la izquierda. Seleccione 'Línea a mano alzada' de las opciones, luego seleccione el botón 'Editar'. Puede ajustar el grosor y el color de la línea aquí. Presiona Aplicar y disfruta.

cristiano
fuente
0

updf es realmente bueno para esto. Habiendo usado la vista previa en MacOS para "firmar" documentos, updf ofrece la experiencia de usuario más cercana a esto.

Lo siguiente funciona en Ubuntu 14.10 y Debian 8.

No quería agregar un ppa de terceros a mi sistema, por lo que en su lugar puse updf ejecutándose de la siguiente manera:

$ bzr branch lp:updf

luego realizó la edición de 2 líneas como se hace referencia en la otra respuesta.

Instalar dependencias:

# 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

(lo anterior fue suficiente; sin embargo, no todos los paquetes pueden ser necesarios).

y luego el programa python se puede ejecutar en el lugar:

$ ./src/updf.py

Desafortunadamente, la calidad puede verse gravemente afectada en el documento de salida en comparación con el documento de entrada. La forma correcta de hacer esto sería superponer la firma y no cambiar el original, en un proceso sin pérdidas. Mientras que updf parece participar en la re-codificación del original.

projix
fuente
Tuve que agregar python-gi-cairoa las dependencias para que funcione.
Joma
Joma: gracias; Ahora he agregado python-gi-cairo a la lista.
projix
0

Dirijo un negocio y Xournal no tiene la calidad ni la amplitud de control sobre los archivos pdf que necesito.

También estoy usando o aplicando firmas digitales todo el tiempo.

Master PDF Editor (versión 5 a partir de esta fecha) es una aplicación paga que supera fácilmente las expectativas y ahora es mi lector de PDF predeterminado para Ubuntu. Característica clave: - firmar documentos - completar formularios - modificar texto y objetos - anotar y resaltar documentos - fusionar y dividir archivos pdf - etc.

Para obtener más detalles, visite: https://code-industry.net/masterpdfeditor/?-about&ver=5438

Brad Horn
fuente