Juntando PDFs pela linha de comando

(Esse artigo requer conhecimento de terminal Linux e Windows)

Uma das coisas que o formato PDF resolveu foi digitalizar minhas impressões.

Voce paga um boleto bancario na internet e ao invés de imprimir o comprovante voce apenas “PDFliza” ele. Ok, vamos parar com neologismo, voce digitaliza sua impressão e quando requerido voce imprime ou envia por email para outra pessoa.

Mas existe um problema que massacra muita gente :

E quando eu tenho não apenas um PDF, mas vários e até mesmo de proporções diferentes (uns no modo paisagem e outros em modo retrato) e preciso junta-los num único PDF ?

Existem poucos programas escritos para esse propósito, mas há uma maneira eficiente de fazer isso no Linux usando o Ghostscript, vejamos.

Primeiramente ponha os arquivos PDF que queira junta-los numa única pasta e usando o terminal caminhe até ela :

cd /pasta/onde/estao/os/pdf

Vamos criar um arquivo texto com o conteúdo dos PDFs existentes nessa pasta :

ls -1 *.pdf >relacao.txt

Voce acabou de criar um arquivo de nome relacao.txt com os nomes dos arquivos .pdf que serão juntados, veja esse exemplo :

contas_em_atraso_de_execao.pdf
dez-darf-simples.pdf
dez-fgts-sem-tomador.pdf
dez-gps.pdf
dez-inss-gps.pdf
dez-simples-nacional.pdf
dpvat-2008.pdf
estatistica_de_recebimento.pdf
ipva-2008.pdf
licenciamento-2008.pdf
recibo-fgts.pdf

A ordem acima será respeitada ao juntar os PDFs, se voce quer uma ordem diferente, basta reeditar este arquivo colocando as linhas na ordem desejada.

Porfim, agora vem a hora de usar o ghostscript, friozinho na barriga ? Que nada, veja como é moleza :

gs  -sDEVICE=pdfwrite -dSAFER -dBATCH -dNOPAUSE -sOutputFile=/tmp/juntar_tudo.pdf @relacao.txt -c -q

Rapaz, voce acabou de criar um /tmp/juntar_tudo.pdf com todos os PDFs alistados em relacao.txt. Se voce tem poucos PDFs e acha que não compensa criar um arquivo relacao.txt voce pode simplesmente relacionar os nomes de arquivos em PDF na própria linha de comando, apenas substitua @relacao.txt pelos nomes dos arquivos PDFs que pretende juntar.

No Windows, o principio é o mesmo, mas naturalmente voce precisa instalar o ghostscript para Windows, e na hora de gerar os PDFs deve executar pelo cmd do Windows :

c:\gs\gs8.54\bin\gswin32.exe -sDEVICE=pdfwrite -dSAFER -dBATCH -dNOPAUSE -sOutputFile=c:\temp\juntar_tudo.pdf @c:\temp\relacao.txt -c -q

Parabens ! Voce é um hacker no terminal Linux e Windows agora. Já faz algo que poucos aplicativos sabem fazer ou custam uma fortuna.

Conclusão

Voce não somente junta PDFs, mas pode juntar Postscripts normais também.

Com um pouquinho de curiosidade e voce pode mudar sDevice e produzir no resultado da junção um arquivo em outro formato como png/jpeg/bitmap. Um hacker por exemplo poderia produzir um jpeg dum PDF e usar um conversor OCR para recuperar um texto protegido. Enfim, com o ghostscript há muitas funcionalidades.

Anúncios
  1. #1 por Iron Junior em 31 \31\UTC janeiro \31\UTC 2008 - 16:52

    A dica é show de bola, mas só para quando serão juntados vários e vários PDFs. Já que o Linux conta com um ótimo programa (na minha opinião) que é o PDF Editor.

    Vlw!

    Abraço!
    Iron Junior

  2. #2 por Salles em 31 \31\UTC janeiro \31\UTC 2008 - 21:08

    Sobrinho te encheu a bola e com razão, show, valeu.
    Como eu disse na lista, uso o PDF Editor mas ainda não tinha pintado nenhum trabalho que requeresse juntar páginas.
    Abraços,

    Salles (Nethell)

  3. #3 por Adam Astor em 31 \31\UTC janeiro \31\UTC 2008 - 22:24

    Boa dica, legal mesmo.

    A propósito, os posts deveriam ter ao final de cada um, a opção de se poder imprimi-los (um link com um símbolo de uma impressora, e a formatação do texto para impressão), de tal forma que o usuário possa comandar impressão.

    Parabéns pelo post

  4. #4 por Lebon em 1 \01\UTC fevereiro \01\UTC 2008 - 17:58

    Vocês já ouviram falar do pdftk? Ele não só junta, como extrai páginas de um PDF, e até adiciona uma marca d’água.

  5. #5 por marcon em 1 \01\UTC fevereiro \01\UTC 2008 - 18:03

    Eu acho mais simples abrir um boleto bancario na internet no firefox e ir no menu “imprimir” e usar a opção “imprimir para arquivo”. Crie um arquivo “1.ps” por exemplo (postscript é o padrão para arquivos “imprimíveis” no firefox). Faça isso com todos os arquivos que quiser.
    depois, na janela de comandos, vá para o diretório onde salvou os arquivos e use o CAT (exemplo com 3 arquivos):

    cat 1.ps 2.ps 3.ps > tudo.ps

    Isso vai concatenar os arquivos, mas os programas de visualização só mostram o primeiro deles.

    Depois, use o comando:

    ps2pdf tudo.ps tudo.pdf

    Agora está pronto!

  6. #6 por Bruno em 1 \01\UTC fevereiro \01\UTC 2008 - 19:06

    Tem um pacote nos repositórios do ubuntu chamado pdfjam que trás diversos comandos pra gerenciar PDFs, entre eles um chamdo pdfjoin que faz exatamente o que o nome sugere. Dê uma olhada nesse, é bem útil também.

  7. #7 por henry em 2 \02\UTC fevereiro \02\UTC 2008 - 0:28

    O grande mérito da dica do Ghostscript é que ele vem instalado por padrão em toda distro que eu conheço. Não precisa de instalar nenhum pacote adicional, nem manter “incompatibilidades mentais”, é como saber usar minimamente o vi: em toda distribuição tem, e mais dia menos dia, vc vai precisar dele, quer goste ou não.

  8. #8 por Iron Junior em 2 \02\UTC fevereiro \02\UTC 2008 - 0:57

    O mais interessante de ver nos comentários é a infinidade de opções que temos atualmente com o Linux, para qualquer situação temos inúmeros meios e opções!

  9. #9 por Fabio em 2 \02\UTC fevereiro \02\UTC 2008 - 1:12

    Caro hamacker,

    Olá, sou um leitor do teu blog e antes de tudo quero lhe parabenizar pela sua atitude em ajudar os muitos usuários de linux avançados ou não. Bem, entretanto o que eu gostaria de saber é o que vc quis dizer em gerar os pdf pelo cmd do windows pq eu ainda sou um usuário de windows xp e não tirei um tempo para tentar o linux, ou melhor a distribuição SUSE ou UBUNTU.
    Ontem a noite após ter lido este post eu tentei gerar um pdf unico de dois arquivos pdf’s mas não deu certo houve um problema então por favor apenas peço ajuda.

    Um abraço,

    Fábio Camatti

  10. #10 por hamacker em 2 \02\UTC fevereiro \02\UTC 2008 - 13:59

    Fábio Camatti, cmd do Windows é a linha de prompt desse SO. É chamado de cmd porque é o nome do programa que lhe dá esse acesso.

  11. #11 por orlando em 2 \02\UTC fevereiro \02\UTC 2008 - 21:39

    outra forma:

    usar pdftk ( pdf toolkit ) http://www.pdfhacks.com/pdftk/:

    pdftk contas_em_atraso_de_execao.pdf dez-darf-simples.pdf dez-fgts-sem-tomador.pdf dez-gps.pdf dez-inss-gps.pdf dez-simples-nacional.pdf dpvat-2008.pdf estatistica_de_recebimento.pdf ipva-2008.pdf licenciamento-2008.pdf recibo-fgts.pdf cat output juntar_tudo.pdf

  12. #12 por Rizada em 6 \06\UTC fevereiro \06\UTC 2008 - 14:20

    Aqui nao funcionou, e me deu o seguinte erro:

    root@pavilion:~/documentos/Deitel – Java – Como Programar – 6a Edicao BR Completo# gs -sDEVICE=pdfwrite -dSAFER -dBATCH -dNOPAUSE -sOutputFile=/home/anderson/deitel.pdf @relacao.txt -c -q
    GPL Ghostscript SVN PRE-RELEASE 8.61 (2007-08-02)
    Copyright (C) 2007 Artifex Software, Inc. All rights reserved.
    This software comes with NO WARRANTY: see the file PUBLIC for details.
    Error: /undefinedfilename in (Deitel)
    Operand stack:

    Execution stack:
    %interp_exit .runexec2 –nostringval– –nostringval– –nostringval– 2 %stopped_push –nostringval– –nostringval– –nostringval– false 1 %stopped_push
    Dictionary stack:
    –dict:1151/1684(ro)(G)– –dict:0/20(G)– –dict:92/200(L)–
    Current allocation mode is local
    Last OS error: 2
    GPL Ghostscript SVN PRE-RELEASE 8.61: Unrecoverable error, exit code 1

  13. #13 por hamacker em 6 \06\UTC fevereiro \06\UTC 2008 - 14:42

    Erro 2 costuma ser “arquivo não encontrado”, verifique se sua relacao.txt tem todos os arquivos e se todos são .pdf.

    Fora isso, a sintaxe do artigo está correta.

  14. #14 por fcamatti em 7 \07\UTC fevereiro \07\UTC 2008 - 0:19

    Hamacker,
    Olá sou eu denovo! Bem apenas gostaria de salientar que consegui resolver o meu problema. Então como dica só quero dizer que para aqueles que tentarem fazer isso no windows xp, no qual eu realizei o procedimento, não esqueçam de especificar o endereço completo dos arquivos pdf’s no arquivo relacao.txt.

    Ex.:

    -relacao.txt

    c:\temp\teste1.pdf
    c:\temp\teste2.pdf

    Desta forma eu obtive sucesso e resolvi todos os meu problemas.

    Um abraço,

    Fábio

  15. #15 por Thiago Mendes em 14 \14\UTC fevereiro \14\UTC 2008 - 21:48

    Parabéns pelo novo leiaut, ficou muito bom…tem estilo.

  16. #16 por Leandro Coelho e Silva em 18 \18\UTC setembro \18\UTC 2008 - 23:03

    Ao rodar o comando, me apresenta a senguite mensagem:
    gs -sDEVICE=pdfwrite -dSAFER -dBATCH -dNOPAUSE -sOutputFile=juntar_tudo.pdf @relacao.txt -c -q

    -r must be followed by or x

    Alguem pode me ajudar.

  17. #17 por Diego em 12 \12\UTC novembro \12\UTC 2008 - 14:00

    òtima dica, consegui junta PDFs

    Mas preciso fazer isto com PDF que possuem senha para abrir, sabendo a senha.

    Existe alguma opção, parâmetro para colocar a senha destes PDFs que estou lendo??

    Obrigado.

  18. #18 por Diego em 25 \25\UTC novembro \25\UTC 2008 - 11:28

    Consegui,

    Se alguém ainda olha isto fica ae a dica:

    c:\gs\gs8.54\bin\gswin32.exe -sDEVICE=pdfwrite -dSAFER -dBATCH -dNOPAUSE -sOutputFile=c:\pasta\PDFUnico.pdf -sPDFPassword=123456 @relacao.txt -c -q

    @relacao.txt está explicado no texto incial do Blog.

    A senha vale para todos arquivos dentro do .txt
    Se for necessário arquivos com senhas diferentes então listar um por vez antecedido da senha.

  19. #19 por Eduardo em 30 \30\UTC dezembro \30\UTC 2008 - 17:32

    Pessoal,

    Estou realizando a junção de vários arquivos PDF, contudo estes meu PDFs foram gerados através de digitalização com a opção (PDF Pesquisável) mas quando realizo a junção destes PDFs eles são convertidos como se fossem imagens ou cerca de 90% do texto deixa de ser reconhecido pelo PDF.

    Alguém tem idéia de como solucionar este meu problema?
    Algum parametro para reconhecimento do texto deve ser setado?

    Obrigado.

  1. Juntando PDFs na linha de comando
  2. Juntando PDFs pela linha de comando « DiarioNet
  3. Unindo vários arquivos PDF em um único arquivo PDF - Bruno Russo - {brusso|russo}
%d blogueiros gostam disto: