Sometimes you need to scan a book page by page resulting a scanned PDF document. Usually you start with the first (odd) page then you turn your book and scan the other (even) page. Or you may start in reverse order, it doesn't matter. You will continue the process until the desired book's pages are all scanned.
The result will be a PDF document where the odd pages are rotated well and the even pages are rotated upside down. Or it might be exactly inversely.
Depending on the PDF reader application you might use you might be able to rotate a page or not but reading a 400-pages document by rotating every other page is a pain in the ass. That is the moment when you decide to do something about it. The solution is to rotate the even pages in the same order like the odd pages.
How to rotate even odd scanned PDF pages in Linux
In Linux we have many tools available freely which helps us to do this job (that's the difference between Linux and Windows). We are going to use the pdftk tool. Depending on your Linux distro the pdftk may be already installed or not. If it's not then please search your Linux package manager for a package named "pdftk".
In Gentoo it is called "app-text/pdftk" so it can be installed like:
emerge pdftk
In Ubuntu/Debian it is called "pdftk" so it can be installed like:
apt-get install pdftk
There are hundreds Linux distro out there so please consult your Linux distro manual about how to install a package.
Anyway, once the pdftk is installed we just have to use it. If you want to learn more about its options then please check out its Linux manual.
To automate a bit the process a wrote a BASH script (pdf-rotate) that accepts some useful arguments (like input-output documents, start-end page, rotation angle for odd-even pages, etc) and simplifies the task making it as simple as shooting a fish in a barrel:
Usage: pdf-rotate input.pdf start_page end_page direction_odd direction_even output.pdf The page rotation setting can cause pdftk to rotate pages and documents. Each option sets the page rotation as follows (in degrees): N: 0, E: 90, S: 180, W: 270, L: -90, R: +90, D: +180. L, R, and D make relative adjustments to a page's rotation
The script code
#/bin/bash # Script for rotating all even pages of a document # Author : Eugen Mihailescu # Contact : eugenmihailescux at gmail dot com # Website : mynixworld.info APP=$(basename $0) # enough arguments? if [ $# -ne 6 ]; then echo echo 1>&2 "Usage: $APP input.pdf start_page end_page direction_odd direction_even output.pdf" echo echo 1>&2 "The page rotation setting can cause pdftk to rotate pages and documents." echo 1>&2 "Each option sets the page rotation as follows (in degrees):" echo 1>&2 "N: 0, E: 90, S: 180, W: 270, L: -90, R: +90, D: +180." echo 1>&2 "L, R, and D make relative adjustments to a page's rotation" echo exit 127 fi function get_rotation { local _result=$2 local myresult case $1 in N) myresult="north" ;; S) myresult="south" ;; E) myresult="east" ;; W) myresult="west" ;; L) myresult="left" ;; R) myresult="right" ;; D) myresult="down" ;; *) echo "Unknown rotation mode $1" exit ;; esac eval $_result="'$myresult'" } get_rotation $4 odd_dir get_rotation $5 even_dir # generate a temporary directory TEMPDIR=/tmp/pdf`date +%N` mkdir $TEMPDIR # rotate all even pages, keep the odd ones ODD=0 EVEN=0 pdftk $1 cat $2-$3odd$odd_dir output $TEMPDIR/odd.pdf #2>/dev/null if [ $? -eq 0 ];then ODD=1 fi pdftk $1 cat $2-$3even$even_dir output $TEMPDIR/even.pdf #2>/dev/null if [ $? -eq 0 ];then EVEN=1 fi # split the files... if [ $ODD -eq 1 ];then pdftk $TEMPDIR/odd.pdf burst output $TEMPDIR/pg%04d_A.pdf fi if [ $EVEN -eq 1 ];then pdftk $TEMPDIR/even.pdf burst output $TEMPDIR/pg%04d_B.pdf fi # ... and recombine them, "_A" and "_B" suffixes leading to the correct order pdftk $TEMPDIR/pg*.pdf cat output $6 # cleanup rm -r $TEMPDIR if [ -f $6 ];then echo "SUCCESS: PDF file created at $6" else echo "ERROR: No PDF file created. See previous error(s)" fi
Usage example 1:
We want to rotate the input document "my-book.pdf" (which has 125 pages) such that the odd pages are rotated 180 degrees (because they are rotated upside down) and the even pages are rotated zero degrees (we don't want to touch them, they are OK as they are). By using my script mentioned above this task is accomplished as following:
pdf-rotate my-book.pdf 1 125 D N my-book-fixed.pdf
Usage example 2:
We want to accomplish the same task like in the Example 1 above with the mention that only the pages within tge page 25-80 rage must be fixed, the others do no require any rotation. So we are going to rotate the start_page=25 to end_page=80 like in the Example 1 resulting a new document called my-book-25-80.pdf. By doing so we missed the pages within the 1-24 and 81-125 ranges. So the task becomes a bit more complicated:
- extract the pages within the 1-24 range unchanged (no rotation required)
- extract the pages within the 25-80 range rotated as necessary
- extract the pages within the 81-125 range unchanged (no rotation required)
- concatenate these 3 PDF files into a single PDF document
These steps are accomplished with only 4 commands at your Linux terminal:
pdf-rotate my-book.pdf 1 24 N N file1.pdf # no rotation required pdf-rotate my-book.pdf 25 80 D N file2.pdf # rotate only the odd pages pdf-rotate my-book.pdf 81 125 N N file3.pdf # no rotation required pdftk file1.pdf file2.pdf file3.pdf cat output my-book-fixed.pdf # combine all PDFs into our final PDF
How to rotate even odd scanned PDF pages in Windows
There is a PDFtk for Windows available freely. Just try to use the logic above with that program although I think there might be some limitations.
Now, if you think that this article was interesting don't forget to rate it. It shows me that you care and thus I will continue write about these things.
Eugen Mihailescu
Latest posts by Eugen Mihailescu (see all)
- Dual monitor setup in Xfce - January 9, 2019
- Gentoo AMD Ryzen stabilizator - April 29, 2018
- Symfony Compile Error Failed opening required Proxies - January 22, 2018