Assinatura de documentos PDF em lote via Bash

Na dica de hoje trago uma solução de caráter prático para quem está no trabalho remoto. Em meu emprego tenho que assinar um certo volume de documentos com alguma regularidade, por pura burocracia. Felizmente, posso fazê-lo de forma eletrônica e (muito felizmente) posso fazê-lo sem utilizar o aplicativo da Adobe. O objetivo da dica de hoje é criar um script que assina documentos automaticamente e ainda faz algumas firulas utilizando ferramentas simples como Bash e Inkscape.

[ Hits: 4.442 ]

Por: Bruno Rafael Santos em 30/12/2022 | Blog: https://cutt.ly/4H7vrPh


Produto



Gerando o pdf

O ImageMagick faz jus ao nome, mas é bem complicado de utilizar as vezes, mas tem uma boa documentação, algo raro em muitas bibliotecas poderosas.

Para o Bash o acesso ao ImageMagick é via o comando convert que faz todo tipo de coisa. No nosso caso, preciso transformar um arquivo svg em pdf mantendo as transparências do svg e com uma qualidade razoável.

Como é um único comando, o mostrarei de uma vez:

convert -density 300 -transparent white "assinatura.svg" "assinatura.pdf";

A estrutura do convert é simples de entender: 'converte entrada saída'. O -density 300 faz a saída ser 300dpi pois o padrão do convert é 72dpi, o que é bem pobre em termos de qualidade da imagem. O -transparent white foi o mais difícil de encontrar. Ele define branco como a cor transparente pois o ImageMagick não trata pdf como ele trata PNGs e tende a achatar as imagens removendo as transparências completamente. Então tive que definir uma cor transparente explicitamente.

Copiar e Colar

Agora que temos nosso pdf pronto podemos deixa o pdftk fazer o resto do serviço. O pdftk é um ferramente versátil de edição de PDFs, mas pouco utilizada em sua versão linha de comando. O tk é de toolkit, mas antigamente tinha uma versão com interface em gtk.

O comando que precisamos é simples, a operação no pdftk se chama stamp (de carimbo) e colocará a assinatura em todas as páginas. Existe uma variação chamada multistamp que coloca assinaturas distintas em páginas distintas (sugiro explorar para quem quer assinar a primeira página e rubricar as outras).

pdftk "arquivo.pdf" stamp "assinatura.pdf" output "arquivo.assinado.pdf";

Pronto, simples assim.

Possíveis Problemas

Alguns problemas podem acontecer:
  • O arquivo de saída fica chapado: acontece porque o ImageMagick não deu conta de exportar o pdf transparente. Isso pode acontecer porque o arquivo em si não tinha a transparência ou a definição da cor estava errada.

- As cores podem ser definidas por nome, hexa ou RGB (manual ImageMagick]). O ideal é corrigir no svg e garantir que o plano de fundo seja transparente. - Exportar em png é uma forma de testar se está funcionando pois a maioria dos visualizadores de pdf não renderiza a transparência direito.
  • O sed utiliza uma sintaxe simples, então seja prático quanto à string que será substituída. Eu tentei criar uma variável $DATE e deu confusão.

- O suporte é POSIX, que é bem parecido com PERL.

Página anterior     Próxima página

Páginas do artigo
   1. Introdução e Setup
   2. Produto
   3. Script Final
Outros artigos deste autor

Tutorial GIMP: Preparando mapas para artigos científicos

Devo atender? Um ótimo aplicativo para bloquear Telemarketing

Campos no LibreOffice: usos e abusos

Guia Rápido do Miniconda para Aplicações Científicas - Instalação e Configuração

Python para pesquisadores: material didático

Leitura recomendada

Aviso de queda de Internet via Sendxmpp

Blacklist - O que é? Como consultar o IP? Como automatizar?

Executando backup do MySQL e enviando por FTP

flock - Gerenciador de lockfiles

Brincando com pseudoterminais e redirecionamentos

  
Comentários
[1] Comentário enviado por fabio em 30/12/2022 - 21:19h

Muito bom! Bash é vida rsrs

[2] Comentário enviado por maurixnovatrento em 01/01/2023 - 18:23h


Isso aí é bom demais. Ótimo artigo.

___________________________________________________________
Conhecimento não se Leva para o Túmulo.
https://github.com/mxnt10

[3] Comentário enviado por adrianoh2 em 04/01/2023 - 09:54h

Excelente solução. Realmente prático! - Vou adaptar para meu uso!
Acredito que exista uma função "estilo ALPHA" para o background do Imagetrick, que pode facilitar problemas com cortes em partes semi-preenchidas da assinatura.
No geral, ele apaga tudo que é branco, e as vezes, nem sempre fica 100%.
Aqui uma solução que pode retirar "aos poucos" o fundo branco, para problemas com assinaturas muito finas, com muitos detalhes, ou que foram erroneamentes cortadas.
Da forma abaixo, você pode ir proporcionalmente.
https://stackoverflow.com/questions/9155377/set-transparent-background-using-imagemagick-and-command...

Valeu, excelente material!



Entrega o teu caminho ao Senhor; confia nele, e ele o fará. - Salmos 37:5
Tava bão, ocê veio, fico mió!

[4] Comentário enviado por santosbrc em 05/01/2023 - 21:53h


[3] Comentário enviado por adrianoh2 em 04/01/2023 - 09:54h

Excelente solução. Realmente prático! - Vou adaptar para meu uso!
Acredito que exista uma função "estilo ALPHA" para o background do Imagetrick, que pode facilitar problemas com cortes em partes semi-preenchidas da assinatura.
No geral, ele apaga tudo que é branco, e as vezes, nem sempre fica 100%.
Aqui uma solução que pode retirar "aos poucos" o fundo branco, para problemas com assinaturas muito finas, com muitos detalhes, ou que foram erroneamentes cortadas.
Da forma abaixo, você pode ir proporcionalmente.
https://stackoverflow.com/questions/9155377/set-transparent-background-using-imagemagick-and-command....

Valeu, excelente material!



Entrega o teu caminho ao Senhor; confia nele, e ele o fará. - Salmos 37:5
Tava bão, ocê veio, fico mió!



Eu sofri bastante para achar esse comando. Deve ter sim uma solução melhor no ImageMagick. Coloquei a assinatura em um fundo diferente para evitar este tipo de problema, isso evita que o ImageMagick peque tudo de forma indiscriminada.

[5] Comentário enviado por CerberusBH em 13/01/2023 - 09:16h

Excelente! Meus parabéns!
Salvei nos meus favoritos!


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts