Herramienta de línea de comando para recortar archivos PDF

101

Estoy buscando una herramienta de línea de comandos de código abierto para recortar archivos PDF, tal como podemos hacer en Adobe Acrobat Pro. He probado PdfTk, ImageMagick, PyPDF y GhostScript, todo sin éxito hasta ahora.

Rakesh
fuente
¿Puede describir qué tipo de recorte puede hacer con Adobe Acrobat pro? Porque no lo tengo y, por lo tanto, no puedo decir lo que estás buscando.
xubuntix
En Adobe Acrobat Pro podemos usar los controles de margen para recortar el PDF. podemos proporcionar los valores para la parte superior, inferior, derecha e izquierda para recortar
Rakesh

Respuestas:

124

Te sugiero que eches un vistazo a PDFcrop .

Si desea recortar un pdf con márgenes izquierdo, superior, derecho e inferior de 5, 10, 20 y 30 puntos (puntos), ejecute

pdfcrop --margins '5 10 20 30' input.pdf output.pdf

en terminal. Para recortar algo, use valores negativos en el argumento para recortar. Por ejemplo,

pdfcrop --margins '-50 -50 -50 -50' input.pdf output.pdf

recorta 50 pts desde la izquierda, arriba, derecha, abajo (en este orden).

Si ejecuta solo el comando pdfcrop input, generará un archivo titulado input-crop.pdf con cero márgenes. Esto me resulta muy útil cuando incluyo ilustraciones en pdf en documentos.

Recortar múltiples archivos

Desafortunadamente, pdfcrop no puede recortar varios archivos a la vez. Sin embargo, es fácil escribir un script que recorte todos los archivos PDF en la carpeta en la que se encuentra el script.

Cree un nuevo archivo vacío y llámelo something.sh. Ábralo con un editor de texto e inserte lo siguiente:

#!/bin/bash
for FILE in ./*.pdf; do
  pdfcrop "${FILE}"
done

Guárdelo y cierre. Luego haga clic derecho en el archivo, vaya a Propiedades> Permisos y marque el campo Permitir ejecutar el archivo como programa . Ahora cierra el diálogo. Ejecute el script haciendo doble clic en él y eligiendo Ejecutar en la Terminal . Y ahora se imprimirá en la carpeta la nueva versión recortada de margen cero de todos los archivos PDF con sufijo-recorte . Si desea márgenes u otras cosas, por supuesto, simplemente puede abrir el script y agregar argumentos después pdfcrop.

Rasmus
fuente
Tenga en cuenta que en lugar de especificar márgenes negativos, también se puede usar --bbox "<left> <bottom> <right> <top>". Esto permite utilizar el enfoque para determinar el área de cultivo que se describe en mi respuesta a continuación .
bluenote10
¿Existe la posibilidad de decir el número de página (que debe recortarse)?
LK
Me temo que es todo o nada. pdfcrop --helpenumera las opciones disponibles. No puedo ver nada allí que permita especificar un rango de páginas.
Rasmus
77
Al comparar el tamaño de la salida de PDFCrop con su entrada, parece que pdfcrop solo modifica los cuadros delimitadores. No elimina datos. Por lo tanto, este enfoque no sería adecuado para reducir el tamaño del pdf u ocultar información.
init_js
¡Como un encanto! ¡incluso con los márgenes que necesitaba el pdf!
jojo
36

Gracias por Rasmus, puede instalar pdfcrop desde el paquete texlive-extra-utils:

sudo apt-get install texlive-extra-utils

Luego recorte los archivos pdf usando el comando de recorte pdf como:

pdfcrop input.pdf output.pdf

utilizar --helppara ver parámetros más sorprendentes como--margins

pdfcrop --margins 5 input.pdf output.pdf

que recortar pdf con 5 pb de cada lado de la página

sarigalina
fuente
1
La medida es bp, que es ligeramente diferente de pt. Ver tex.stackexchange.com/questions/8260/… .
koppor
2
Para mí, pdfcrop infló el tamaño del archivo de 300x (de 7MB a 2GB). Tuve que hacer gs -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS="/ebook" -sOutputFile=output2.pdf output.pdfdespués, lo que solucionó el tamaño del archivo.
fiktor
17

También puede recortar archivos PDF simplemente usando Ghostscript. He escrito un pequeño script para simplificar el proceso (inspirado en esta respuesta ):

#!/bin/bash

if [ $# -lt 5 ]
then
  echo "Usage: `basename $0` <pdf-file> <x_min> <x_max> <y_min> <y_max>"
  echo "Notes:"
  echo " - all coordinates are absolute; no calculation of width/height necessary"
  echo " - use 'gv' to determine the coordinates"
  exit 65
fi

file="$1"
xmin="$2"
xmax="$3"
ymin="$4"
ymax="$5"

base="${file%.*}"
outfile="${base}_cropped.pdf"

echo "writing to: $outfile"

gs \
  -o $outfile \
  -sDEVICE=pdfwrite \
  -c "[/CropBox [$xmin $ymin $xmax $ymax] /PAGES pdfmark" \
  -f $file

Para determinar las coordenadas para el recorte, utilizo gv, que imprime las coordenadas del cursor del mouse usando las mismas unidades que Ghostscript. Por ejemplo, aquí determino las coordenadas mínimas para x / y (los valores en la esquina superior izquierda):

crop1

Ahora las coordenadas máximas:

crop2

Y finalmente, ejecuto el script pdf_crop_by_coordinates.sh test.pdf 45 429 38 419produciendo un test_cropped.pdfque se ve así:

resultado

Sin embargo, no tengo idea de cómo se compara la solución Ghostscript pdfcropen términos de calidad y corrección.

bluenote10
fuente
15

Cuando no puedo hacer algo con pdftk, el siguiente lugar al que recurro es PDFjam , que es un contenedor de línea de comandos para el paquete pdfpages LaTeX (por lo tanto, también necesita eso y una distribución TeX instalada). Para obtener ayuda sobre cómo usarlo, recomiendo la pantalla de ayuda regular:

pdfjam --help

como la página de manual es escasa y la página web se concentra en ejemplos.

Para recortar un PDF, el comando que necesita es algo como esto:

pdfjam --keepinfo --trim "10mm 15mm 10mm 15mm" --clip true --suffix "cropped" input.pdf

Esto generará un archivo llamado input-cropped.pdf. El orden de los ajustes debe ser dejado, abajo, derecha, arriba, de acuerdo \includegraphicsa graphicx .

Para dar una idea de cómo se compara con PDFcrop, recientemente tuve que recortar un PDF bastante elegante. Mi original era de 675 kB, mi versión recortada a través de PDFjam tenía 1,2 MB, mientras que una versión recortada a través de PDFcrop tenía 4,5 MB. Mientras que PDFjam y PDFcrop eliminaron los hipervínculos y marcadores incrustados, PDFjam con la --keepinfoopción conservaba las propiedades del documento (por ejemplo, título, autor, asunto).

Alex Ball
fuente
1
Nota: esto realmente no elimina el contenido que queda fuera de la pantalla del PDF, solo lo oculta. Igual a lo que @init_js comenta en la respuesta mejor calificada.
Jan Żankowski
3

Esto puede ayudarte.
Esto está de acuerdo con la versión más nueva de Ubuntu y la vida. Este es el editor de PDF maestro . Puedes usarlo recortar, agregar algunas cosas, etc.

Ejemplo:
Esto es antes de Esto es antes Esto es después de ctrl + k ingrese la descripción de la imagen aquí

Shamina
fuente
3

Briss no es una línea de comando, pero vale la pena echarle un vistazo.

weberjn
fuente
2

Podrías usar un script pypdf desde esta página . Pero en la respuesta a esta pregunta de stackexchange , parece que también hay muchas opciones.

xubuntix
fuente
No puedo obtener cuáles son los parámetros izquierdo superior derecho inferior. son puntos, pulgadas, centímetros?
Rakesh
@Rakesh: Vea mi respuesta para obtener una explicación de los parámetros y cómo determinarlos fácilmente.
bluenote10
2

El programa pdfCropMargins es una aplicación de línea de comandos para recortar automáticamente los márgenes de los archivos PDF.

Este programa depende del programa Ghostscript o del programa pdftoppm que se está instalando (y localizable) en el sistema. Y analice las imágenes de la página con PIL para encontrar cuadros delimitadores, utilizando el umbral 191.

instalar usando

pip install pdfCropMargins

Ejecutar usando

pdf-crop-margins -v -s -u your-file.pdf

Por ayuda

pdf-crop-margins -h | más

CharmiChokshi
fuente