Manipulando arquivos PDF pela linha de comando
Dica publicada em Linux / Comandos
Manipulando arquivos PDF pela linha de comando
Nós, do mundo GNU/Linux, pegamos muitas informações pela Internet e em vários formatos de arquivo. Um dos formatos mais comuns é o PDF, da Adobe.
Só que, às vezes, queremos só três páginas de um arquivo com trezentas páginas, ou não achamos cômodo ter quatrocentos arquivos de uma página cada, sobre o mesmo assunto. E por vezes, você vê uma imagem em um arquivo PDF e quer extraí-la para usar na sua área de trabalho...
Mas não se aflijam, amigos! Para isso existe o terminal!
Obs.: Para fazer uso dos comandos presentes nesta dica, deve-se ter instalado o pacote poppler-utils. Este pacote disponibiliza os utilitários que serão utilizados, e já vem instalado por padrão no Ubuntu e Slackware.
A invocação dele, deve ser feita assim:
pdfseparate [opções] arquivooriginal.pdf [padraoarquivodestino.pdf]
Em 'opções', você precisa informar os parâmetros -f [nn] e -l [mm], onde nn é a primeira página a ser extraída, e mm é a última.
Em algum lugar do "padraoarquivodestino.pdf", precisa haver um "%d", indicando onde o número da página extraída deve ser inserida no nome dos arquivos.
Por exemplo, se eu fizer:
pdfseparate -f 2 -l 4 liber_al_legis.pdf liber%d.pdf
O comando vai criar os arquivos "liber2.pdf", "liber3.pdf" e "liber4.pdf", sem alterar o arquivo liber_al_legis original.
Para extrair páginas salteadas, você precisará criar um laço for para a tarefa. Vamos supor, que o arquivo "moonchild.pdf" tenha 50 páginas, mas só quero as páginas 3, 7, 11 e 33.
Eu faria:
for i in 3 7 11 33; do pdfseparate -f $i -l $i moonchild.pdf pagina%d.pdf; done
Para juntar estas páginas em um único arquivo, verifique o próximo subtítulo.
Ele lê uma série de arquivos PDF listados na invocação do comando, e cria um arquivo nomeado na invocação do comando, sem alterar nenhum dos arquivos fontes. A invocação dele deve ser feita assim:
pdfunite arquivofonte1.pdf arquivofonte2.pdf ... arquivofonten.pdf arquivodestino.pdf
Por exemplo, se eu quisesse reunir em um único arquivo aquelas páginas do arquivo "moonchild.pdf" que eu extraí no exemplo anterior, eu faria:
pdfunite pagina3.pdf pagina7.pdf pagina11.pdf pagina33.pdf excerto.pdf
O arquivo "excerto.pdf" será criado com as páginas 3, 7, 11 e 33, que eu separei anteriormente.
Simples: use o pdfimages!
pdfimages -f [nn] -l [mm] -j arquivofonte.pdf nomebase
Os parâmetros f e l funcionam do mesmo modo que funcionam para o comando pdfseparate. A opção -j diz que as imagens devem ser extraídas no formato ".jpg" (o padrão do comando é o ".ppm").
O parâmetro "nomebase", indica qual é o prefixo de nome para os arquivos contendo as imagens encontradas. Cada imagem vai parar no arquivo "nomebase-nnn.xxx", onde nnn é o número sequencial da imagem, e xxx é a extensão (no nosso caso: .jpg).
Com o pdftoppm! O comando fica assim:
pdftoppm -f [nn] -l [mm] -r [rr] arquivofonte.pdf nomebase
As opções -f e -l são nossas velhas conhecidas. A opção -r diz que cada imagem deve ter sua resolução alterada para: rr DPI.
O parâmetro "nomebase" é o prefixo do nome dos arquivos gerados, um por página do PDF original. Cada arquivo de imagem vai ter como nome "nomebase-nnnn.ppm", onde "nnnn", é o número sequencial da página.
Este comando gera imagens em ".ppm". Para gerar imagens em ".jpg" ou ".png", passe as opções -jpg, ou -png para o comando.
O comando para isso é (surpreendentemente ;-) pdftohtml.
Este comando tem tantas opções interessantes (ao contrário dos demais), que eu realmente recomendo a leitura da manpage dele, que é muito bem escrita.
E é isso, pessoal.
O subgênio aqui, vai se despedindo com saudações dobbsianas para todos vocês!
Só que, às vezes, queremos só três páginas de um arquivo com trezentas páginas, ou não achamos cômodo ter quatrocentos arquivos de uma página cada, sobre o mesmo assunto. E por vezes, você vê uma imagem em um arquivo PDF e quer extraí-la para usar na sua área de trabalho...
Mas não se aflijam, amigos! Para isso existe o terminal!
Obs.: Para fazer uso dos comandos presentes nesta dica, deve-se ter instalado o pacote poppler-utils. Este pacote disponibiliza os utilitários que serão utilizados, e já vem instalado por padrão no Ubuntu e Slackware.
Extraindo páginas de um arquivo PDF
Se você precisa extrair páginas de um arquivo PDF, o comando que você precisa é o pdfseparate. Ele lê o arquivo PDF e cria um arquivo por página extraída desta forma, sem alterar o arquivo original.A invocação dele, deve ser feita assim:
pdfseparate [opções] arquivooriginal.pdf [padraoarquivodestino.pdf]
Em 'opções', você precisa informar os parâmetros -f [nn] e -l [mm], onde nn é a primeira página a ser extraída, e mm é a última.
Em algum lugar do "padraoarquivodestino.pdf", precisa haver um "%d", indicando onde o número da página extraída deve ser inserida no nome dos arquivos.
Por exemplo, se eu fizer:
pdfseparate -f 2 -l 4 liber_al_legis.pdf liber%d.pdf
O comando vai criar os arquivos "liber2.pdf", "liber3.pdf" e "liber4.pdf", sem alterar o arquivo liber_al_legis original.
Para extrair páginas salteadas, você precisará criar um laço for para a tarefa. Vamos supor, que o arquivo "moonchild.pdf" tenha 50 páginas, mas só quero as páginas 3, 7, 11 e 33.
Eu faria:
for i in 3 7 11 33; do pdfseparate -f $i -l $i moonchild.pdf pagina%d.pdf; done
Para juntar estas páginas em um único arquivo, verifique o próximo subtítulo.
Concatenando arquivos .pdf
Se você quiser concatenar (isto é, reunir) arquivos PDF em um único, use o comando pdfunite.Ele lê uma série de arquivos PDF listados na invocação do comando, e cria um arquivo nomeado na invocação do comando, sem alterar nenhum dos arquivos fontes. A invocação dele deve ser feita assim:
pdfunite arquivofonte1.pdf arquivofonte2.pdf ... arquivofonten.pdf arquivodestino.pdf
Por exemplo, se eu quisesse reunir em um único arquivo aquelas páginas do arquivo "moonchild.pdf" que eu extraí no exemplo anterior, eu faria:
pdfunite pagina3.pdf pagina7.pdf pagina11.pdf pagina33.pdf excerto.pdf
O arquivo "excerto.pdf" será criado com as páginas 3, 7, 11 e 33, que eu separei anteriormente.
Extraindo imagens de um arquivo PDF
Vamos supor que, por alguma razão, você tem um arquivo PDF chamado "LotR:fellowship.pdf", cujo conteúdo deve ser bem óbvio para os senhores, e vamos supor que você gostou tanto da imagem do Portão de Moria, que quer extraí-la e colocar na sua área de trabalho.Simples: use o pdfimages!
pdfimages -f [nn] -l [mm] -j arquivofonte.pdf nomebase
Os parâmetros f e l funcionam do mesmo modo que funcionam para o comando pdfseparate. A opção -j diz que as imagens devem ser extraídas no formato ".jpg" (o padrão do comando é o ".ppm").
O parâmetro "nomebase", indica qual é o prefixo de nome para os arquivos contendo as imagens encontradas. Cada imagem vai parar no arquivo "nomebase-nnn.xxx", onde nnn é o número sequencial da imagem, e xxx é a extensão (no nosso caso: .jpg).
Convertendo arquivos PDF em imagens
Não me basta extrair uma imagem de um arquivo PDF, agora interessa-me converter cada página do arquivo para um arquivo de imagem. Como fazer?Com o pdftoppm! O comando fica assim:
pdftoppm -f [nn] -l [mm] -r [rr] arquivofonte.pdf nomebase
As opções -f e -l são nossas velhas conhecidas. A opção -r diz que cada imagem deve ter sua resolução alterada para: rr DPI.
O parâmetro "nomebase" é o prefixo do nome dos arquivos gerados, um por página do PDF original. Cada arquivo de imagem vai ter como nome "nomebase-nnnn.ppm", onde "nnnn", é o número sequencial da página.
Este comando gera imagens em ".ppm". Para gerar imagens em ".jpg" ou ".png", passe as opções -jpg, ou -png para o comando.
Convertendo arquivos PDF para HTML
Mais uma fascinante demonstração do potencial do terminal.O comando para isso é (surpreendentemente ;-) pdftohtml.
Este comando tem tantas opções interessantes (ao contrário dos demais), que eu realmente recomendo a leitura da manpage dele, que é muito bem escrita.
E é isso, pessoal.
O subgênio aqui, vai se despedindo com saudações dobbsianas para todos vocês!
Obrigado pela contribuição.