summaryrefslogtreecommitdiff
path: root/support/pdfjam
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2023-06-28 03:01:13 +0000
committerNorbert Preining <norbert@preining.info>2023-06-28 03:01:13 +0000
commitb5165768775a2cbc0577b7f8c532cc33d301c28f (patch)
treecbd889d0de6f6224cb5485c03afde29a2f5eaf89 /support/pdfjam
parenta0b68c12d9e67182560eb31f202f3e86f0e4a5de (diff)
CTAN sync 202306280301
Diffstat (limited to 'support/pdfjam')
-rw-r--r--support/pdfjam/README.md249
-rw-r--r--support/pdfjam/VERSION2
-rwxr-xr-xsupport/pdfjam/bin/pdfjam104
-rwxr-xr-xsupport/pdfjam/bin/pdfjam.orig1171
4 files changed, 45 insertions, 1481 deletions
diff --git a/support/pdfjam/README.md b/support/pdfjam/README.md
index cf7b248d49..f73a854348 100644
--- a/support/pdfjam/README.md
+++ b/support/pdfjam/README.md
@@ -1,4 +1,4 @@
-[![](https://travis-ci.com/rrthomas/pdfjam.svg?branch=master)](https://travis-ci.com/rrthomas/pdfjam)
+![GitHub CI](https://github.com/rrthomas/pdfjam/actions/workflows/ci.yml/badge.svg)
# pdfjam
_Reuben Thomas_ <https://rrt.sc3d.org/>
@@ -43,11 +43,14 @@ It seems that it will work also on Windows computers with a suitable
installation of [Cygwin](http://www.cygwin.com) (with TeX Live
installed), but this has not been thoroughly tested.
-An alternative set of PDF manipulation tools, which are java-based, is
-provided by the [Multivalent](http://multivalent.sourceforge.net) project.
-Yet another alternative set of tools is [PDFsam](https://pdfsam.org).
-Those alternatives do much the same things as `pdfjam`, and maybe
-quite a bit more too.
+Alternatives to `pdfjam` which are widely packaged in GNU/Linux distributions and other free software collections include:
+
+* [PDFtk](https://www.pdflabs.com/tools/pdftk-the-pdf-toolkit/) (Java-based)
+* [PDFsam](https://pdfsam.org) (Java-based)
+* [PSPDFUtils](https://pypi.org/project/pspdfutils/) (Python-based, also supports PostScript files)
+
+Those alternatives do many of the same things as `pdfjam`, and maybe
+quite a bit more too.
The **pdfjam** software is made available free, under GPL version 2 (see the
file named `COPYING` that is included with the package).
@@ -90,12 +93,12 @@ For those scripts and for more information on them, please now see
- A working, up-to-date installation of LaTeX (including at least one of
`pdflatex`, `lualatex` or `xelatex`)
- A working installation of the LaTeX package
- [**pdfpages**](http://www.ctan.org/tex-archive/macros/latex/contrib/pdfpages)
+ [**pdfpages**](https://www.ctan.org/tex-archive/macros/latex/contrib/pdfpages)
(version 0.4f or later)
-- Some of the options offered by `pdfjam` also require the LaTeX packages
- [**geometry**](http://www.ctan.org/tex-archive/macros/latex/contrib/geometry)
- and
- [**hyperref**](http://www.ctan.org/tex-archive/macros/latex/contrib/hyperref).
+ and
+[**geometry**](https://www.ctan.org/tex-archive/macros/latex/contrib/geometry).
+
+With [libpaper](https://github.com/rrthomas/libpaper) version 2 or later installed, `pdfjam` will be able to find your default paper size, which you can configure if desired.
For some years now, **pdfjam** has been included in the _TeX Live_ distribution,
which includes all the necessary programs and packages to make `pdfjam` run smoothly.
@@ -399,12 +402,7 @@ Please report any bugs found in `pdfjam`, either
within pipelines.
- The `--preamble` option can sometimes clash with other elements of the LaTeX
preamble. Some specific things to watch out for:
- + If the preamble needs to set further options to the _geometry_ package,
- when the _geometry_ package has already been loaded in order to
- set a special page size, be sure to use the `\geometry{}` command for that.
- + If the preamble needs to set options to the _hyperref_ package, when
- the _hyperref_ package has already been loaded in order to specify PDF
- document information, be sure to use the `\hypersetup{}` command for that.
+ + If the preamble needs to set further options to the _geometry_ package, be sure to use the `\geometry{}` command for that.
+ If options to the _color_ package are to be specified in the preamble,
do not at the same time use the `--pagecolor` option to `pdfjam`.
@@ -478,220 +476,3 @@ who knows? The wrapper scripts (**no longer maintained**) can now be found at
----------
_Older releases are still available at <https://davidfirth.github.io/pdfjam>._
-
-**2.09** [never released]:
-
-- The default behaviour of `pdfbook` is reverted to its pre-2.06 state,
- because `--booklet true` seems to be problematic for some users.
-
-**2.08** [2010-11-14]:
-
-- Fixed a bug in one of the tests.
-
-**2.07** [2010-11-13]:
-
-- Two other common graphics formats (JPG and PNG) are now explicitly
- allowed as input files (i.e., not only PDF files are allowed as inputs).
-
-**2.06** [2010-05-11]:
-
-- Changed the `pdfbook` script to include `--booklet true` as the
- default behaviour (thanks to Julien Bossert for this good suggestion).
-
-**2.05** [2010-04-25]:
-
-- Changes to the `pdfbook` script [the `--right-edge-binding` option is
- now redundant, and there's a new `--short-edge` option for binding along the
- short edge of pages instead of the long edge (thanks to Marco Pessotto for this).
-- The `--preamble` option to `pdfjam` is enhanced, to allow multiple instances
- which get concatenated.
-- Also various minor corrections to man pages.
-
-**2.04** [2010-04-22]:
-
-- Various minor improvements suggested by Debian maintainers
- (thanks to Eduard Bloch for these). The main things are:
- + addition of the `--version` option;
- + liberalisation of `pdfjam` to allow files in _JPEG_ format to be
- specified as input, as well as PDF;
- + tidying of the man files;
- + and more use of `exec`, to avoid forking.
-
-**2.03** [2010-04-20]:
-
-- Fixed a bug which caused problems when your `/bin/sh` is the _zsh_ shell.
-- Fixed a bug which prevented the correct representation of many UTF-8 characters
- in `pdfinfo` data.
-
-**2.02** [2010-04-14]:
-
-- More progress on portability.
-- Introduced the beginnings of a suite of tests.
-- Iimprovements in the `--keepinfo` functionality, and in the treatment of
- file permissions (thanks to Marco Pessotto for these).
-
-**2.01** [2010-04-13]:
-
-- Fixed a silly bug (thoughtless use of "`test -a`" in a couple of places)
- which seriously affected portability.
-
----------------------------------------------------------------
-
-**2.00** [2010-03-14]: **a major re-design**
-
-This is not completely backward-compatible with previous versions of the
-`pdfnup`, `pdfjoin` and `pdf90` scripts.
-The differences in interface are few, though, and the main ones are
-listed below.
-
-- The new script `pdfjam` now does all the work; all the other scripts
- included with the package are just simple wrappers for `pdfjam`.
-- New `pdfjam` makes available essentially _all_ of the facilities of the
- pdfpages package (without having to know what they are).
-- Various security and portability issues have been resolved.
- (None of the scripts now calls for `/bin/bash`; and the handling of
- temporary files is now much safer.)
-- `pdfjam` can take PDF input from `/dev/stdin`, and send output to
- `/dev/stdout`. (This allows `pdfjam` to be used in a pipeline.)
-- If the `--outfile` option specifies a relative path, that path is now
- relative to the _current working directory_ (as is normally expected of
- unix utilities). **This is different behaviour from previous versions.**
-- With multiple input files, `pdfjam` offers two distinct methods of processing.
- **This is different behaviour from previous versions.**
- 1. The default is to take pages as specified from the input files, and
- combine them into a single document.
- 2. If the `--batch` option is used, `pdfjam` operates _separately_ on the
- input files, producing one output file per input file.
-- Page selection is available separately for each input file. A
- **difference from previous versions** is that the `--pages` keyword is no
- longer used.
-- `pdfjam` uses the `\includepdfmerge` command from _pdfpages_, as a result
- of which all pages in an output file have the same size and orientation.
- **This is different behaviour from previous versions.**
-- Output page orientation is now controlled by using `--landscape` (negated,
- if necessary, by `--no-landscape`). The previous `--orient` option is no
- longer used, and in particular "`--orient auto`" is no longer available.
- **This is different behaviour from previous versions.**
-- Other new features include:
- + `--keepinfo` option, to allow preservation of PDF document information,
- if the `pdfinfo` utility and the LaTeX `hyperref` package are
- available (thanks to Robert Wenner for suggesting this);
- + `--pdftitle`, `--pdfauthor`, `--pdfsubject` and `--pdfkeywords`
- options, to specify new PDF document information
- (these require the LaTeX `hyperref` package);
- + many more "named" output page sizes are available if the LaTeX
- `geometry` package is installed (the full list of allowed paper
- specifications is: `a0paper, a1paper, a2paper, a3paper, a4paper,
- a5paper, a6paper b0paper, b1paper, b2paper, b3paper, b4paper,
- b5paper, b6paper letterpaper, executivepaper, legalpaper`;
- thanks to Corné Verbruggen and Mel Irizarry for suggesting this) and
- non-standard page sizes can also be defined;
- + `--checkfiles` option to request that input files be checked using the
- `file` utility, rather than requiring the file name to end in
- "`.pdf`" or "`.PDF`";
- + `--twoside` option, to allow the LaTeX _twoside_ class option to be
- specified (thanks to Johannes Reinhard for suggesting this);
- + `--pagecolor` option, to allow the background colour of output pages
- to be changed (thanks to James Fisher for suggesting this);
- + `--vanilla` option to run `pdfjam` without reading site-wide or user
- configuration files.
-- In addition, various reported bugs have been fixed — many thanks to all
- those kind people who reported them.
-
----------------------------------------------------------------
-
-**1.21** [2009-01-19]:
-
-- Bug fixes, including security issues (many thanks to Eduard Bloch,
- Robert Buchholz and Martin Vaeth for helpful reports on vulnerabilities and
- for kindly contributing patches).
-- The scripts now call for `/bin/bash` as interpreter.
-- Availability of `mktemp` is now also assumed.
-- The Mac OS X droplets now look for `pdflatex` at (by default)
- `/usr/texbin/pdflatex`
-
-**1.20** [2005-01-25]
-
-- Added minimal man pages.
-- Added extra possible locations for the site-wide configuration file.
-
-**1.11** [2004-10-13]:
-
-- Added the `--scale` option to `pdfnup`, which allows page margins either to
- be enlarged (e.g,. `--scale 0.9`) or reduced (e.g,. `--scale 1.1`) by
- scaling the page contents. By popular request!
-
-**1.10** [2004-06-24]:
-
-- Output files now appear by default in same directory as input, rather than in
- the current working directory; fixed a bug that caused the scripts not to work
- on some versions of Solaris (thanks to Daniel Gebhart); major improvements to
- the Mac OS X sample droplets.
-
-**1.03** [2004-05-09]:
-
-- Minor changes towards POSIX compliance.
-
-**1.02** [2004-05-08]:
-
-- Added a COPYING file to the package.
-
-**1.00** [2004-05-07]:
-
-- Package re-named PDFjam.
-
-**0.99a** [2004-05-06]:
-
-- A minor change to the output of `pdfnup --help` and `pdfjoin --help`
-
-**0.99** [2004-05-05]:
-
-- Various improvements to `pdfnup`, including the handling of multiple PDF
-input files. Added `pdfjoin` and `pdf90`.
-
-**0.97** [2004-04-23]:
-
-- Corrections to the output of `pdfnup --help`.
-
-**0.96** [2004-02-12]:
-
-- Minor changes to comments in the `pdfnup` script.
-
-**0.95** [2004-01-28]:
-
-- Added the possibility of site-specific and user-specific configuration
- files (thanks to Jason Lewis for suggesting this).
-
-**0.9** [2004-01-28]:
-
-- Added `--openright` (thanks to Jason Lewis for suggesting this).
-
-**0.8** [2003-09-12]:
-
-- Added `pdfnup --help` facility (thanks to Wilfrid Kendall for this suggestion).
-
-**0.7** [2003-01-26]:
-
-- Paths involving spaces now permitted.
-- Page trimming added (thanks to Alex Montgomery for suggesting that).
-- Default output filename now has a dash inserted before the "nup" label
- (as in ` wasteful-2x2.pdf `).
-- Sample Mac OS X droplets provided.
-
-**0.6** [2002-08-22]:
-
-- Use of paths involving spaces now reports an error.
-
-**0.5** [2002-06-24]:
-
-- Fixed a bug which caused incompatibility with some types of unix.
-
-**0.4** [2002-04-30]:
-
-- Better error trapping, improved portability.
-
-**0.3** [2002-04-04]:
-
-- First public release of `pdfnup`.
-
-
diff --git a/support/pdfjam/VERSION b/support/pdfjam/VERSION
index 3971ff16f1..90718a7cc1 100644
--- a/support/pdfjam/VERSION
+++ b/support/pdfjam/VERSION
@@ -1 +1 @@
-This is pdfjam 3.04 \ No newline at end of file
+This is pdfjam 3.05 \ No newline at end of file
diff --git a/support/pdfjam/bin/pdfjam b/support/pdfjam/bin/pdfjam
index e98aed1ab5..d470e52bc0 100755
--- a/support/pdfjam/bin/pdfjam
+++ b/support/pdfjam/bin/pdfjam
@@ -1,5 +1,5 @@
#!/bin/sh
-version=3.04
+version=3.05
#########################################################################
## ##
## pdfjam: A shell-script interface to the "pdfpages" LaTeX package ##
@@ -152,15 +152,14 @@ where
--paper PAPERSPEC (or simply --PAPERSPEC)
Specify a LaTeX paper size, for example
'--paper a4paper' or simply '--a4paper' for ISO A4 paper.
- If the LaTeX 'geometry' package is installed, a wider range
- of paper sizes is available. For details see documentation
+ A wide range of paper sizes is available thanks to the
+ LaTeX 'geometry' package. For details see documentation
for LaTeX and/or the 'geometry' package.
[Default for you at this site: paper=$paper]
--papersize '{WIDTH,HEIGHT}'
Specify a custom paper size, e.g.,
--papersize '{10in,18cm}'
(Note the braces, and the comma!)
- If the 'geometry' package is not found, this has no effect.
--pagecolor RGBSPEC
Specify a background colour for the output pages. The
RGBSPEC must be a comma-separated trio of integers
@@ -413,22 +412,19 @@ suffix='pdfjam' ## Default filename suffix to be used when
##
preamble='' ## Default LaTeX preamble string.
##
-## Guess default paper size from locale if possible, otherwise A4
-##
-if command -v locale >/dev/null ; then
- paperheight=$(locale -k LC_PAPER | sed -e '1!d' -e 's/.*=//') ;
- case $paperheight in
- 297)
- paper='a4paper' ;
- ;;
- 279)
- paper='letterpaper' ;
- ;;
- *)
- paper='a4paper' ;
- ;;
- esac
-else paper='a4paper' ; ## fallback paper size is ISO A4
+## Get default paper size from libpaper >= 2 if possible, otherwise guess A4
+##
+if command -v paper >/dev/null ; then
+ paperspec=$(paper)
+ paperdimensions=$(echo "$paperspec" | cut -f 2 -d " ")
+ paperunit=$(echo "$paperspec" | cut -f 3 -d " ")
+ if test "$paperunit" = "pt"; then paperunit=bp; fi
+ paperwidth=$(echo "$paperdimensions" | cut -f 1 -d "x")
+ paperheight=$(echo "$paperdimensions" | cut -f 2 -d "x")
+ papersize="papersize={$paperheight$paperunit,$paperwidth$paperunit}"
+ paper='' ## We might not have a LaTeX-compatible name
+else
+ paper='a4paper' ## fallback paper size is ISO A4
fi
##
## END OF SETTINGS MADE DIRECTLY WITHIN THE SCRIPT
@@ -670,31 +666,22 @@ while test -n "${1}${2}"; do
pagecolor="${2}" ;
callOptions="$callOptions ${1} ${2}" ;
shift ;;
- --a4paper | --a5paper | --b5paper | --letterpaper | \
- --executivepaper | --legalpaper)
- ## standard LaTeX paper sizes
+ --a0paper | --a1paper | --a2paper | --a3paper | \
+ --a4paper | --a5paper | --a6paper | \
+ --b0paper | --b1paper | --b2paper | \
+ --b3paper | --b4paper | --b5paper | --b6paper | \
+ --c0paper | --c1paper | --c2paper | \
+ --c3paper | --c4paper | --c5paper | --c6paper | \
+ --b0j | --b1j | --b2j | --b3j | --b4j | --b5j | --b6j | \
+ --ansiapaper | --ansibpaper | --ansicpaper | \
+ --ansidpaper | --ansiepaper | \
+ --letterpaper | --legalpaper | --executivepaper)
paper=$(printf "%s" "${1}" | sed 's/^--//') ;
callOptions="$callOptions ${1}" ;
;;
- --a0paper | --a1paper | --a2paper | --a3paper | \
- --a6paper | --b0paper | --b1paper | --b2paper | \
- --b3paper | --b4paper | --b6paper)
- ## the 'geometry' package is needed
- if test "$geometry" != false ;
- then
- paper=$(printf "%s" "${1}" | sed 's/^--//') ;
- callOptions="$callOptions ${1}" ;
- geometry=true ;
- fi ;
- ;;
--papersize)
- ## the 'geometry' package is needed
- if test "$geometry" != false ;
- then
- papersize="papersize=${2}" ;
- callOptions="$callOptions ${1} '${2}'" ;
- geometry=true ;
- fi ;
+ papersize="papersize=${2}" ;
+ callOptions="$callOptions ${1} '${2}'" ;
shift ;;
--landscape)
landscape=true ;
@@ -859,20 +846,6 @@ case $shortedge in
*)
shortedge='\usepackage{everyshi}\makeatletter\EveryShipout{\ifodd\c@page\pdfpageattr{/Rotate 180}\fi}\makeatother' ;;
esac
-if test "$geometry" != false
-then
-## we haven't already found that geometry.sty is missing
- case $paper in
- a0paper | a1paper | a2paper | a3paper | \
- a6paper | b0paper | b1paper | b2paper | \
- b3paper | b4paper | b6paper)
- ## the 'geometry' package is needed
- geometry=true ;
- ;;
- *)
- ;;
- esac
-fi
documentOptions="$paper","$orientation","$twoside"
documentOptions=$(printf "%s" "$documentOptions" | sed 's/^,//' | sed 's/,$//')
##
@@ -913,25 +886,12 @@ then
"LaTeX package pdfpages.sty is not installed" \
$E_UNAVAILABLE
- for pack in pdflscape eso-pic everyshi atbegshi ; do
+ for pack in geometry pdflscape eso-pic everyshi atbegshi ; do
(kpsewhich $pack.sty >/dev/null) ||
error_exit \
"LaTeX package $pack.sty is not installed (see the pdfpages manual)" \
$E_UNAVAILABLE
done
- if test "$geometry" = true
- ## ie, if the 'geometry' package is needed for paper size
- then
- (kpsewhich geometry.sty >/dev/null) || {
- prattle "LaTeX package geometry.sty is not installed, so only the"
- prattle "standard LaTeX paper sizes are available." 1
- geometry=false
- if test "$batch" = true
- then
- export geometry ## for use in any secondary calls
- fi
- }
- fi
fi
if test "$keepinfo" = true
then
@@ -1269,12 +1229,6 @@ fi
\usepackage{pdfpages}
EndTemplate
) > "$texFile"
-if test -z "$geometry" ; then geometry=false ; fi
-if test "$geometry" = false; then ## geometry package is not to be used
- cp "$texFile" "$tempFile"
- sed '/\\\usepackage.*{geometry}/d' "$tempFile" > "$texFile"
- rm "$tempFile"
-fi
if test -z "$pagecolor"; then ## color package is not needed
cp "$texFile" "$tempFile"
sed '/\\\usepackage.*{color}/d' "$tempFile" > "$texFile"
diff --git a/support/pdfjam/bin/pdfjam.orig b/support/pdfjam/bin/pdfjam.orig
deleted file mode 100755
index 97d93eee52..0000000000
--- a/support/pdfjam/bin/pdfjam.orig
+++ /dev/null
@@ -1,1171 +0,0 @@
-#!/bin/sh
-version=N.NN
-#########################################################################
-## ##
-## pdfjam: A shell-script interface to the "pdfpages" LaTeX package ##
-## ------ ##
-## ##
-## Author: David Firth (http://warwick.ac.uk/dfirth) ##
-## ##
-## Usage: see https://github.com/rrthomas/pdfjam ##
-## or "pdfjam --help" ##
-## ##
-## Relies on: ##
-## -- pdflatex (or xelatex or lualatex) ##
-## -- the 'pdfpages' package for LaTeX (ideally version >= 0.4f) ##
-## ##
-## License: GPL version 2 or later. This software comes with ##
-## ABSOLUTELY NO WARRANTY of fitness for any purpose at all; if you ##
-## do not accept that, then you must not use it. ##
-## ##
-## The path searched for site-wide configuration files can be set ##
-## by editing the following variable: ##
-## ##
- configpath='/etc:/usr/share/etc:/usr/local/share:/usr/local/etc' ##
-## ##
-## Nothing else in this file should need to be changed. ##
-## ##
-#########################################################################
-##
-## HELP TEXT
-##
-## Defines the output of 'pdfjam --help'
-##
-helptext="
-insert contents of pdfjam-help.txt here
-"
-##
-## END OF HELP TEXT
-##
-#########################################################################
-##
-## PRELIMINARIES
-##
-## First determine:
-## --- whether verbose commentary should be provided (not if --quiet
-# or --configpath was specified);
-## --- whether this call to pdfjam is a "batch" call;
-## --- whether just the help text is required;
-## --- or whether all configuration files should be ignored.
-##
-verbose=true
-for arg
-do
- case $arg in
- --quiet | -q | --configpath)
- verbose=false ;
- ;;
- --version | -V)
- echo "$version"
- exit 0 ;
- ;;
- --batch)
- batch=true ;
- ;;
- --help | -u | -h)
- printf "%s\n" "$helptext" ;
- exit 0 ;
- ;;
- --vanilla)
- vanilla=true ;
- ;;
- *)
- ;;
- esac
-done
-##
-## Check to see whether this is a "secondary" call to pdfjam:
-##
-if test -z "$PDFJAM_CALL_NUMBER" ## not a secondary call
-then
- PDFJAM_CALL_NUMBER=0
-fi
-##
-## Keep a copy of the internal file separator, so we can change it safely
-##
-OIFS="$IFS"
-##
-## Record the full filename of the current working diractory
-##
-pwd=$(pwd)
-##
-## Trap interrupts so that they kill everything:
-##
-trap 'IFS=$OIFS; exit 1' 1 2 15
-##
-## The following will be useful for readability of the script:
-##
-newline='
-'
-##
-## Define a function to escape tricky characters in file names etc:
-##
-escape_chars () {
- (printf "%s" "${1}" | sed 's/[^a-zA-Z0-9._/\-]/\\&/g')
-}
-##
-## Define a function to output verbose comments:
-##
-prattle () { ## second argument here is non-null for continuation lines
- if test $verbose = true; then
- prefix1=" pdfjam:" ;
- prefix2=$(printf "%s" "$prefix1" | sed 's/pdfjam:/ /') ;
- indent="" ;
- if test "$PDFJAM_CALL_NUMBER" -gt 0 &&
- test "$batch" != true
- then
- indent=" "
- fi
- IFS="$newline" ;
- lineCounter=0 ;
- for line in ${1}
- do
- lineCounter=$((lineCounter + 1)) ;
- if test $lineCounter -eq 1 && test ! -n "${2}" ;
- then
- if test -w "$PDFJAM_MESSAGES_FILE"
- then printf "$prefix1$indent %s\n" "$line" >> \
- "$PDFJAM_MESSAGES_FILE"
- else messages="$messages$prefix1$indent $line$newline"
- ## msg file not made yet
- fi
- else
- if test -w "$PDFJAM_MESSAGES_FILE"
- then printf "$prefix2$indent %s\n" "$line" >> \
- "$PDFJAM_MESSAGES_FILE"
- else messages="$messages$prefix2$indent $line$newline"
- ## msg file not made yet
- fi
- fi ;
- done ;
- IFS="$OIFS" ;
- fi ;
- return ;
-}
-##
-## And here's the first piece of verbose commentary:
-##
-prattle "----" 1
-prattle "This is pdfjam version ${version}."
-##
-#########################################################################
-##
-## CONFIGURATION
-##
-## THESE SETTINGS WILL BE OVER-RIDDEN by any found in configuration
-## files. By default such files are found at any or all of
-## /etc/pdfjam.conf
-## /usr/share/etc/pdfjam.conf
-## /usr/local/share/pdfjam.conf
-## /usr/local/etc/pdfjam.conf
-## $HOME/.pdfjam.conf
-## (And they are read in that order; if a setting is made more than
-## once, the last instance prevails.)
-##
-## An example configuration file can be found at
-## https://github.com/rrthomas/pdfjam
-##
-## The path searched for site-wide configuration files can be changed
-## by editing the variable 'configpath' at the top of this file.
-##
-##
-## First get the full path (if it exists) to pdflatex:
-##
-latex=$(command -v pdflatex)
-if [ -z "$latex" ] ; then latex="not found" ; fi
-##
-## Likewise for the pdfinfo and iconv (only needed for `--keepinfo'):
-##
-pdfinfo=$(command -v pdfinfo)
-if [ -z "$pdfinfo" ] ; then pdfinfo="not found"; fi
-iconv=$(command -v iconv)
-if [ -z "$iconv" ] ; then iconv="not found"; fi
-##
-##
-## Next a permitted location for temporary files on your system:
-##
-tempfileDir='/var/tmp' ## /var/tmp is standard on most unix systems
-##
-##
-## Default for the output file location:
-##
-outFile="$pwd" ## Output to the current working directory
-##
-##
-## A few more default settings for pdfjam:
-##
-shortedge='true' ## Default paper is rotated shortedge when doing book
-##
-runs=1 ## Run latex just once
-##
-tidy='true' ## Delete all temporary files at the end
-##
-keepinfo='false' ## Don't try to preserve "pdfinfo" data
-##
-checkfiles='false' ## Don't use the Unix 'file -Lb' utility to
-## identify PDF files from their contents;
-## rely on the .pdf or .PDF extension instead.
-##
-suffix='pdfjam' ## Default filename suffix to be used when
-## --outfile is either (a) a directory, or (b)
-## not specified in a --batch call.
-##
-preamble='' ## Default LaTeX preamble string.
-##
-## Guess default paper size from locale if possible, otherwise A4
-##
-if command -v locale >/dev/null ; then
- paperheight=$(locale -k LC_PAPER | sed -e '1!d' -e 's/.*=//') ;
- case $paperheight in
- 297)
- paper='a4paper' ;
- ;;
- 279)
- paper='letterpaper' ;
- ;;
- *)
- paper='a4paper' ;
- ;;
- esac
-else paper='a4paper' ; ## fallback paper size is ISO A4
-fi
-##
-## END OF SETTINGS MADE DIRECTLY WITHIN THE SCRIPT
-##
-## Now read the site's or user's configuration file(s) if such exist,
-## unless '--vanilla' was specified.
-##
-if test "$vanilla" != true
-then
- if test "$PDFJAM_CALL_NUMBER" = 0 ## not a secondary call to pdfjam
- then
- configFiles=$(printf "%s" "$configpath" | \
- sed 's/:/\/pdfjam.conf:/g; s/$/\/pdfjam.conf/')
- configFiles="${configFiles}:$HOME/.pdfjam.conf"
- PDFJAM_CONFIG=""
- prattle "Reading any site-wide or user-specific defaults..."
- IFS=':'
- for d in $configFiles
- do
- if test -f "$d"; then
- change=$(sed '/^ *#.*/d ; s/ *#.*//; s/^ *//' "$d")
- comment="## ${newline}## From ${d}: ${newline}##"
- PDFJAM_CONFIG="$PDFJAM_CONFIG$comment$newline$change$newline"
- fi
- done
- IFS="$OIFS"
- PDFJAM_CONFIG=$(printf "%s" "$PDFJAM_CONFIG" | sed 's/^/ /')
- if test "$batch" = true ; then export PDFJAM_CONFIG ; fi
- if test -z "$PDFJAM_CONFIG"
- then
- prattle "(none found)" 1
- else
- prattle "$PDFJAM_CONFIG" 1
- fi
- fi
- if test -n "$PDFJAM_CONFIG" ; then eval "$PDFJAM_CONFIG" ; fi
-else
- if test $PDFJAM_CALL_NUMBER -eq 0
- then
- prattle "Called with '--vanilla': no user or site configuration"
- prattle "files will be read." 1
- fi
-fi
-## For backwards compatibility, check here for a $pdflatex setting in the config file
-if [ -n "${pdflatex:-}" ] ; then latex="$pdflatex" ; fi
-##
-## END OF CONFIGURATION BLOCK
-##
-#########################################################################
-##
-## ERROR CODES
-##
-E_USAGE=64 # command line usage error
-E_NOINPUT=66 # cannot open input
-E_UNAVAILABLE=69 # service unavailable
-E_SOFTWARE=70 # internal software error
-E_OSFILE=72 # file does not exist or cannot be opened
-E_CANTCREATE=73 # can't create (user) output file
-E_CONFIG=78 # configuration error
-##
-## Define a function to print an error message and exit:
-##
-error_exit () {
- if [ -r "$PDFJAM_MESSAGES_FILE" ]
- then cat "$PDFJAM_MESSAGES_FILE" >&2
- else printf "%s" "$messages" 1>&2
- fi
- printf " pdfjam ERROR: %s\n" "$1" 1>&2 ;
- exit "$2" ;
-}
-##
-#########################################################################
-##
-## READ AND PROCESS THE ARGUMENTS
-##
-## In case of NO argument supplied, mention 'pdfjam --help':
-##
-if test $# -eq 0
-then
- prattle "No arguments supplied; continuing anyway. (See"
- prattle "'pdfjam --help' for information on usage.)" 1
-fi
-##
-## Now do the argument loop.
-##
-fileSpec=""
-miscOptions=""
-callOptions=""
-optionsFinished=""
-##
-## First note any '--checkfiles' or '--no-checkfiles' option
-##
-for arg
-do
- case $arg in
- --checkfiles)
- checkfiles=true ;
- callOptions="$callOptions --checkfiles" ;
- ;;
- --no-checkfiles)
- checkfiles=false ;
- callOptions="$callOptions --no-checkfiles" ;
- ;;
- esac
-done
-while test -n "${1}${2}"; do
- argUnmatched=""
- if test "$optionsFinished" != true
- then
- case ${1} in
- --) ## signals end of command-line options
- optionsFinished=true ;
- shift ;
- continue ;
- ;;
- --configpath)
- printf "%s\n" "$configpath" ;
- exit 0;;
- --* | -q | -o)
- if test "$pageSpecAwaited" = true ; then
- ## fill in any missing page specs before continuing
- fileSpec=$(printf "%s" "$fileSpec" | sed 's/|awaited/|-/g')
- pageSpecAwaited=false
- fi
- case ${1} in
- --latex)
- latex="${2}" ;
- callOptions="$callOptions --latex ${2}" ;
- shift ;;
- --batch)
- batch=true ;
- ;;
- --vanilla)
- callOptions="$callOptions ${1}" ;
- ;;
- --quiet | -q)
- verbose=false ;
- callOptions="$callOptions ${1}" ;
- ;;
- --outfile | -o)
- outFile="${2}" ;
- if test "$batch" = true
- then
- outFile=$(escape_chars "$outFile")
- fi
- callOptions="$callOptions --outfile $outFile" ;
- shift ;;
- --suffix)
- if test -n "${2}"
- then
- suffix="${2}" ;
- if test "$batch" = true
- then
- suffix=$(escape_chars "$suffix")
- fi
- callOptions="$callOptions --suffix $suffix"
- shift
- else
- error_exit \
- "'--suffix' string has zero length" \
- $E_USAGE ;
- fi
- ;;
- --runs)
- runs="${2}" ;
- ## check if the argument is a number > 0
- if [ "$runs" -lt 1 ] 2> /dev/null; then
- error_exit \
- "'--runs' number must be at least 1" \
- $E_USAGE ;
- fi
- callOptions="$callOptions --runs ${2}" ;
- shift ;;
- --tidy)
- tidy=true ;
- callOptions="$callOptions --tidy" ;
- ;;
- --no-tidy)
- tidy=false ;
- callOptions="$callOptions --no-tidy" ;
- ;;
- --shortedge)
- shortedge=true ;
- callOptions="$callOptions --shortedge" ;
- ;;
- --longedge)
- shortedge=false ;
- callOptions="$callOptions --longedge" ;
- ;;
- --keepinfo)
- keepinfo=true ;
- callOptions="$callOptions --keepinfo" ;
- ;;
- --no-keepinfo)
- keepinfo=false ;
- callOptions="$callOptions --no-keepinfo" ;
- ;;
- --checkfiles)
- ;; ## already done above
- --no-checkfiles)
- ;; ## already done above
- --pdftitle)
- pdfTitle="${2}" ;
- if test "$batch" = true
- then
- pdfTitle=$(escape_chars "$pdfTitle")
- fi
- callOptions="$callOptions --pdftitle $pdfTitle" ;
- shift ;;
- --pdfauthor)
- pdfAuthor="${2}" ;
- if test "$batch" = true
- then
- pdfAuthor=$(escape_chars "$pdfAuthor")
- fi
- callOptions="$callOptions --pdfauthor $pdfAuthor" ;
- shift ;;
- --pdfsubject)
- pdfSubject="${2}" ;
- if test "$batch" = true
- then
- pdfSubject=$(escape_chars "$pdfSubject")
- fi
- callOptions="$callOptions --pdfsubject $pdfSubject" ;
- shift ;;
- --pdfkeywords)
- pdfKeywords="${2}" ;
- if test "$batch" = true
- then
- pdfKeywords=$(escape_chars "$pdfKeywords")
- fi
- callOptions="$callOptions --pdfkeywords $pdfKeywords" ;
- shift ;;
- --paper)
- paper="${2}"
- callOptions="$callOptions ${1} ${2}" ;
- shift ;;
- --pagecolor)
- pagecolor="${2}" ;
- callOptions="$callOptions ${1} ${2}" ;
- shift ;;
- --a4paper | --a5paper | --b5paper | --letterpaper | \
- --executivepaper | --legalpaper)
- ## standard LaTeX paper sizes
- paper=$(printf "%s" "${1}" | sed 's/^--//') ;
- callOptions="$callOptions ${1}" ;
- ;;
- --a0paper | --a1paper | --a2paper | --a3paper | \
- --a6paper | --b0paper | --b1paper | --b2paper | \
- --b3paper | --b4paper | --b6paper)
- ## the 'geometry' package is needed
- if test "$geometry" != false ;
- then
- paper=$(printf "%s" "${1}" | sed 's/^--//') ;
- callOptions="$callOptions ${1}" ;
- geometry=true ;
- fi ;
- ;;
- --papersize)
- ## the 'geometry' package is needed
- if test "$geometry" != false ;
- then
- papersize="papersize=${2}" ;
- callOptions="$callOptions ${1} '${2}'" ;
- geometry=true ;
- fi ;
- shift ;;
- --landscape)
- landscape=true ;
- callOptions="$callOptions --landscape" ;
- ;;
- --no-landscape)
- landscape=false ;
- callOptions="$callOptions --no-landscape" ;
- ;;
- --twoside)
- twoside=true ;
- callOptions="$callOptions --twoside" ;
- ;;
- --no-twoside)
- twoside=false ;
- callOptions="$callOptions --no-twoside" ;
- ;;
- --preamble)
- preamble="$preamble${2}" ;
- shift ;;
- --enc) # command line encoding
- enc="${2}"
- callOptions="$callOptions ${1} ${2}"
- shift ;;
- --*)
- ## options for \includepdfmerge
- argName=$(printf "%s" "${1}" | sed 's/^--//');
- value="${2}"
- miscOptions=$miscOptions,"$argName=$value" ;
- ## saved for possible use in LaTeX file
- callOptions="$callOptions ${1} '$value'" ;
- ## saved for possible use in a further call to pdfjam
- shift ;
- ;;
- esac ;;
- '' | *)
- argUnmatched=true
- ;;
- esac
- fi
- if test "$optionsFinished" = true || test "$argUnmatched" = true
- then
- case ${1} in
- "" | /dev/stdin)
- fileSpec="${fileSpec}${newline}/dev/stdin|awaited"
- pageSpecAwaited=true
- inputFromStdin=true ;;
- -)
- if test "$pageSpecAwaited" = true ; then
- fileSpec=$(printf "%s" "$fileSpec" | \
- sed 's/|awaited/|-/g')
- pageSpecAwaited=false
- else
- error_exit "no PDF/JPG/PNG file found at ${1}" \
- $E_NOINPUT
- fi ;;
- *) ## All other args should be PDF (or JPG/PNG)
- ## source files and page selections; if not, we'll quit
- if test "$checkfiles" = true ; ## not always available
- then
- case $(file -Lb "${1}") in
- "PDF document"*|"JPEG image data"*|"PNG image"*)
- ## it's a PDF file (or JPG/PNG) as expected
- fileSpec="$fileSpec${newline}${1}|awaited"
- pageSpecAwaited=true
- ;;
- *)
- case ${1} in
- *.[pP][dD][fF] | *.[jJ][pP][eE][gG] | \
- *.[jJ][pP][gG] | *.[pP][nN][gG])
- ## should be PDF/JPG/PNG file, but isn't
- error_exit "no PDF/JPG/PNG file found at ${1}" \
- $E_NOINPUT
- ;;
- *) ## if page spec needed, assume this is it;
- ## otherwise something is wrong
- if test "$pageSpecAwaited" = true ; then
- fileSpec=$(printf "%s" "$fileSpec" | \
- sed "s/|awaited/|$1/g")
- pageSpecAwaited=false
- else
- error_exit "no PDF/JPG/PNG file found at ${1}" \
- $E_NOINPUT
- fi
- ;;
- esac
- ;;
- esac
- else ## no checking of file contents; rely on .pdf extension
- case ${1} in
- *.[pP][dD][fF] | *.[jJ][pP][eE][gG] \
- | *.[jJ][pP][gG] | *.[pP][nN][gG])
- ## assume it's a PDF/JPG/PNG file
- test -f "${1}" || error_exit \
- "${1} not found" $E_NOINPUT
- fileSpec="$fileSpec"$newline${1}"|"awaited
- pageSpecAwaited=true
- ;;
- *) ## if page spec needed, assume this is it;
- ## otherwise something is wrong
- if test "$pageSpecAwaited" = true ; then
- fileSpec=$(printf "%s" "$fileSpec" | \
- sed "s/|awaited/|$1/g")
- pageSpecAwaited=false
- else
- error_exit "no PDF/JPG/PNG file found at ${1}" \
- $E_NOINPUT
- fi
- ;;
- esac
- fi
- ;;
- esac
- fi
- shift
-done
-##
-## Use the default page spec for any that remain unspecified:
-##
-fileSpec=$(printf "%s" "$fileSpec" | sed '/^$/d; s/^ //; s/|awaited$/|-/')
-##
-## Check whether input from stdin should be used by default:
-if test $PDFJAM_CALL_NUMBER -eq 0 && test "$inputFromStdin" != true
-then
- ## the special argument '/dev/stdin' was not used
- if test -z "$fileSpec" ; then
- ## no argument specifying a PDF source was given
- inputFromStdin=true
- fileSpec="/dev/stdin|-"
- prattle "No PDF/JPG/PNG source specified: input is from stdin."
- fi
-fi
-##
-## Delete leading comma from $miscOptions:
-##
-miscOptions=$(printf "%s" "$miscOptions" | sed 's/^,//')
-##
-if test -n "$preamble"
-then callOptions="$callOptions --preamble '$preamble'"
-fi
-## Delete leading space from $callOptions:
-##
-callOptions=$(printf "%s" "$callOptions" | sed 's/^ //')
-##
-## Set up a document options variable:
-##
-case $landscape in
- true)
- orientation=landscape ;;
- *)
- orientation="" ;;
-esac
-case $twoside in
- true)
- twoside=twoside ;;
- *)
- twoside="" ;;
-esac
-case $shortedge in
- true)
- shortedge="" ;;
- *)
- shortedge='\usepackage{everyshi}\makeatletter\EveryShipout{\ifodd\c@page\pdfpageattr{/Rotate 180}\fi}\makeatother' ;;
-esac
-if test "$geometry" != false
-then
-## we haven't already found that geometry.sty is missing
- case $paper in
- a0paper | a1paper | a2paper | a3paper | \
- a6paper | b0paper | b1paper | b2paper | \
- b3paper | b4paper | b6paper)
- ## the 'geometry' package is needed
- geometry=true ;
- ;;
- *)
- ;;
- esac
-fi
-documentOptions="$paper","$orientation","$twoside"
-documentOptions=$(printf "%s" "$documentOptions" | sed 's/^,//' | sed 's/,$//')
-##
-## END OF ARGUMENT PROCESSING
-##
-#########################################################################
-##
-## CHECK SYSTEM SETUP
-##
-## These checks are not repeated in secondary calls.
-##
-if test $PDFJAM_CALL_NUMBER -eq 0 ## not a secondary call
-then
- ## Check whether there's a suitable latex to use:
- case "$latex" in
- "not found")
- error_exit "can't find pdflatex!" $E_UNAVAILABLE
- ;;
- *) ##
- if test ! -x "$latex"
- then
- error_exit \
- "configuration error, $latex is not an executable file" \
- $E_CONFIG
- fi
- ;;
- esac
- ##
- ## Check that necessary LaTeX packages are installed:
- ##
- modifyPath=$(printf "%s" "$latex" | sed 's/\/[^\/]*$//')
- if [ -n "$modifyPath" ] ; then
- PATH="$modifyPath:$PATH"
- export PATH
- fi
- (kpsewhich pdfpages.sty >/dev/null) ||
- error_exit \
- "LaTeX package pdfpages.sty is not installed" \
- $E_UNAVAILABLE
-
- for pack in pdflscape eso-pic everyshi atbegshi ; do
- (kpsewhich $pack.sty >/dev/null) ||
- error_exit \
- "LaTeX package $pack.sty is not installed (see the pdfpages manual)" \
- $E_UNAVAILABLE
- done
- if test "$geometry" = true
- ## ie, if the 'geometry' package is needed for paper size
- then
- (kpsewhich geometry.sty >/dev/null) || {
- prattle "LaTeX package geometry.sty is not installed, so only the"
- prattle "standard LaTeX paper sizes are available." 1
- geometry=false
- if test "$batch" = true
- then
- export geometry ## for use in any secondary calls
- fi
- }
- fi
-fi
-if test "$keepinfo" = true
-then
- case "$pdfinfo" in
- "not found")
- if test $PDFJAM_CALL_NUMBER -eq 0
- then
- prattle \
- "The pdfinfo utility was not found, so --keepinfo is ignored."
- fi
- keepinfo=false
- ;;
- pdfinfo)
- ;;
- *) ## $pdfinfo was set in a configuration file
- if test ! -x "$pdfinfo"
- then
- if test $PDFJAM_CALL_NUMBER -eq 0
- then
- prattle \
- "No pdfinfo utility at $pdfinfo, so --keepinfo is ignored."
- keepinfo=false
- fi
- fi
- ;;
- esac
- case "$iconv" in
- "not found")
- if test $PDFJAM_CALL_NUMBER -eq 0
- then
- prattle \
- "The iconv utility was not found, so --keepinfo is ignored."
- fi
- keepinfo=false
- ;;
- iconv)
- ;;
- *) ## $iconv was set in a configuration file
- if test ! -x "$iconv"
- then
- if test $PDFJAM_CALL_NUMBER -eq 0
- then
- prattle \
- "No iconv utility at $iconv, so --keepinfo is ignored."
- keepinfo=false
- fi
- fi
- ;;
- esac
-fi
-## A function to check if using non-Cygwin "${latex}" from Cygwin
-using_non_cygwin_latex_from_cygwin () {
- if [ -z "${__cache__using_non_cygwin_latex_from_cygwin}" ]; then
- if [ "$(uname -o)" = "Cygwin" ] \
- && "${latex}" -version | head -1 | grep -qv Cygwin; then
- __cache__using_non_cygwin_latex_from_cygwin=0
- else
- __cache__using_non_cygwin_latex_from_cygwin=1
- fi
- fi
- return "${__cache__using_non_cygwin_latex_from_cygwin}"
-}
-##
-## END OF CHECKING THE SETUP
-##
-#########################################################################
-##
-## TEMPORARY FILES
-##
-## Make a secure temporary directory (following
-## the autoconf manual).
-##
-## Use mktemp if possible; otherwise fall back on mkdir,
-## with random name to make file collisions less likely.
-##
-original_umask=$(umask)
-umask 177
-if test $PDFJAM_CALL_NUMBER = 0 ## don't repeat this work for secondary calls
-then
- PDFJAM_TEMP_DIR=''
- trap 'IFS="$OIFS"; \
- if test $tidy != false ; then cd "$pwd"; rm -rf "$PDFJAM_TEMP_DIR"; fi; exit 1' \
- 1 2 15
- trap 'IFS="$OIFS"; \
- if test $tidy != false ; then cd "$pwd"; rm -rf "$PDFJAM_TEMP_DIR"; fi' 0
- {
- PDFJAM_TEMP_DIR=$( (umask 077 && mktemp -d "$tempfileDir/pdfjam-XXXXXX") 2>/dev/null) &&
- test -n "$PDFJAM_TEMP_DIR" && test -d "$PDFJAM_TEMP_DIR"
- } || {
- ## We'll use awk to make random number, for portability
- random=$(awk 'END { srand(); printf ("%d\n", rand()*1000000); }' /dev/null)
- PDFJAM_TEMP_DIR="$tempfileDir"/pdfjam"$$"-"$random"
- (umask 077 && mkdir "$PDFJAM_TEMP_DIR")
- } || exit $?
-##
- export PDFJAM_TEMP_DIR ## so that same dir is used in secondary calls
- if test $tidy = false ; then
- prattle "Temporary directory for this job is
- $PDFJAM_TEMP_DIR"
- fi
- PDFJAM_MESSAGES_FILE="$PDFJAM_TEMP_DIR"/messages.txt
- export PDFJAM_MESSAGES_FILE
- ## so that secondary calls can write messages there as well
- printf "%s" "$messages" > "$PDFJAM_MESSAGES_FILE" ## initial file contents
- messages="" ## we won't be using this variable again!
-else
- PDFJAM_TEMP_DIR="$PDFJAM_TEMP_DIR/file$PDFJAM_CALL_NUMBER"
- (umask 077 && mkdir "$PDFJAM_TEMP_DIR")
-fi
-umask "$original_umask"
-## Next is from the Cygwin patch contributed by Lucas
-if using_non_cygwin_latex_from_cygwin; then
- PDFJAM_TEMP_DIR=$(cygpath -w "$PDFJAM_TEMP_DIR")
-fi
-##
-## TEMPORARY DIRECTORY ALL DONE
-##
-#########################################################################
-##
-## HANDLING THE "--batch" OPTION
-##
-## If --batch was used, we'll call pdfjam separately on each input
-## file.
-##
-if test "$batch" = true ; then
- if test "$fileSpec" = "" ; then
- error_exit "--batch was used, but no PDF/JPG/PNG source file(s) specified" \
- $E_USAGE
- fi
- if test "$inputFromStdin" = true ; then
- error_exit "--batch cannot be used with input from stdin" \
- $E_USAGE
- fi
- IFS="$newline"
- for k in $fileSpec ; do
- sourcePath=$(printf "%s" "$k" | sed 's/|[^|]*$//')
- pageSpec=$(printf "%s" $k | sed 's/.*|//')
- callNumber=$((PDFJAM_CALL_NUMBER + 1))
- prattle "--"
- prattle "Processing file ${callNumber}, '$sourcePath'..."
- prattle "Page spec is '$pageSpec'."
- sourcePath=$(escape_chars "$sourcePath")
- PDFJAM_EFFECTIVE_CALL="$0 $callOptions -- $sourcePath $pageSpec"
- export PDFJAM_EFFECTIVE_CALL
- PDFJAM_CALL_NUMBER=$callNumber
- export PDFJAM_CALL_NUMBER
- eval "$PDFJAM_EFFECTIVE_CALL"
- ## i.e., call pdfjam again with one input file
- done
- if [ "$verbose" = "true" ]; then cat "$PDFJAM_MESSAGES_FILE" >&2 ; fi
- IFS=$OIFS
- exit 0
-fi
-##
-## END OF THE '--batch' PROCESSING
-##
-#########################################################################
-##
-## RECORD THE EFFECTIVE CALL TO PDFJAM, FOR POSSIBLE DEBUGGING PURPOSES
-##
-## Save the text of this (effective) call to pdfjam in a temporary file,
-## for later inspection if necessary.
-##
-## For secondary calls, the effective call text is already made;
-## otherwise we make it here.
-##
-if test "$PDFJAM_CALL_NUMBER" -gt 0
-then
- theCall="$PDFJAM_EFFECTIVE_CALL"
-else
- filePageSpec=""
- IFS="$newline"
- for k in $fileSpec ; do
- ## Last substitution on next line is needed for silly characters in
- ## file names...
- sourcePath=$(printf "%s" $k | sed 's/|[^|]*$//')
- sourcePath=$(escape_chars "$sourcePath")
- pageSpec=$(printf "%s" $k | sed 's/.*|//')
- filePageSpec="$filePageSpec$sourcePath $pageSpec "
- done
- IFS="$OIFS"
- theCall="$0 $callOptions -- $filePageSpec"
-fi
-printf "%s\n%s\n" "cd $pwd" "$theCall" > "$PDFJAM_TEMP_DIR"/call.txt
-prattle "Effective call for this run of pdfjam:"
-prattle "$theCall" 1
-##
-#########################################################################
-##
-## NOW MAKE THE INPUT FILE ETC., READY FOR LATEX
-##
-filePageList="" ## initialize a string to supply to \includepdfmerge
-counter=0
-##
-## Make symbolic link(s) to the source file(s) in the temporary dir,
-## and make the $filePageList string for input to \includepdfmerge
-##
-stdinUnread=true
-IFS="$newline"
-for k in ${fileSpec}
-do
- counter=$((counter + 1))
- sourcePath=$(printf "%s" "$k" | sed 's/|[^|]*$//')
- pageSpec=$(printf "%s" $k | sed 's/.*|//')
- ## Check, though not exhaustively, for problems with the
- ## page spec: leading or trailing comma, double comma or
- ## double dash, alphabetic characters other than the word "last",
- ## braces not paired as {} with nothing inbetween. A fully
- ## specified pattern for valid \includepdfmerge page spec would
- ## be better here; but life is too short...
- if printf "%s" "$pageSpec" | sed 's/last/99/g' | \
- grep '^,.*\|,$\|,,\|--\|[A-Za-z]\|{[^}]\|[^{]}' 1>/dev/null
- then
- error_exit "invalid page spec $pageSpec" $E_USAGE
- fi
- case $sourcePath in
- /dev/stdin)
- uniqueName="$PDFJAM_TEMP_DIR"/stdin.pdf
- if test "$stdinUnread" = true
- then
- if tty -s ; then
- error_exit \
- "tty is connected to connected to stdin, no PDF/JPG/PNG file found" \
- $E_NOINPUT
- fi
- cat > "$uniqueName"
- stdinUnread=false
- fi
- ;;
- *)
- pdfName=$(basename "$sourcePath")
- sourceDir=$(dirname "$sourcePath") ## zsh on Mac OS 10.5 chokes here
- cd "$sourceDir" || exit 1 ## just to get the full path
- sourceDir=$(pwd)
- cd "$pwd" || exit 1
- sourceFullPath="$sourceDir"/"$pdfName"
- uniqueName="source-$counter.pdf"
- uniqueName="$PDFJAM_TEMP_DIR"/"$uniqueName"
- ## Next is from the Cygwin patch contributed by Lucas
- if using_non_cygwin_latex_from_cygwin; then
- cp "$sourceFullPath" "$uniqueName"
- else
- ln -s "$sourceFullPath" "$uniqueName"
- fi
- ;;
- esac
- filePageList="$filePageList","$uniqueName","$pageSpec"
-done
-IFS="$OIFS"
-filePageList=$(printf "%s" "$filePageList" | \
- sed 's/^,//') ## remove leading comma
-##
-## Do the pdfinfo stuff (if relevant)...
-##
-select_pdfinfo () {
- printf '%s' "$2" | \
- grep -e "^$1:" | \
- sed -e 's/^'"$1"':\s*//'
-}
-echo_hex_iconv_utf16be () {
- printf '%s' "$1" | \
- "$iconv" -f utf8 -t utf16be | \
- od -An -v -tx1 | \
- tr -d '[:space:]'
-}
-echo_pdfinfodata () {
- if [ -n "$2" ]; then
- TMPA=$(echo_hex_iconv_utf16be "$2")
- printf '%s' "/$1 <feff${TMPA}>"
- fi
-}
-
-if test "$keepinfo" = true ; then
- prattle "Calling ${pdfinfo}..."
- PDFinfo=$(pdfinfo -enc UTF-8 "$uniqueName")
- pdftitl=$(select_pdfinfo 'Title' "$PDFinfo")
- pdfauth=$(select_pdfinfo 'Author' "$PDFinfo")
- pdfsubj=$(select_pdfinfo 'Subject' "$PDFinfo")
- pdfkeyw=$(select_pdfinfo 'Keywords' "$PDFinfo")
-fi
-echo_iconv_from_enc () {
- printf '%s' "$2" | \
- "$iconv" -f "$1" -t utf8
-}
-if test -n "$pdfTitle" ; then
- pdftitl=$(echo_iconv_from_enc "$enc" "$pdfTitle")
-fi
-if test -n "$pdfAuthor" ; then
- pdfauth=$(echo_iconv_from_enc "$enc" "$pdfAuthor")
-fi
-if test -n "$pdfSubject" ; then
- pdfsubj=$(echo_iconv_from_enc "$enc" "$pdfSubject")
-fi
-if test -n "$pdfKeywords" ; then
- pdfkeyw=$(echo_iconv_from_enc "$enc" "$pdfKeywords")
-fi
-
-## Converting to PDF string
-raw_pdftitl=$(echo_pdfinfodata 'Title' "$pdftitl")
-raw_pdfauth=$(echo_pdfinfodata 'Author' "$pdfauth")
-raw_pdfsubj=$(echo_pdfinfodata 'Subject' "$pdfsubj")
-raw_pdfkeyw=$(echo_pdfinfodata 'Keywords' "$pdfkeyw")
-
-##
-## Now set up the files for latex...
-##
-fileName="$PDFJAM_TEMP_DIR"/a
-texFile="$fileName".tex
-msgFile="$fileName".msgs
-tempFile="$PDFJAM_TEMP_DIR"/temp.tex
-## Next is adapted from the Cygwin patch sent by Lucas
-if using_non_cygwin_latex_from_cygwin; then
- filePageList=$(echo "$filePageList" | sed 's~\\~/~g')
-fi
-(cat <<EndTemplate
-\batchmode
-\documentclass[$documentOptions]{article}
-\usepackage{color} \definecolor{bgclr}{RGB}{$pagecolor} \pagecolor{bgclr}
-\usepackage[$papersize]{geometry}
-\usepackage[utf8]{inputenc}
-\ifdefined\luatexversion% LuaLaTeX
- \protected\def\pdfinfo{\pdfextension info}
-\fi
-\ifdefined\XeTeXversion% XeLaTeX
- \protected\def\pdfinfo#1{\AtBeginDvi{\special{pdf:docinfo << #1 >>}}}
-\fi
-\ifdefined\pdfinfo%
- \pdfinfo{%
- $raw_pdftitl %
- $raw_pdfauth %
- $raw_pdfsubj %
- $raw_pdfkeyw %
- }%
-\fi
-\usepackage{pdfpages}
-EndTemplate
- ) > "$texFile"
-if test -z "$geometry" ; then geometry=false ; fi
-if test "$geometry" = false; then ## geometry package is not to be used
- cp "$texFile" "$tempFile"
- sed '/\\\usepackage.*{geometry}/d' "$tempFile" > "$texFile"
- rm "$tempFile"
-fi
-if test -z "$pagecolor"; then ## color package is not needed
- cp "$texFile" "$tempFile"
- sed '/\\\usepackage.*{color}/d' "$tempFile" > "$texFile"
- rm "$tempFile"
-fi
-(cat <<EndTemplate
-$preamble
-$shortedge
-\begin{document}
-\includepdfmerge[$miscOptions]{$filePageList}
-\end{document}
-EndTemplate
- ) >> "$texFile"
-##
-## INPUT FILES ARE ALL READY
-##
-#########################################################################
-##
-## RUN LATEX AND COPY THE RESULTING PDF FILE
-##
-if [ "$runs" -eq 1 ] ;
-then prattle "Calling ${latex}..."
-else prattle "Calling ${latex} $runs times..."
-fi
-cd "$PDFJAM_TEMP_DIR" || exit 1
-failureText=\
-"FAILED.
-The call to $latex resulted in an error.
-If '--no-tidy' was used, you can examine the
-log file at
- $fileName.log
-to try to diagnose the problem."
-i=1
-while [ "$i" -le "$runs" ] ; do
- "$latex" "$texFile" > "$msgFile" || {
- prattle "$failureText"
- error_exit "Run $i: Output file not written" $E_SOFTWARE
- }
- i=$((i + 1))
-done
-cd "$pwd" || exit 1
-if test -f "$fileName".pdf ## if LaTeX didn't choke
-then
- ## Checks on output file path:
- if test -d "$outFile" ## outfile is a directory
- then
- if test "$sourcePath" = /dev/stdin
- then
- error_exit \
- "--outfile cannot be a directory when input is stdin" \
- $E_USAGE
- fi
- if test ! -w "$outFile"
- then
- error_exit \
- "FAILED: no write permission on ${outFile}." \
- $E_OSFILE
- fi
- separator="-"
- if test "$pageSpec" != "-"
- then
- separator=-"$pageSpec"-
- fi
- outFile=$(printf "%s" "$outFile" | sed 's/\/$//')
- ## (delete any trailing slash)
- pdfName=$(basename "$sourcePath")
- pdfName=$(printf "%s" "$pdfName" | \
- sed 's/\.[pP][dD][fF]$//') ## strip extension
- pdfName="$pdfName$separator$suffix".pdf
- outFile="$outFile"/"$pdfName"
- fi
-fi
-if test -f "$outFile" && test ! -w "$outFile"
- ## file exists and we can't over-write it
-then
- error_exit "no write permission at ${outFile}" $E_CANTCREATE
-fi
-#fileSize=$(wc -c < "$fileName.pdf" | sed 's/^\ *//')
-## Avoid explicit output to /dev/stdout.
-if test "$outFile" = "/dev/stdout" \
- && cat "$fileName".pdf 2> /dev/null \
- || cat "$fileName".pdf > "$outFile" 2>/dev/null
-then
- prattle "Finished. Output was written to '${outFile}'."
-else
- error_exit "cannot write output at ${outFile}" $E_CANTCREATE
-fi
-if [ "$PDFJAM_CALL_NUMBER" = "0" ] && [ "$verbose" = "true" ]
-then cat "$PDFJAM_MESSAGES_FILE" >&2
-fi
-exit 0
-##
-## END
-##
-#########################################################################