|
#!/bin/sh |
|
# |
|
# Laurent Constantin |
|
# REV 2.0 - 28.09.2010 |
|
# |
|
# Generer un fichier PDF depuis les fichiers code sources ,.. pret a imprimer. |
|
# Necessite: htmldoc,source-highlight,pdftk,(iconv,expr,grep,awk) |
|
# Usage: ada|cpp|java "titre du rendu" |
|
# |
|
# |
|
# NEW: Separe les codes sources d'une page blanche (si besoin) |
|
# NEW: Impression JAVA en portrait avec marge reduite |
|
|
|
# Choisit les Extensions de fichiers a traiter |
|
rendu="labo.pdf" |
|
tempdir="printme" |
|
|
|
# Option de conversion |
|
utf8toiso=0 # converit l'encodage HTML en ISO |
|
landscape="--landscape" # Impression en paysage par defaut |
|
marginleft="" # Marge de gauche du document non specifie |
|
whitedoc="white.html" # fichier pour genrer un PDF blanc |
|
styleopt="" |
|
|
|
# choix du language suivant le parametre |
|
# - L'extension 1 doit etre un nom de language pour html-highlight (java,cpp,ada) |
|
# - Si il n'y a pas d'extension 2, mettre ext2=ext1 |
|
case "$1" in |
|
java) |
|
ext1='java' |
|
ext2='java' # Pas d autres extensions donc idem |
|
utf8toiso=0 # Java est en UTF8 on convertit en ISO-8859-1 |
|
landscape="" # impression en portrait |
|
marginleft="--left 0.5cm" # marge de 0.5 cm |
|
styleopt="--style-file `dirname $0`/code-css.txt" |
|
;; |
|
c) |
|
ext1='c' |
|
ext2='h' |
|
marginleft="--left 0.5cm" # marge de 1/2 cm |
|
landscape="" # impression en portrait |
|
;; |
|
cpp) |
|
ext1='cpp' |
|
ext2='h' |
|
landscape="" |
|
utf8toiso=1 # Java est en UTF8 on convertit en ISO-8859-1 |
|
|
|
;; |
|
php) |
|
ext1='php' |
|
ext2='php' |
|
utf8toiso=1 |
|
|
|
;; |
|
ada) |
|
ext1='adb' |
|
ext2='ads' |
|
landscape="" |
|
marginleft="--left 0.5cm" # marge de 0.5 cm |
|
;; |
|
*) |
|
echo "Usage : `basename $0` ada/cpp/c/java \"title\"" |
|
exit; |
|
|
|
esac |
|
|
|
function echod(){ |
|
#echo $1; |
|
donothing="" |
|
} |
|
|
|
# Saisie de l entete.. |
|
if [ "$2" != "" ]; then |
|
title=$2 |
|
else |
|
echo "Entrez un header (laboN - Branche - Auteurs): " |
|
read title |
|
fi |
|
|
|
|
|
|
|
echod "Generation de fichiers PDF depuis le code source" |
|
# On copie les sources dans un repertoire temporaire.. |
|
echod "Recherche & Copie des fichiers" |
|
if [ ! -d $tempdir ]; then |
|
mkdir $tempdir |
|
fi |
|
#find . -path \( -name "*.$ext1" -or -name "*.$ext2" \) -exec cp {} ./$tempdir/ \; |
|
pwd |
|
for fl in *.$ext1; do |
|
cp $fl ./$tempdir/ |
|
done |
|
for fl in *.$ext2; do |
|
cp $fl ./$tempdir/ |
|
done |
|
|
|
|
|
|
|
cd $tempdir |
|
echod "Conversion au format HTML" |
|
# convertit chaque fichier avec l'extension 1 en pdf |
|
for fl in *.$ext1; do |
|
source-highlight --title "$title - Fichier: $fl" -s $ext1 -f html --tab 4 $styleopt --doc --line-number -i $fl -o $fl.html &> /dev/null |
|
rm $fl |
|
|
|
done |
|
|
|
# convertit chaque fichier avec l'extension 2 en pdf |
|
if [ $ext1 != $ext2 ]; then |
|
for fl in *.$ext2; do |
|
source-highlight --title "$title - Fichier: $fl" -s $ext1 -f html --tab 4 $styleopt --doc --line-number -i $fl -o $fl.html &> /dev/null |
|
rm $fl |
|
done |
|
fi |
|
|
|
# convertit chaque fichier HTML depuis UTF8 en ISO (seulement Java) |
|
if [ $utf8toiso == 1 ]; then |
|
echod "Change l'encodage UTF8 en ISO-8859-1" |
|
for fl in *.html; do |
|
mv $fl $fl.old |
|
iconv --from-code=UTF-8 --to-code=ISO-8859-1 $fl.old > $fl |
|
rm -f $fl.old |
|
done |
|
fi |
|
|
|
|
|
echod "Conversion du HTML au format PDF" |
|
find . -name "*.html" -exec htmldoc $marginleft $landscape --webpage --footer "/.d" -f {}.pdf {} \; |
|
|
|
|
|
|
|
if [ ! -e $whitedoc.tmp ]; then |
|
# echod "Cree un pdf blanc" |
|
echo "<html><head></head><body>-- Néant --</body></html>" > $whitedoc |
|
htmldoc $landscape --webpage -t pdf --footer " " -f $whitedoc.tmp $whitedoc &> /dev/null |
|
rm $whitedoc |
|
fi |
|
|
|
|
|
echod "Suppression des fichiers HTML temporaires.." |
|
rm ./*.html |
|
|
|
echod "Nettoyage des noms." |
|
for f in ./*.$ext1.*.pdf; do |
|
mv "$f" "`basename $f .html.pdf`.pdf" |
|
done |
|
if [ $ext1 != $ext2 ]; then |
|
for f in ./*.$ext2.*.pdf; do |
|
mv "$f" "`basename $f .html.pdf`.pdf" |
|
done |
|
fi |
|
|
|
# Ajoute une page blanche si un code source a un nombre de page impaire |
|
# (pour une impression recto-verso) |
|
|
|
echod "Lien entre les fichiers" |
|
for fl in *.pdf; do |
|
# recupere le nb de page dans chaque PDF |
|
nb=`pdftk $fl dump_data | grep NumberOfPages | awk '{print $2}'` |
|
# Modulo pour savoir si c 'est paire |
|
nb=`expr $nb % 2` |
|
# si c'est impraire on fusionne avec un PDF blanc |
|
if [ $nb -eq 1 ]; then |
|
mv $fl $fl.new.pdf |
|
|
|
#Join in1.pdf and in2.pdf into a new PDF, out1.pdf |
|
pdftk $fl.new.pdf $whitedoc.tmp cat output $fl &> /dev/null |
|
rm $fl.new.pdf |
|
|
|
fi |
|
done |
|
# On supprime le PDF blanc |
|
rm $whitedoc.tmp |
|
|
|
# On supprime le resultat precedent si il existe |
|
if [ -e $rendu ]; then |
|
rm $rendu |
|
fi |
|
|
|
# fusionne les PDF |
|
echod "Fusion en un pdf.." |
|
|
|
pdftk *.pdf cat output $rendu &> /dev/null |
|
rm `ls *.pdf | grep -v $rendu` |
|
|
|
|
|
echod "Copie du ficher final et suppression du dossier temporaire" |
|
if [ -e ../$rendu ]; then |
|
rm ../$rendu |
|
fi |
|
|
|
mv $rendu .. |
|
|
|
echod "ouverture du pdf.." |
|
cd .. |
|
rmdir $tempdir |
|
#open ./$rendu || gnome-open ./$rendu |