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


66

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

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

Respostas:


86

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

No Ubuntu:

  • Instale o Xournal através do Centro de Software Ubuntu
  • Open 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 a silhueta de uma pessoa).
  • Clique no documento.
  • 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 http://www.howtogeek.com/215485/sign-pdf-documents-without-printing-and-scanning-them-from-any-device/


7
O Xournal estava realmente com problemas - quando finalmente consegui importar a assinatura e exportar o PDF, o PDF digitalizado estava desfocado - minha assinatura era o único elemento nítido no pdf resultante.
Antti Haapala

11
Acabei de fazer isso com o xournal on arch e funcionou muito bem, mas o pdf de fundo era de um documento, não de uma digitalização. talvez relevante?
precisa saber é o seguinte

Funcionou para mim também no Ubuntu 16.04. Como nota de rodapé, você também pode usar o xournal para anotar o PDF adicionando texto sobre ele em diferentes camadas (útil, por exemplo, para preencher formulários).
Jotadepicas

hm. de modo que este funciona, na verdade, mas outros programas de PDF no hortelã não guardar campos de texto ...
mendota

9

Vale mencionar o Xournal, que possui uma interface agradável e permite adicionar texto, imagens e anotações manuscritas a arquivos PDF. O único problema que tive é que parece não lidar muito bem com texto de formulários PDF nativos.


8

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

Você também pode baixá-lo neste URL da pasta:

Há também estas perguntas e respostas no AskUbuntu que têm muitos outros métodos para fazer isso. As perguntas e respostas são intituladas: Como colocar uma imagem em um arquivo pdf existente? .


@Freedom_Ben - também se você estiver interessado, descobri como assinar seus PDFs usando certificados em vez de apenas um PNG. LMK.
slm

3
O problema é que ele cria imagens das páginas com uma qualidade muito ruim. : / A outra resposta (sobre o updf) funciona melhor. :)
odinho - Velmont

2
@ SLM: Muito verdade. Mas ele ainda cria uma imagem / da página, em vez de apenas carimbar a imagem como o updf faz. O pdftk também é capaz de executar essas operações, mas precisaria de um script de driver como o aqui.
odinho - Velmont

11
Eu usei o pdftk e o reportlab para fazer coisas semelhantes antes (mala direta no topo do pdf): stackoverflow.com/questions/356502/… - esforçou-se muito para descobrir uma maneira eficaz. Muitas maneiras ruins de processar PDFs por aí.
odinho - Velmont

2
Existe uma versão disso que não usa xv? É muito difícil de instalar xve não é um software livre ...
Chris Beck

8

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

  • Você deve ter um arquivo com a assinatura (mesmo uma foto tirada com o telefone ou a webcam) e um arquivo com o documento a ser assinado. O último será 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 em alfa na assinatura se o plano de fundo do documento não for branco
  • Abra o documento com o Gimp
  • Abra a assinatura na parte superior do documento como uma nova camada (Arquivo -> Abrir como camada)
  • Ajustar tamanho e posição
  • Mesclar Camadas
  • Exportar como PDF

Faço isso regularmente quando preciso assinar documentos de página única e levo 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!


2
Eu tentei todas as soluções acima, todas falharam depois de muito esforço. xournalrealmente não funciona corretamente, parece haver erros na interface do usuário e não pude dimensionar ou mover as imagens depois de importá-las. xvnão compilou, requer vários patches no código C e, finalmente, também não funciona. updf, ou seu PPA do ubuntu, não existe mais em conflito. (testado no ubuntu xenial dez 2016) gimpé o caminho a seguir, obrigado por isso!
Chris Beck

2
Esta é uma solução bonita! Requer algumas habilidades de edição de imagem para criar a assinatura com um plano de fundo transparente e dimensionar a imagem quando adicionada ao documento como uma camada. BTW, a data também pode ser adicionada ao arquivo XCF de trabalho como uma camada com um pouco de confusão (tamanho e localização do texto). A exportação de PDF resultante é bastante aceitável!
Tom Russell

11
Se o documento tiver várias páginas: importar página como camadas (opção padrão), salve o documento como ".mng" (significa vários png), apenas adicionando extensões .mng e a opção "export as as" no gimp, agora, na linha de comando : convert original_name.mng output_name.pdf. Isso é tudo. A propósito, se a resolução da saída for baixa, tente aumentar o tamanho das imagens em pdf enquanto importa o pdf no início: tente algo como "2000" para largura. Ao exportar para MNG, não se esqueça de marcar a opção "nível de compactação" ao máximo, desta forma, o arquivo final não será muito pesado.
Diego Andrés Díaz Espinoza

Esta resposta junto com esta ( onlinesignature.com/es/draw-a-signature-online ) é tudo que você precisa
Alfergon

6

Eu tive uma experiência razoavelmente boa com uPdf .

Instalação

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

Em seguida, corrigir um bug pela edição de 2 linhas em um script Python .

Uso

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


4
lol, isso é tão engraçado sobre a edição de 2 linhas de Python. Porque sou eu quem criou esse comentário. E aqui eu estou procurando uma maneira de assinar um PDF de novo, tão feliz com as pessoas úteis sobre as intarwebs :)
odinho - Velmont

Parece que o último lançamento foi para o Ubuntu Quantal. Adicionando o
repositório a

@ Wallacoloo O pacote foi desenvolvido apenas para Raring e Saucy. Para qualquer outra distribuição, você precisa alterar manualmente a distribuição no lstarquivo criado em /etc/apt/sources.list.d.
Kynan

Falha após a tela inicial no Wily 15.10 usando as distribuições Precise ou Quantal.
Jonathan Neufeld

Funciona para mim no Debian Buster. Outras respostas, como os scripts personalizados, usam o pdftk, que não está disponível no momento, e o Xournal não está nos repositórios. Página de download do Updf ou link de download direto . Instale com sudo dpkg -i file.deb; sudo apt install -fe edite o código Python conforme mencionado na resposta.
Luc

4

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

  • use ImageMagicks em displayvez dexv
  • use stdbuf -oLe a -updateopção de ter uma visualização ao vivo
  • sobreponha a assinatura pdftk stamppara 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 que contêm 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]+).*$/\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

Isso não está funcionando para mim, o imagamagick é carregado, mas exibe apenas a tela inicial.
Andreas

2

Para garantir a integridade, existe um script alternativo para fazer isso, que não converte o pdf em uma imagem de baixa qualidade, em contraste com o mencionado até agora : https://github.com/martinruenz/signpdf

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

  • O Xournal mexeu com o pdf (parecia funcionar depois de criar a partir da fonte)
  • O script SignPDF converte pdfs em imagens e reduz significativamente a qualidade. Também possui 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

Obrigado por compartilhar de volta. Vou verificar o seu script. Eu tive um sucesso muito bom com o Xournal, embora você tenha que certificar-se de não exportar para o nome do arquivo original, pois isso pode causar problemas. Se você escolher um novo nome para o qual exportar (para não substituir o pdf original), evitará esse erro.
precisa saber é o seguinte

1

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


0

O updf é realmente 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 disso.

O seguinte funciona no Ubuntu 14.10 e Debian 8.

Eu não queria adicionar um ppa de terceiros ao meu sistema, portanto, o updf foi executado da seguinte maneira:

$ bzr branch lp:updf

em seguida, fez a edição de 2 linhas conforme referenciado na outra resposta.

Instale 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; embora nem todos os pacotes sejam necessários).

e então o programa python é executável no local:

$ ./src/updf.py

Infelizmente, a qualidade pode ser severamente 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.


Eu tive que adicionar python-gi-cairoàs dependências para fazê-lo funcionar.
Joma

Joma: obrigado; Agora adicionei python-gi-cairo à lista.
Project16

0

Eu administro uma empresa e o Xournal não tem a qualidade ou a amplitude de controle sobre os arquivos pdf necessários.

Também estou usando ou aplicando assinaturas digitais o tempo todo.

O Master PDF Editor (versão 5 até essa data) é um aplicativo pago que excede facilmente as expectativas e agora é meu leitor de PDF padrão para o Ubuntu. Característica chave: - assinar documentos - preencher formulários - modificar texto e objetos - anotar e destacar documentos - mesclar e dividir arquivos PDF - etc

Para obter mais detalhes, acesse: https://code-industry.net/masterpdfeditor/?-about&ver=5438

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.