Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Lossless rotation of PDF files with imagemagick

I want to rotate a 351K PDF named 08-file.pdf using CLI tools. I've tried imagemagick:

convert 08-file.pdf -rotate 90 08-file-rotated.pdf

But the original quality:

enter image description here

Suffered serious degradation:

enter image description here

I've tried adding the -density 300x300 argument, but the outcome was a 2.5M file, nearly one order of magnitude larger than the original, which is a huge waste.

Any idea how to losslessly rotate a PDF file using imagemagick?

like image 543
Adam Matan Avatar asked Jul 09 '16 11:07

Adam Matan


2 Answers

I always had bad results in converting/altering pdf file with imagemagik/convert (bad resolution, or huge file). Playing with options -compress -density -quality was always frustrating and a waste of time (but i am no expert).

Proposal 1: pdftk

So I would recommend pdftk (you may need to install it via apt-get install)

Try :

pdftk  08-file.pdf cat 1-endright output 08-file-rotated.pdf

For old version of pdftk (v<3) rotation was indicated only by one letter: N: 0, E: 90, S: 180, W: 270, L: -90, R: +90, D: +180. The same command was:

pdftk  08-file.pdf cat 1-endR output 08-file-rotated.pdf

From another post on this site, I have a brief an explanation of the syntax

pdftk input.pdf cat 1-endsouth output output.pdf
#     \_______/     \___/\___/        \________/
#     input file    range  |          output file
#                         direction

You can see also https://linux.die.net/man/1/pdftk

Edit 2020:

Proposal 2: qpdf

I have found another alternative which is equivalent: qpdf, easier to remember and more powerful

see QPDF manual

#Syntax (you can rotate only some pages of the document -- see the manual --
qpdf --rotate=[+|-]angle[:page-range]

# Example
qpdf in.pdf out.pdf --rotate=+180

Other options worth to consider

pdfjam

PDF manipulation tools (CLI) To be considered if pdftk is not available on your system.

pdfjam looks quite similar to pdftk

pdfsam

This is a toolbox to modify pdf files with a GUI (graphical user interface).

Code is open source and multiplateform.

enter image description here

like image 116
kFly Avatar answered Oct 08 '22 11:10

kFly


Please use -compress lossless option:

convert -rotate 90 -compress lossless 08-file.pdf 08-file-rotated.pdf

From the documentation: https://www.imagemagick.org/script/command-line-options.php#compress

Lossless refers to lossless JPEG, which is only available if the JPEG library has been patched to support it.

Another option is to use the following command:

jhead -cmd "jpegtran -progressive -perfect -rotate 270 &i > &o" Image-0001.jpeg

It will write output to a temporary file and when it succeeds it will overwrite the original file:

Cmd:jpegtran -progressive -perfect -rotate 270 "Image-0001.jpeg" > "h1xQ6q"

Modified: Image-0001.jpeg

like image 43
Jirka Avatar answered Oct 08 '22 11:10

Jirka