Command line tool to crop PDF files
I would suggest you take a look at PDFcrop.
If you wish to crop a pdf with left, top, right and bottom margins of 5, 10, 20, and 30 pt (points), then run
pdfcrop --margins '5 10 20 30' input.pdf output.pdf
in terminal. To actually crop something away, use negative values in the argument for crop. For example,
pdfcrop --margins '-50 -50 -50 -50' input.pdf output.pdf
crops 50 pts from the left, top, right, bottom (in this order).
If you run only the command pdfcrop input
, it will output a file titled input-crop.pdf with zero margins. I find this very handy when including pdf illustrations in documents.
Cropping multiple files
Unfortunately, pdfcrop cannot crop multiple files at the time. It is however easy to write a script that will crop all pdfs in the folder the script is located in.
Create a new empty file, and call it something.sh
. Open it with a text editor and insert the following:
#!/bin/bash
for FILE in ./*.pdf; do
pdfcrop "${FILE}"
done
Save it, and close. Then right click the file, go to Properties > Permissions and check the field Allow executing file as program. Now close the dialog. Run the script by double clicking it and choosing Run in Terminal. And new, zero-margin cropped version of all pdfs with suffix -crop will now be printed in the folder. If you want margins or other things, you can of course just open the script and add arguments after pdfcrop
.
Thanks for Rasmus, you can install pdfcrop from texlive-extra-utils package:
sudo apt-get install texlive-extra-utils
Then crop pdf files using pdf crop command as:
pdfcrop input.pdf output.pdf
use --help
to see more amazing parameters like --margins
pdfcrop --margins 5 input.pdf output.pdf
which crop pdf with 5 bp from each side of page
You can also crop PDF files simply using Ghostscript. I have written a small script to simplify the process (inspired by this answer):
#!/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
In order to determine the coordinates for cropping, I use gv
, which prints the coordinates of the mouse cursor using the same units as Ghostscript. For example, here I determine the minimum coordinates for x/y (the values in the upper left corner):
Now the maximum coordinates:
And finally, I run the script pdf_crop_by_coordinates.sh test.pdf 45 429 38 419
producing a test_cropped.pdf
which looks like that:
I have no idea though, how the Ghostscript solution compares to pdfcrop
in terms of quality and correctness.