#!/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 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__"