Como extrair e / ou remover a última página de um monte de PDFs?

11

Um de nossos fornecedores começou a adicionar uma imagem desnecessariamente grande à última página de PDFs que recebemos deles. Eu preciso cortar isso. No entanto, temos centenas deles, então é proibitivo entrar manualmente. Quais são as melhores maneiras de extrair e, em seguida, excluir (de preferência primeiro, depois o outro; eu ainda preciso confirmar via filesize que eu não estou excluindo um que não tem a imagem) a última página de um PDF automaticamente? OS é Linux.

Eu posso extraí-lo usando o ghostscript, com algo como gs -dFirstPage=5 -dLastPage=5 , mas eu preciso automatizar isso, não posso acessar manualmente e descobrir qual é o número da última página.

Alguma idéia?

Editar: para esclarecer, eu simplesmente quero dividir / excluir a última página. Não a imagem, exclua o último período da página.

    
por Andrew 29.07.2013 / 18:36

5 respostas

1

Como @Daniel Andersson já comentou, isso pode ser feito facilmente com pdftk :

pdftk input.pdf cat end-1 output temp.pdf
pdftk temp.pdf  cat end-2 output output.pdf
rm temp.pdf

Eu não sei se isso pode ser feito com uma chamada para pdftk embora ...

Editar : você pode combiná-lo com a resposta do thanosk e usar (no bash):

pdftk input.pdf cat 1-$((last-1)) output output.pdf

quando você já extraiu a última página para a variável $last .

    
por 29.07.2013 / 22:55
11

Para melhorar ainda mais a resposta do @ eldering, a versão 1.45 do pdftk e mais tarde têm os meios para fazer referência a páginas na ordem inversa, colocando a letra minúscula r no número da página. A última página em um PDF é r1, a penúltima página é r2, etc.

Por exemplo, a única chamada pdftk:

pdftk input.pdf cat 1-r2 output output.pdf

irá eliminar a página final de input.pdf - a entrada deve ter pelo menos duas páginas.

Para extrair apenas a página final de um PDF para testar seu tamanho de arquivo, execute:

pdftk input.pdf cat r1 output final_page.pdf

O Pdftk está disponível no Linux. Muitas distros têm um binário que você pode instalar. Você deve se certificar de que é a versão 1.45 ou posterior, no entanto. Se não, você pode construir o pdftk a partir do código-fonte.

    
por 05.08.2013 / 15:51
1

pdfinfo lhe dará o tamanho do arquivo pdf atual, e pdfimages lhe dará um índice das imagens no dito arquivo pdf. Então você pode escrever um script no formulário

#!/bin/bash
for i in *.pdf
do
        j=$(pdfinfo "$i" |awk '/^Pages/ { print $2}')
        pdfimages -list -p -f "$j" "$i"
done

que deve retornar se um determinado arquivo tiver uma imagem na última página. Se isso acontecer, então você pode fazer qualquer manipulação que você precise fazer.

    
por 29.07.2013 / 20:37
0

Aqui está uma solução usando o pdfjam em vez do pdftk:

#!/bin/sh
fname='basename $1'
pdfjam $1 1-$(('pdfinfo $1 | grep Pages | grep -shoPe '\d+'' - ${2:-1})) -o ${fname%.*}-trimmed.pdf

Onde o primeiro argumento é o arquivo a aparar e o segundo argumento a quantidade de páginas a serem aparadas (o padrão é 1).

    
por 11.04.2016 / 20:02
0

Uma solução de um liner seria usar find ao longo de pdftk :

find . -name "*.pdf" -exec pdftk {} cat 1-r2 output cut/{} \;

OBSERVAÇÃO : os arquivos cortados são armazenados neste exemplo em um subdiretório chamado cut para manter o nome do arquivo original, pois pdftk não permite a substituição de arquivos de entrada.

    
por 22.10.2017 / 11:22

Tags