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

14

Um de nossos fornecedores começou a colar uma imagem desnecessariamente grande na última página de PDFs que obtemos deles. Eu preciso aparar isso. No entanto, temos centenas deles, por isso é proibitivo entrar manualmente. Quais são as melhores maneiras de extrair e excluir (de preferência a primeira e depois a outra; ainda preciso confirmar por tamanho de arquivo que não estou excluindo uma que não tenha a imagem) automaticamente a última página de um PDF? OS é Linux.

Posso extraí-lo usando ghostscript, com algo parecido com gs -dFirstPage=5 -dLastPage=5, mas preciso automatizar isso, não consigo passar por e descobrir manualmente qual é o número da última página.

Alguma ideia?

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

Andrew
fonte
1
Olhe pdftk- tenho certeza de que pode ser feito para trabalhar em geral para esse tipo de tarefa.
Daniel Andersson
Possível duplicado: Unix: Converter PDF para imagem
ahilsend
2
Não remotamente uma duplicata disso.
28413 Andrew
No entanto, acho que devo esclarecer: não estou interessado em remover uma imagem na última página. Estou interessado em remover a última página, ponto final.
28413 Andrew
1
Pergunta relacionada com várias respostas diferentes no Ask Ubuntu: askubuntu.com/questions/221962/…
TuringTux

Respostas:

2

Como o @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 ...

Edit : 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á extraído a última página para a variável $last.

Jaap Eldering
fonte
Exemplo não funciona. Encontrei a resposta de @Sid Steward para funcionar melhor.
Reado 31/10
14

Para melhorar ainda mais a resposta do @ eldering, o pdftk versão 1.45 e posterior possui os meios para referenciar as páginas na ordem inversa, acrescentando a letra minúscula r ao número da página. A página final 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

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 do arquivo, execute:

pdftk input.pdf cat r1 output final_page.pdf

O Pdftk está disponível no Linux. Muitas distribuições têm um binário que você pode instalar. Você deve ter certeza de que é a versão 1.45 ou posterior. Caso contrário, você pode criar o pdftk a partir do código fonte.

Sid Steward
fonte
a coisa rN é exatamente o que eu precisava, porque meu sistema de geração de pdf baseado em látex sempre produzia algumas páginas vazias no início e quase no final do documento, tive que removê-las manualmente no final. Agora eu apenas chamo: pdftk A = pocket20.pdf saída A3-r6 r3-cat cat pocket_to_print.pdf, que remove as duas primeiras e as quarta, quinta e quinta páginas.
Martin T.
1

pdfinfo fornecerá o tamanho do arquivo pdf real e pdfimages fornecerá um índice das imagens no referido 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 arquivo específico tiver uma imagem na última página. Se isso acontecer, você poderá fazer qualquer manipulação que precisar.

thanosk
fonte
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 ser aparado e o segundo argumento, a quantidade de páginas a serem aparadas (o padrão é 1).

Alex
fonte
0

Uma solução de um liner seria usar findjunto pdftk:

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

NOTA : os arquivos cortados são armazenados neste exemplo em um subdiretório chamado cutpara manter o nome do arquivo original, pois pdftknão permite a substituição de arquivos de entrada.

Yan Foto
fonte