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.
When I can't do something with pdftk, the next place I turn is PDFjam, which is a command-line wrapper for the pdfpages LaTeX package (hence you also need that and a TeX distro installed). For help on how to use it, I recommend the regular help screen:
pdfjam --help
as the man page is sparse and the Web page concentrates on examples.
To crop a PDF, the command you need is something like this:
pdfjam --keepinfo --trim "10mm 15mm 10mm 15mm" --clip true --suffix "cropped" input.pdf
This will output a file called input-cropped.pdf
. The order of the trims should be left, bottom, right, top, as per \includegraphics
from graphicx.
To give an idea of how it compares with PDFcrop, I had cause to crop a quite fancy PDF recently. My original was 675 kB, my cropped version via PDFjam was 1.2 MB, while a version cropped via PDFcrop was 4.5 MB. While both PDFjam and PDFcrop stripped out the embedded hyperlinks and bookmarks, PDFjam with the --keepinfo
option preserved the document properties (e.g. title, author, subject).
Briss is not command line, but worth a look at.