apps / imapfilter / printscript.model /
4adcb58 2 years ago
2 contributor
95 lines | 3.641kb
#!/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__"