Take the 2-minute tour ×
Ask Ubuntu is a question and answer site for Ubuntu users and developers. It's 100% free.

I am looking for an open source command line tool to crop PDF file just like we can do in Adobe Acrobat Pro. I have tried PdfTk, ImageMagick, PyPDF, and GhostScript—all with no success so far.

share|improve this question
    
Can you please describe what kind of cropping you can do with Adobe Acrobat pro? Because I do not have it and can therefore not tell what you are looking for. –  xubuntix Apr 24 '12 at 8:50
    
In Adobe Acrobat Pro we can use the margin controls to crop the PDF. we can provide the value's for the top, bottom, right and left to crop –  Rakesh Apr 24 '12 at 8:56

6 Answers 6

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.

share|improve this answer
    
Note that instead of specifying negative margins, one can also use --bbox "<left> <bottom> <right> <top>". This allows to use the approach to determine the crop area described in my answer below. –  bluenote10 Mar 3 at 16:22

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 pt from each side of page

share|improve this answer

You could use a pypdf script from this page. But in the answer to this stackexchange question, there seem to be many options as well.

share|improve this answer
    
I am not able to get what the left top right bottom parameters are. are they points, inches, centimeters ? –  Rakesh Apr 24 '12 at 11:00
    
@Rakesh: See my answer for an explanation of the parameters and how to determine them easily. –  bluenote10 Mar 3 at 13:12

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):

crop1

Now the maximum coordinates:

crop2

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:

result

I have no idea though, how the Ghostscript solution compares to pdfcrop in terms of quality and correctness.

share|improve this answer

someone mentioned pdfcrop. It doesn't work for all PDFs. In fact, it doesn't work for most of the PDF books I have. The result is usually either uncut at all, or cut only the left margin. They may need some time to fix their bugs.

I wonder why folks in pdftk project did not add this to their arsenal. It seems so nature a need to them.

Although I also would love to use a commandline tool, the best available tools I tried are both GUI.

first is briss, at http://briss.sf.net which works fine with my openjdk-7 on Ubuntu.

the other is a Windows software: a-pdf http://www.a-pdf.com/page-crop/ and if you endeavor to try run it on WINE. It is more expensive, but has a lot more features - the ability to split books scanned with facing 2-pages is my favourite.

share|improve this answer
    
The first part of your answer is critique to another post and the remainder is GUI tools for which the OP isn't asking for. It may be useful in other questions, though. –  gertvdijk Jul 20 '13 at 12:04
    
In the pdfcrop commands, you do not specify how much to remove, but how much margin to leave up to the first non-empty area of the page. Hence it can be a little hard to use on "dirty" scanned e-book pages. –  Rasmus Mar 5 at 11:46

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).

share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.