1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208
|
#! /bin/bash
##
## pdf90: A shell program to rotate all pages of PDF files
##
## Author David Firth (http://www.warwick.ac.uk/go/dfirth)
##
version=1.20
echo "This is pdf90 version ""$version"
##
## Relies on pdflatex and the 'pdfpages' package (version 0.2e
## or later).
##
#######################################################################
## CONFIGURATION: change this block as necessary
##
## THESE SETTINGS WILL BE OVER-RIDDEN by any found at
## /etc/pdfnup.conf
## /usr/share/etc/pdfnup.conf
## /usr/local/share/pdfnup.conf
## /usr/local/etc/pdfnup.conf
## ~/.pdfnup.conf
## (which are read in that order)
##
## First say where your "pdflatex" program lives:
##
pdflatex="/usr/bin/pdflatex"
#pdflatex="pdflatex.exe" ## this for Windows computers
##
## Next a permitted location for temporary files on your system:
##
tempfileDir="/var/tmp" ## /var/tmp is standard on most unix systems
#tempfileDir="C:/tmp" ## use something like this under Windows
##
## Now specify the default settings for pdf90:
##
tidy=true ## delete all temporary files immediately
##
## END OF CONFIGURATION
#######################################################################
##
## Read the configuration file(s) if such exist:
##
for d in /etc /usr/share/etc /usr/local/share /usr/local/etc
do if test -f $d/pdfnup.conf; then
echo "Reading site configuration from $d/pdfnup.conf"
source $d/pdfnup.conf
fi
done
if test -f ~/.pdfnup.conf; then
echo "Reading user defaults from ~/.pdfnup.conf";
source ~/.pdfnup.conf;
fi
#######################################################################
##
## Define the output of "pdf90 --help"
##
helptext="
Usage: pdf90 args
where args must include source pdf filename(s) and optionally also
* a specific name for the output file, e.g. --outfile myrotatedfile.pdf
* one of --tidy true
--tidy false
according to whether or not temporary files should be deleted immediately.
If --tidy false is used, such files are left in $tempfileDir.
Default arguments for you at this site are
--tidy $tidy
For information and version history see http://www.warwick.ac.uk/go/pdfjam
"
##
## Check that necessary LaTeX packages are installed
##
PATH=`dirname "$pdflatex"`:$PATH
export PATH
case `kpsewhich pdfpages.sty` in
"") echo "pdf90: pdfpages.sty not installed"; exit 1;;
esac
case `kpsewhich eso-pic.sty` in
"") echo \
"pdf90: eso-pic.sty not installed (see the pdfpages manual)"
exit 1;;
esac
case `kpsewhich everyshi.sty` in
"") echo \
"pdf90: everyshi.sty not installed (see the pdfpages manual)"
exit 1;;
esac
##
## Now do the argument loop...
##
sourcePath=
outFile=
inFiles=0
newline='
'
while test -n "${1}"; do
case "${1}" in
*.pdf|*.PDF) inFiles=`expr $inFiles + 1`;
sourcePath="$sourcePath$newline${1}";;
--help) echo "$helptext";
exit 0;;
--outfile) outFile="${2}"
case "$outFile" in
*".pdf");;
*) echo "pdf90: outfile name must end in .pdf";
exit 1;;
esac
shift;;
--tidy) tidy="${2}"
shift;;
*) echo "pdf90: unrecognised argument ${1}"; exit 1;;
esac
shift
done
if test $inFiles -gt 1 ; then
if test "$outFile" != "" ; then
echo "pdf90: --outfile cannot be used with multiple input files";
echo "pdf90: no files processed"
exit 1;
fi
fi
case "$sourcePath" in
"") echo "pdf90: no pdf source file specified
For information on usage try \"pdf90 --help\""; exit 1;;
esac
OIFS=IFS
IFS="$newline"
for k in $sourcePath
do
if test -f "$k"; then :;
else echo "pdf90: ""$k"" does not exist, no files were processed";
exit 1;
fi
done
##
## That's the arguments done.
##
##
## Now work on the input file (or files in turn)
##
pwd=`pwd | sed 's/ /\\ /'`
counter=0
for inFile in $sourcePath
do
counter=`expr $counter + 1`
echo "Processing $inFile..."
cd "$pwd"
pdfName=`basename "$inFile"`
sourceDir=`dirname "$inFile"` ; cd "$sourceDir" ; sourceDir=`pwd`
sourceFullPath="$sourceDir"/"$pdfName"
cd "$pwd"
case "$outFile" in
"") ## no --outfile argument supplied
outfileNameRoot=`echo "$pdfName" | sed 's/\.pdf$//i'`-rotated;
outfileDir="$sourceDir";
outFile="$outfileNameRoot"".pdf";;
*) ## --outfile argument was supplied
outfileNameRoot=`basename "$outFile" | sed 's/\.pdf$//i';`
outfileDir=`dirname "$outFile"` ;
cd "$outfileDir" ;
outfileDir=`pwd` ;;
esac
case "$outfileDir"/"$outfileNameRoot"".pdf" in
$sourceFullPath) echo "pdf90: outfile and source cannot be the same";
exit 1;;
//"$outfileNameRoot"".pdf") outfileDir="";; ## in case of output
esac ## to the root directory!
##
## Now edit the temporary LaTeX input file
##
uniqueName="$RANDOM$RANDOM$RANDOM"-"$counter"
ln -s "$sourceFullPath" "$tempfileDir"/"$uniqueName"source.pdf
texFile="$tempfileDir"/"$uniqueName".tex
msgFile="$tempfileDir"/"$uniqueName".msgs
(sed s*pdfname*"$tempfileDir"/"$uniqueName"source.pdf* <<EndTemplate
\documentclass{article}
\usepackage{pdfpages}
\begin{document}
\includepdf[pages=-,fitpaper=true,angle=90]{pdfname}
\end{document}
EndTemplate
) | sed 's/^[^b]egin/\\begin/' > $texFile
echo " Temporary LaTeX file for this job is ""$texFile"
##
## Now run pdflatex and tidy up
##
echo " Calling pdflatex..."
cd "$tempfileDir"
"$pdflatex" --interaction batchmode "$texFile" > "$msgFile"
if test -f "$tempfileDir"/"$uniqueName"".aux";
## ie if LaTeX didn't choke
then if cp "$tempfileDir"/"$uniqueName".pdf \
"$outfileDir"/"$outfileNameRoot"".pdf"
then echo " Finished: output is"\
"$outfileDir"/"$outfileNameRoot"".pdf"
fi
case "$tidy" in
true) rm "$tempfileDir"/"$uniqueName"* ;;
esac
outFile=""
else echo " Failed: output file not written"
fi
done
IFS=OIFS
|