Comment extraire et / ou supprimer la dernière page d'un tas de PDF?

14

L'un de nos fournisseurs a commencé à coller une image inutilement énorme à la dernière page de PDF que nous obtenons d'eux. Je dois couper ça. Cependant, nous en avons des centaines, il est donc prohibitif d'entrer manuellement. Quelles sont les meilleures façons d'extraire puis de supprimer (de préférence la première, puis l'autre; j'ai encore besoin de confirmer via la taille du fichier que je ne supprime pas celle qui n'a pas l'image) la dernière page d'un PDF automatiquement? Le système d'exploitation est Linux.

Je peux l'extraire en utilisant ghostscript, avec quelque chose dans le sens de gs -dFirstPage=5 -dLastPage=5, mais j'ai besoin d'automatiser cela, je ne peux pas parcourir et trouver manuellement le numéro de la dernière page.

Des idées?

Modifier: pour clarifier, je veux simplement diviser / supprimer la dernière page. Pas l'image en elle, accise la dernière période de la page.

Andrew
la source
1
Regardez pdftk- je suis certain que cela peut être fait pour fonctionner en général pour ce genre de tâche.
Daniel Andersson
Duplicata possible: Unix: convertir le pdf en image
ahilsend
2
Pas à distance un double de cela.
Andrew
Je pense que je devrais clarifier cependant: je ne suis pas intéressé à supprimer une image sur la dernière page. Je voudrais supprimer la dernière page, point final.
Andrew
1
Question connexe avec plusieurs réponses différentes sur Ask Ubuntu: askubuntu.com/questions/221962/…
TuringTux

Réponses:

2

Comme l'a déjà fait remarquer @Daniel Andersson, cela peut facilement être fait avec pdftk:

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

Je ne sais pas si cela peut être fait avec un seul appel à pdftk ...

Edit : vous pouvez le combiner avec la réponse de thanosk et l'utiliser (en bash):

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

lorsque vous avez déjà extrait la dernière page de la variable $last.

Jaap Eldering
la source
L'exemple ne fonctionne pas. J'ai trouvé la réponse de @Sid Steward pour mieux travailler.
Reado
14

Pour améliorer davantage la réponse de @derdering, pdftk version 1.45 et versions ultérieures ont les moyens de référencer les pages dans l'ordre inverse en ajoutant la lettre minuscule r au numéro de page. La dernière page d'un PDF est r1, l'avant-dernière page est r2, etc.

Par exemple, l'appel pdftk unique:

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

supprimera la page finale de input.pdf - l'entrée doit être d'au moins deux pages.

Pour extraire uniquement la dernière page d'un PDF afin de tester sa taille de fichier, exécutez:

pdftk input.pdf cat r1 output final_page.pdf

Pdftk est disponible sur Linux. De nombreuses distributions ont un binaire que vous pouvez installer. Vous devez cependant vous assurer qu'il s'agit de la version 1.45 ou ultérieure. Sinon, vous pouvez construire pdftk à partir du code source.

Sid Steward
la source
la chose rN est exactement ce dont j'avais besoin, car mon système de génération de pdf à base de latex produisait toujours des pages vides au début et presque à la fin du document, j'ai dû les supprimer manuellement à la fin. Maintenant, j'appelle simplement: pdftk A = pocket20.pdf cat A3-r6 r3-end output pocket_to_print.pdf qui supprime les deux premières et les 4e, 5e dernières pages.
Martin T.31
1

pdfinfo vous donnera la taille du fichier pdf réel, et pdfimages vous donnera un index des images dans ledit fichier pdf. Vous pouvez donc écrire un script sous la forme

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

qui devrait retourner si un fichier particulier a une image dans la dernière page. Si c'est le cas, vous pouvez faire toute manipulation que vous devez faire.

thanosk
la source
0

Voici une solution utilisant pdfjam au lieu de pdftk:

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

Où le premier argument est le fichier à rogner et le second argument le nombre de pages à rogner (par défaut à 1).

Alex
la source
0

Une solution à un revêtement serait d'utiliser findavec pdftk:

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

REMARQUE : les fichiers recadrés sont stockés dans cet exemple dans un sous-répertoire appelé cutpour conserver le nom de fichier d'origine car pdftkne permet pas d'écraser les fichiers d'entrée.

Yan Foto
la source