¿Cómo extraer y / o eliminar la última página de un montón de archivos PDF?

14

Uno de nuestros proveedores comenzó a agregar una imagen innecesariamente grande a la última página de archivos PDF que recibimos de ellos. Necesito recortar esto. Sin embargo, tenemos cientos de estos, por lo que es prohibitivo ingresar manualmente. ¿Cuáles son las mejores formas de extraer y luego eliminar (preferiblemente primero una, luego la otra; todavía necesito confirmar a través del tamaño del archivo que no estoy eliminando una que no tiene la imagen) la última página de un PDF automáticamente? El sistema operativo es Linux.

Puedo extraerlo usando ghostscript, con algo similar, gs -dFirstPage=5 -dLastPage=5pero necesito automatizar esto, no puedo pasar y averiguar manualmente cuál es el número de la última página.

¿Algunas ideas?

Editar: para aclarar, simplemente quiero dividir / eliminar la última página. No es la imagen que contiene, elimine el último período de la página.

Andrés
fuente
1
Mire pdftk, estoy seguro de que se puede hacer que funcione en general para este tipo de tarea.
Daniel Andersson
Posible duplicado: Unix: convertir PDF a imagen
ahilsend
2
No remotamente un duplicado de eso.
Andrew
Sin embargo, creo que debería aclararlo: no estoy interesado en eliminar una imagen en la última página. Estoy interesado en eliminar la última página, punto.
Andrew
1
Pregunta relacionada con múltiples respuestas diferentes en Ask Ubuntu: askubuntu.com/questions/221962/…
TuringTux

Respuestas:

2

Como ya comentó @Daniel Andersson, esto se puede hacer fácilmente con pdftk:

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

Sin embargo, no sé si se puede hacer con una llamada a pdftk ...

Editar : puede combinarlo con la respuesta y el uso de thanosk (en bash):

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

cuando ya extrajo la última página a la variable $last.

Jaap Eldering
fuente
El ejemplo no funciona. Encontré la respuesta de @Sid Steward para trabajar mejor.
Reado
14

Para mejorar aún más la respuesta de @eldering, pdftk versión 1.45 y posteriores tienen los medios para hacer referencia a las páginas en orden inverso al anteponer la letra minúscula r al número de página. La página final de un PDF es r1, la penúltima página es r2, etc.

Por ejemplo, la única llamada pdftk:

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

eliminará la página final de input.pdf: la entrada debe tener al menos dos páginas.

Para extraer solo la página final de un PDF para probar su tamaño de archivo, ejecute:

pdftk input.pdf cat r1 output final_page.pdf

Pdftk está disponible en Linux. Muchas distribuciones tienen un binario que puedes instalar. Sin embargo, debe asegurarse de que sea la versión 1.45 o posterior. Si no, puede compilar pdftk desde el código fuente.

Sid Steward
fuente
la cosa rN es exactamente lo que necesitaba, porque mi sistema de generación de PDF basado en látex siempre producía algunas páginas vacías al principio y casi al final del documento, tuve que eliminarlas manualmente al final. Ahora solo llamo: pdftk A = pocket20.pdf cat A3-r6 r3-end output pocket_to_print.pdf que elimina las dos primeras y la cuarta, quinta últimas páginas.
Martin T.
1

pdfinfo le dará el tamaño del archivo pdf real, y pdfimages le dará un índice de las imágenes en dicho archivo pdf. Para que pueda escribir un guión en el formulario

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

eso debería volver si un archivo en particular tiene una imagen en la última página. Si es así, puede hacer cualquier manipulación que necesite hacer.

gracias
fuente
0

Aquí hay una solución usando pdfjam en lugar de pdftk:

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

Donde el primer argumento es el archivo a recortar y el segundo argumento la cantidad de páginas a recortar (el valor predeterminado es 1).

Alex
fuente
0

Una solución de una línea sería usar findjunto con pdftk:

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

NOTA : los archivos recortados se almacenan en este ejemplo en un subdirectorio llamado cutpara mantener el nombre de archivo original, ya pdftkque no permite sobrescribir archivos de entrada.

Yan Foto
fuente