File: pdfjoin

package info (click to toggle)
pdfjam 1.20-2
  • links: PTS
  • area: main
  • in suites: etch, etch-m68k, lenny
  • size: 196 kB
  • ctags: 9
  • sloc: sh: 596; makefile: 47
file content (247 lines) | stat: -rwxr-xr-x 7,710 bytes parent folder | download
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
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
#! /bin/bash
##
##  pdfjoin: A shell program to concatenate PDF pages into one file
##
##  Author David Firth (http://www.warwick.ac.uk/go/dfirth)
##
version=1.20
echo "This is pdfjoin 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 pdfjoin:
##
paper=a4paper   ## alternatives are other LaTeX paper sizes 
orient=portrait
fitpaper=true          ## output page size matches input
turn=true              ## landscape pages are landscape-oriented
noautoscale=false      ## scale logical pages to fit  
offset="0 0"           ## output centred on physical page
trim="0 0 0 0"         ## don't trim the logical pages
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 "pdfjoin --help"
##
helptext="
Usage: pdfjoin args
where args must include source pdf filenames and optionally also
* a LaTeX papersize, for example --paper a4paper
                                 --paper letterpaper
* the output page orientation, one of --orient landscape
                                      --orient portrait
* one of --fitpaper true
         --fitpaper false
  to specify whether output page sizes and orientations should match
  those of the input pages.  Use of --fitpaper true overrides --orient.
* a page-trimming specification such as
         --trim \"1cm 1cm 1cm 1cm\"
  (Note that trimming does not mix well with --frame true.)
* an \"offset\" specification such as
         --offset \"1cm 0.5cm\"
  to offset the position of output pages (see the pdfpages manual)
* one of --turn true
         --turn false
  according to whether or not landscape pages should be displayed in
  landscape orientation
* one of --noautoscale true
         --noautoscale false
  for scaling of logical pages to fit (or not)
* a specific name for the output file, e.g. --outfile mybigfile.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
   --paper $paper --trim \"$trim\" --offset \"$offset\" --turn $turn --noautoscale $noautoscale --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 "pdfjoin: pdfpages.sty not installed"; exit 1;;
esac
case `kpsewhich eso-pic.sty` in
	"") echo \
	    "pdfjoin: eso-pic.sty not installed (see the pdfpages manual)"
	    exit 1;;
esac
case `kpsewhich everyshi.sty` in
	"") echo \
	    "pdfjoin: 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 "pdfjoin: outfile name must end in .pdf"; 
  	           	   exit 1;;
  	           esac
  	           shift;;
  	--paper) paper="${2}"
  	         shift;;
  	--orient) orient="${2}"
  	          shift;;
  	--fitpaper) fitpaper="${2}"
  	          shift;;
  	--trim) trim="${2}"
  	          shift;;
  	--offset) offset="${2}"
  	          shift;;
  	--turn) turn="${2}"
  	          shift;;
  	--noautoscale) noautoscale="${2}"
  	          shift;;
  	--tidy) tidy="${2}"
  	          shift;;
  	*) echo "pdfjoin: unrecognised argument ${1}"; exit 1;;
  esac
  shift
done
case "$sourcePath" in
  "") echo "pdfjoin: no pdf source file specified
For information on usage try \"pdfjoin --help\""; exit 1;;
esac
OIFS=IFS
IFS="$newline"
for k in $sourcePath
do
  if test -f "$k"; then :; 
    else echo "pdfjoin: ""$k"" does not exist, no files were processed"; 
    exit 1;
  fi
done
##
##  That's the arguments done.
##
##
##  Now work on the input files
##
pwd=`pwd | sed 's/ /\\ /'`
sourceFullPath=""
for inFile in $sourcePath
do
  pdfName=`basename "$inFile"`
  sourceDir=`dirname "$inFile"` ; cd "$sourceDir" ; sourceDir=`pwd`
  sourceFullPath=$sourceFullPath$newline"$sourceDir"/"$pdfName"
  cd "$pwd"
done
case "$outFile" in
	  "") ## no --outfile argument supplied
	      outfileNameRoot=`echo "$pdfName" | sed 's/\.pdf$//i'`-joined;
	      outfileDir="$sourceDir";
	      outFile="$outfileNameRoot"".pdf";;
	   *) ## --outfile argument was supplied
	      outfileNameRoot=`basename "$outFile" | sed 's/\.pdf$//i';`
	      outfileDir=`dirname "$outFile"` ; 
	      cd "$outfileDir" ; 
	      outfileDir=`pwd` ;;
esac
##
##  Now set up the temporary LaTeX input file
##
uniqueName="$RANDOM$RANDOM$RANDOM"
i=0
linkedSources=""
for k in $sourceFullPath
do
  i=`expr $i + 1`
  ln -s "$k" "$tempfileDir"/"$uniqueName"source$i.pdf
  linkedSources=$linkedSources$newline"$tempfileDir"/"$uniqueName"source$i.pdf
done
texFile="$tempfileDir"/"$uniqueName".tex
msgFile="$tempfileDir"/"$uniqueName".msgs
mytemp=`cat <<EndTemplate
\documentclass[papersize,orientation]{article}
\usepackage{pdfpages}
\begin{document}
EndTemplate
`
IFS=OIFS
mytemp2=`echo $linkedSources | grep 'pdf' \
    | sed 's/^/\\\\includepdf[pages=-,fitpaper=,trim=,offset=,turn=,noautoscale=]{/' | sed 's/$/}/'`
echo $mytemp$newline$mytemp2$newline\\end{document} \
    | sed 's/^[^b]egin/\\begin/' \
    | sed s/orientation/"$orient"/ \
    | sed s/fitpaper=/fitpaper="$fitpaper"/ \
    | sed s/trim=/trim="$trim"/ \
    | sed s/turn=/turn="$turn"/ \
    | sed s/offset=/offset="$offset"/ \
    | sed s/noautoscale=/noautoscale="$noautoscale"/ \
    | sed s/papersize/"$paper"/ > $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
  else echo "  Failed: output file not written"
fi