Olá pessoal!
Estou procurando um editor de PDF para Ubuntu que ao unir arquivos gere uma identificação do nome do arquivo na respectiva página.
Exemplo: tenho os arquivos 001 - [nome_1], 002 - [nome_2], 003 - [nome_3], ..., nnn - [nome_n]. Ao unir estes arquivos preciso que seja impressa os nomes dos arquivos em cada página respectiva ao arquivo.
Se alguém já conhece essa solução, ficarei grato, pq são muitos arquivos.
Não existe um modo fácil de se fazer isso: mesmo que você encontre um editor avançado de PDF, ele provavelmente será pago e não fará tudo que você quer. Pelo menos não de uma vez. Caso essa solução exista, terá de ser um editor que possui uma função BATCH (isso se refere a processamento
em lote, ou seja, executar os mesmos comandos várias vezes, repetidamente, em vários arquivos, de maneira programada).
Se os seus arquivos não estiverem todos em formato
PDF, é necessário convertê-los todos para
.pdf, porque assim fica mais fácil manipulá-los em linha de comando (shell). Supondo que todos os seus arquivos estejam em formato
PDF, um modo bastante limitado de fazer o que você está querendo é o dos passos a seguir. Mas antes instale estes programas, caso ainda não os tenha instalados:
-
LibreOffice (instale-e com o comando
sudo apt install libreoffice -y)
-
pdftk-java (instale-o com o comando
sudo apt install pdftk-java -y e, caso necessite do Java, instale-o conforme explicado
aqui)
-
Ghostscript (instale-o com o comando
sudo apt install ghostscript -y)
PASSO A PASSO (não é uma solução mágica: é só um "quebra-galho"):
1. Copie todos os arquivos
.pdf para uma pasta nova. Exemplo: acesse a pasta
/tmp e então crie uma pasta chamada
compilado (caminho completo:
/tmp/compilado), daí
copie todos os arquivos
.pdf para
/tmp/compilado. O ideal é
copiar os arquivos
.pdf, ao invés de os mover, porque se algo der errado ou não sair como você gostaria, os arquivos
.pdf originais estarão a salvo na pasta original deles.
2. Em seguida, abra uma janela do terminal do shell e execute o comando
cd /tmp/compilado para acessar a pasta que está com as cópias dos seus arquivos
.pdf.
3. Agora na janela do terminal do shell, execute o comando abaixo para que o shell então procure e liste todos os arquivos
.pdf dentro de
/tmp/compilado cujos nomes têm uma ou mais (até 9) ocorrências do caractere
" " (espaço em branco), e então renomeie esses arquivos de modo que cada um dos espaços em branco seja substituído por um caractere
"_" (sublinhado/
underscore):
for i in 1 2 3 ; do for i in 1 2 3 4 5 6 7 8 9 ; do find . -name '*.pdf' -print0 | xargs -0 -n1 bash -c 'mv "$0" "${0/\ .pdf/\_.pdf}"' ; done ; for i in 1 2 3 4 5 6 7 8 9 ; do find . -name '*.pdf' -print0 | xargs -0 -n1 bash -c 'mv "$0" "${0/\ /\_}"' ; done ; done
4. Em seguida, execute o comando abaixo para eliminar as (até 9) repetições do caractere
"_" nos nomes dos arquivos
.pdf:
for i in 1 2 3 ; do for i in 1 2 3 4 5 6 7 8 9 ; do find . -name '*.pdf' -print0 | xargs -0 -n1 bash -c 'mv "$0" "${0/\__/\_}"' ; done ; done
Se os arquivos
.pdf originalmente não tinham nenhum nome exótico, agora todos estarão com nomes simples, tais como:
ANTES => DEPOISmeudocumento.pdf => meudocumento.pdfarquivo longo.pdf => arquivo_longo.pdfarquivo muito longo.pdf => arquivo_muito_longo.pdf5. O próximo passo é executar o comando abaixo, que para cada arquivo
.pdf do diretório criará um arquivo
.c.txt (esse
c é de
cabeçalho) com o mesmo nome do arquivo
.pdf exceto que o interior desse arquivo
.c.txt conterá somente o próprio nome do arquivo
sem a extensão:
for i in $(ls -A1 *.pdf |sed 's/\.[^.]*$//' |sed 's/\ /\_/') ; do echo $i > $i.c.txt ; done
Exemplos fictícios do resultado do comando acima:
- Para um arquivo
meudocumento.pdf será criado um arquivo
meudocumento.c.txt contendo dentro dele somente a palavra
meudocumento.
- Para um arquivo
arquivo_longo.pdf será criado um
arquivo arquivo_longo.c.txt contendo dentro dele somente o texto
arquivo_longo.
- Para um arquivo
arquivo_muito_longo.pdf será criado um arquivo
arquivo_muito_longo.c.txt contendo dentro dele somente o texto
arquivo_muito_longo.
6. Agora execute o comando abaixo. Ele acessará o interior (conteúdo) de cada um dos arquivos
.c.txt que agora constam no diretório e então substituirá cada umas das (até 9) ocorrências do caractere
"_" pelo caractere
" ":
for i in 1 2 3 ; do for i in 1 2 3 4 5 6 7 8 9 ; do for i in $(ls -A1 *.c.txt) ; do sed -i 's/\_/\ /' $i ; done ; done ; done
7. O próximo passo é, para cada arquivo
.c.txt, criar uma respectiva versão com extensão
.pdf. O comando é este:
for i in $(ls -A1 *.c.txt) ; do libreoffice --convert-to "pdf" $i ; done
8. Agora que os arquivos de cabeçalho também estão em formato
PDF (com a extensão
.c.pdf), basta usar o programa
pdftk em
loop para que ele aplique cada arquivo de cabeçalho
.c.pdf como cabeçalho do respectivo arquivo
.pdf:
for i in $(ls -A1 *.c.pdf |sed 's/\.c.pdf//') ; do pdftk $i.pdf stamp $i.c.pdf output $i.p.pdf ; done
9. Os novos arquivos com o cabeçalho embutido terão todos o nome terminando com a extensão
.p.pdf, então para uni-los basta executar no shell o programa Ghostscript instruído para combinar somente os arquivos que terminam com
.p.pdf:
gs -dBATCH -dNOPAUSE -q -sDEVICE=pdfwrite -sOutputFile=compilado.pdf $(ls -A1 *.p.pdf)
10. O arquivo
compilado.pdf será criado dentro de
/tmp/compilado contendo todos os arquivos
.p.pdf, sendo que toda página de cada arquivo
.p.pdf terá no canto superior esquerdo o nome original do respectivo arquivo
.pdf de origem.