Como posso adicionar uma assinatura .png a um PDF no Linux?

43

Eu tenho uma cópia digitalizada da minha assinatura escrita e preciso aplicá-la a alguns documentos no bloco de assinatura. Eu costumava fazer isso no Windows o tempo todo, mas agora tenho apenas Linux.

Isso é possível? Como posso adicionar uma imagem de assinatura a um arquivo PDF no Linux (Gnome 3)?

    
por Freedom_Ben 07.08.2013 / 22:04

9 respostas

47

Usando o Xournal, você pode anotar PDFs e adicionar imagens personalizadas (por exemplo, um PNG transparente). Embora seja usado para anotações e desenhos à mão livre, também pode anotar PDFs.

No Ubuntu:

  • Instale o Xournal através do Ubuntu Software Center
  • Abrir o Xournal
  • Selecione "Anotar PDF" no menu Arquivo e selecione seu arquivo PDF a ser assinado.
  • Clique no botão "Imagem" na barra de ferramentas (parece uma silhueta de uma pessoa).
  • Selecione uma imagem PNG da sua assinatura.
  • Redimensione e posicione a imagem no PDF.
  • Selecione "Exportar para PDF" no menu Arquivo.

Mais informações em link

    
por 25.08.2015 / 00:43
9

Vale a pena mencionar o Xournal que tem uma boa interface de usuário e permite adicionar texto, imagens e notas manuscritas a arquivos PDF. O único problema que tive é que não parece lidar muito bem com texto de formulários PDF nativos.

    
por 12.03.2015 / 16:21
7

Encontrei este script que você pode modificar para anexar uma assinatura a um arquivo PDF existente.

Você também pode fazer o download a partir deste URL de pastebin:

Há também este Q & A no AskUbuntu que tem muitos outros métodos para fazer isso. O Q & A é intitulado: Como colocar uma foto em um arquivo pdf existente? .

    
por 07.08.2013 / 22:23
5

Eu tive uma experiência razoavelmente boa com o uPdf .

Instalação

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

Depois, corrija um bug por editando 2 linhas em um script Python .

Uso

Inicie o uPdf, selecione a ferramenta Adicionar uma imagem , desenhe um retângulo ao redor da área onde deseja que a assinatura vá e selecione o arquivo de imagem com sua assinatura. Um PNG com fundo transparente funciona melhor.

    
por 31.10.2013 / 01:22
5

Muitas pessoas recomendam o Xournal, mas eu achei que funcionasse como uma versão do Gimp que eu não posso usar. Assim, se você estiver familiarizado com o Gimp, eu recomendaria tentar.

  • Você deve ter um arquivo com a assinatura (até mesmo uma foto tirada com o telefone ou webcam) e um arquivo com o documento a ser assinado. Este último vai estar em formato PDF, que pode ser aberto pelo Gimp
  • Aplique um limite na assinatura se o branco não for branco o suficiente
  • Converter branco para alfa na assinatura se o plano de fundo do documento não for branco
  • Abra o documento com o Gimp
  • Abra a assinatura no topo do documento como uma nova camada (Arquivo -> Abrir como camada)
  • Ajustar tamanho e posição
  • Mesclar camadas
  • Exportar como PDF

Eu faço isso regularmente quando preciso assinar documentos de uma única página, e isso leva mais ou menos cinco minutos. Infelizmente isso não funcionará se você precisar, por exemplo, assinar todas as páginas de um documento de várias páginas. Neste último caso, apenas imprimo, assino e digitalizo novamente!

    
por 02.02.2016 / 11:26
3

Ao colocar meus próprios comandos de assinatura em um shell script, eu estava procurando uma maneira de selecionar interativamente a área para onde a assinatura deveria ir. Por sorte encontrei esta pergunta e o roteiro de Emmanuel Branlard contém a idéia de como fazê-lo (com xv ). Eu implementei os seguintes pontos:

  • use ImageMagicks display em vez de xv
  • use stdbuf -oL e a opção -update para ter uma visualização ao vivo
  • sobreponha a assinatura com pdftk stamp para evitar a degradação da qualidade da imagem
  • extrair apenas a página específica do arquivo pdf
  • descriptografar a assinatura com gpg
  • criptografar o arquivo PDF assinado com pdftk
  • arquivos intermediários de limpeza contendo a assinatura com wipe

Então aqui está o 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]+).*$/,/" | \
    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
    
por 09.07.2014 / 11:45
1

(Teria deixado como um comentário para a resposta do updf, mas a política do stackexchange sobre "karma" me impede de comentar, mas não me impede de deixar uma resposta).

O updf é muito bom para isso. Tendo usado a visualização no MacOS para "assinar" documentos, o updf oferece a experiência do usuário mais próxima para isso.

O seguinte funciona no Ubuntu 14.10 e Debian 8.

Eu não queria adicionar um ppa de terceiros ao meu sistema, então atualizei o updf da seguinte maneira:

$ bzr branch lp:updf

então fez a edição de 2 linhas como referenciada na outra resposta.

Instalar dependências:

# 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

(o acima foi suficiente; nem todo pacote pode ser necessário, no entanto).

e, em seguida, o programa python é executado no local:

$ ./src/updf.py

Infelizmente, a qualidade pode ser gravemente afetada no documento de saída em comparação com o documento de entrada. A maneira correta de fazer isso seria sobrepor a assinatura e não alterar o original, em um processo sem perdas. Enquanto o updf parece se envolver na recodificação do original.

    
por 12.03.2015 / 09:46
0

Para completar, há um script alternativo para fazer isso, que não converte o pdf para uma imagem (de baixa qualidade), em contraste com o mencionado até agora : link

Minha experiência com as outras soluções foi:

  • O Xournal mexeu com o pdf (embora parecesse funcionar depois de construir a partir da fonte)
  • O script SignPDF converte os PDFs em imagens e reduz significativamente a qualidade. Também tem uma dependência problemática (xv)
  • Eu não tentei a opção gimp e updf
  • No final, usei o Acrobat Reader em uma VM, pois também precisava preencher vários formulários
por 09.06.2018 / 01:39
0

O visualizador de PDF do Okular tem esse recurso embutido com anotações. Abra o PDF que você deseja assinar, selecione comentários na barra à esquerda, selecione a terceira opção no menu pop-up que diz "linha à mão livre". Tire sua assinatura. Se você quiser tinta preta em vez de neon verde, selecione 'Configurações' no menu, selecione 'Configurar Okular', selecione o botão 'Anotações' à esquerda. Selecione 'Freehand Line' nas opções e, em seguida, selecione o botão 'Edit'. Você pode ajustar a espessura da linha e a cor aqui. Clique em Aplicar e aproveite.

    
por 16.10.2018 / 06:19

Tags