2 contributor
#!/bin/bash
spool='/misc/nextcloud_db/impression'
test -r "$spool/__pdf__" || exit
size=$(pdfinfo "$spool/__pdf__" | awk '/^Page size:/{
a = $3
b = $5
if (a >= 419 && a <= 421 && b >= 594 && b <= 596 ) print "a5"
if (a >= 594 && a <= 596 && b >= 419 && b <= 421 ) print "a5"
if (a >= 594 && a <= 596 && b >= 841 && b <= 843 ) print "a4"
if (a >= 841 && a <= 843 && b >= 594 && b <= 596 ) print "a4"
if (a >= 841 && a <= 843 && b >= 1189 && b <= 1191) print "a3"
if (a >= 1189 && a <= 1191 && b >= 841 && b <= 843 ) print "a3"
}')
test -n "$size" || exit
mode=__mode__
pages=$(pdfinfo "$spool/__pdf__" | awk '/Pages:/{print $2}')
case ${mode:-normal} in
massicot)
output=$(mktemp --dry-run /dev/shm/XXXXXXXX.pdf)
if test "${size,,}" != "a5"; then
gs -o $output -sDEVICE=pdfwrite -sPAPERSIZE=a5 -dFIXEDMEDIA -dPDFFitPage -dCompatibilityLevel=1.6 "$spool/__pdf__"
else
cp "$spool/__pdf__" $output
fi
recto=$(mktemp -d /dev/shm/XXXXXXXX)
verso=$(mktemp -d /dev/shm/XXXXXXXX)
pdfjam --paper a4paper --nup 2x1 --landscape --outfile $recto "$output" 1 "$output" 1
if test $pages -eq 2; then
pdfjam --paper a4paper --nup 2x1 --landscape --outfile $verso "$output" 2 "$output" 2
pdftk A=$(find $recto -name "*pdf") B=$(find $verso -name "*pdf") cat A B output "$output"
elif test $pages -eq 1; then
output=$(find $recto -name "*pdf")
fi
mv $output "$spool/__pdf__"
rm -fr $recto $verso $output
;;
livret)
if test $pages -ne 4; then
rm "$spool/__pdf__"
/home/sebastien/scripts/smsapi "sms pour __phone__:le document __pdf__ ne contient pas strictement 4 pages nécessaire pour le mode livret, impression annulée"
exit
fi
output=$(mktemp --dry-run /dev/shm/XXXXXXXX.pdf)
recto=$(mktemp --dry-run /dev/shm/XXXXXXXX)
verso=$(mktemp --dry-run /dev/shm/XXXXXXXX)
if test $size = "a3"; then
size="a4"
gs -o $output -sDEVICE=pdfwrite -sPAPERSIZE=$size -dFIXEDMEDIA -dPDFFitPage -dCompatibilityLevel=1.6 "$spool/__pdf__"
else
cp "$spool/__pdf__" $output
fi
booksize="a$((${size//[^45]}-1))"
pdfjam --paper ${booksize}paper --nup 2x1 --landscape --outfile $recto "$output" 1 "$output" 4
pdfjam --paper ${booksize}paper --nup 2x1 --landscape --outfile $verso "$output" 2 "$output" 3
pdftk A=$(find $recto -name "*pdf") B=$(find $verso -name "*pdf") cat A B output "$spool/__pdf__"
rm -f $recto $verso $output
;;
normal)
if test "${size,,}" != "__papersize__"; then
output=$(mktemp --dry-run /dev/shm/XXXXXXXX)
gs -o $output -sDEVICE=pdfwrite -sPAPERSIZE=__papersize__ -dFIXEDMEDIA -dPDFFitPage -dCompatibilityLevel=1.6 "$spool/__pdf__"
mv $output "$spool/__pdf__"
fi
;;
esac
sync
lp -c -o InputSlot=__inputslot__ -o sides=__sides__ -o ColorModel=__colormodel__ -n __qty__ "$spool/__pdf__"
msmtp __from__ << EOM
Subject: confirmation impression de __pdf__
Salut __prenom__,
L'impression de __pdf__ en __qty__ exemplaires, __papersize_hr__ __sides_hr__ __colormodel_hr__ est lancée sur le bac __inputslot_hr__${mode:+, en mode ${mode}}. Merci de venir la récupérer au plus vite.
Attention, ça ne veut pas dire que l'impression va se dérouler sans accroc:
- pas assez de papier dans le bac
- plus de toner
- bac de récupération de toner plein
- une impression précédente pas encore récupérée et la limite de 250 feuilles imprimées est dépassée
- bourrage papier
- ...
État actuel de l'imprimante
$(/usr/local/bin/printer)
EOM
/home/sebastien/scripts/smsapi "sms pour __phone__:impression __pdf__ (__qty__, __papersize_hr__, __colormodel_hr__, __sides_hr__, bac __inputslot_hr__${mode:+, en mode ${mode}}) lancée"
rm -f "$spool/__pdf__"