>>Je voudrais bien virer la derni�re page imprimable de plusieurs documents
>>PDF. Auriez-vous une id�e?
En fait, tu peux combiner les outils suivants (paquet ghostscript):
- pdf2ps: convertit un PDF en PostScript
- psselect: permet de s�lectionner des pages dans un document PostScript
-> l'option "-p" permet de s�lectionner des intervalles de pages �
garder, les autres seront enlev�es du document PS;
toute l'astuce est dans la notation "-_2" qui signifie
"du d�but (rien) � (-) la 2�me page en partant de la fin (_2)"
- ps2pdf: convertit PostScript en PDF
-> ps2pdf13 g�n�re un PDF version 1.3 (acrobat >= 4)
Voici un script bash qui fait ce qu'il te faut pour un ou plusieurs
fichier(s) PDF pass�s en param�tres au script...
(les PDF originaux sont conserv�s comme <nom>.pdf.orig)
Note que je l'ai fortement comment� et �crit bien propre (quelques
astuces bash en passant) ;-)
Seule chose qui est dommage: psselect ne sait pas travailler sur STDIN
comme source, il lui faut un fichier sur disque (il fait un seek()), ce
qui n�cessite la cr�ation d'un fichier temporaire (cf. tmpfile dans le
script) - fais attention, ce fichier est tr�s grand (dans mes tests,
un PDF de 2MB (bcp de graphiques, 35 pages) m'a donn� un fichier
temporaire (PostScript) de 85 MB !!!) donc sois bien sur d'avoir assez
de place dans /tmp ;-)
- - - - snip - - - - - - - - - - - - - - - - - - - - - - - - - - -
#!/bin/bash
# Script to remove the last page from PDF files
# Random name for the temporary file
tmpfile=/tmp/$0-$$-$RANDOM.tmp
# Default: be verbose
VERBOSE=yes
# Store script name (basename, remove path)
SCRIPT_NAME=${0##*/}
function help
{
cat<<EOF
$SCRIPT_NAME - remove last page from PDF files
Syntax: $SCRIPT_NAME [-q] [-h] <pdf files...>
Options:
-q: be quiet (default is to be verbose)
-h: show help (this) and quit
EOF
}
function verb
{
[ "$VERBOSE" = "yes" ] && echo $*
}
while getopts 'qh' opt; do
case $opt in
q) VERBOSE= ;; # be quiet
h) help; exit 0;; # display help and quit
*) echo "ERROR: unknown option $opt" >&2; exit 1;;
esac
done
shift $(( $OPTIND - 1 ))
# Check whether at least 1 file has been given as parameter
if [ $# -le 0 ]; then
echo "Please specify one or more PDF file(s) as argument(s)" >&2
exit 1
fi
# Signal handler function (terminates)
function sig_handler
{
rm -f "$tmpfile"
verb "Interrupted by signal." >&2
exit 1
}
# Register signal handler function:
trap sig_handler SIGINT SIGQUIT SIGTERM
# Process PDF files
for pdf in $*; do
verb -n "Processing $pdf... "
# Make a copy of the original PDF, but don't
# overwrite an existing original
[ ! -f "${pdf}.orig" ] && mv "$pdf" "${pdf}.orig"
# Do the actual processing:
if pdf2ps "${pdf}.orig" "$tmpfile" \
&& psselect -q -p-_2 "$tmpfile" \
| ps2pdf13 - "$pdf"
then
# Succeeded
verb "ok"
else
# Failed
verb "ERROR" >&2
echo "ERROR in processing \"$pdf\"" >&2
# Restore the original PDF file
mv "${pdf}.orig" "$pdf"
fi
done
# Remove the temporary file
rm -f "$tmpfile"
- - - -/snip - - - - - - - - - - - - - - - - - - - - - - - - - - -
Voil� msieu ;-)
PS: je viens de l'�crire, le script n'est pas test�, je n'ai fait les
�tapes qu'� la main (l� �a marche ;-)), donc essaie quand m�me avec
un seul fichier pour voir si �a marche correctement ;-)
--
-o) Pascal Bleser ATOS Origin/Aachen(DE) |
/\\ <[EMAIL PROTECTED]> |
_\_v <[EMAIL PROTECTED]> |
---------------------------------------------|
Jesus saves,Buddha makes incremental backups :
---------------------------------------------'
_______________________________________________________
Linux Mailing List - http://www.unixtech.be
Subscribe/Unsubscribe: http://www.unixtech.be/mailman/listinfo/linux
Archives: http://www.mail-archive.com/[email protected]
IRC: efnet.skynet.be:6667 - #unixtech