I tend to try to avoid paper printouts. I have enough backups so scanned archives are enough. I made a few test on the best way to produce small PDF on the command line. I found the following bash functions to be the most effective:
function scan2pdf {
cd ~/tmprm/scan
FILE=$1
[ "$FILE" == "" ] && read FILE
[ -e "$FILE".pdf ] && return
# scan A4 gray
scanimage -l 0 -t 0 -x 215 -y 297 --mode Gray --resolution=300 > "$FILE".pnm
# convert to ps because gs needs this import format
pnmtops -dpi 300 "$FILE".pnm > "$FILE".ps
# convert to PDF with decent /ebook quality setting
gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/ebook -dNOPAUSE -dBATCH -sOutputFile="$FILE".pdf "$FILE".ps
rm -f "$FILE".pnm "$FILE".ps
}
function scan2pdfs {
cd ~/tmprm/scan
ENDFILE=$1
[ "$ENDFILE" == "" ] && read ENDFILE
for i in `seq --equal-width 999`; do
echo "(d)one?"
read NEXT
[ "$NEXT" == "d" ] && break
scan2pdf "$ENDFILE"$i
done
gs -sDEVICE=pdfwrite -dNOPAUSE -dBATCH -sOutputFile="$ENDFILE".pdf -f "$ENDFILE"*.pdf"
echo "OK? (CTRL-C)"
read OK
rm -f $LIST
}
It can be used as follow:
scan2pdf thisfile
scan2pdf thisotherfile
scan2pdfs multiplefiles
It does all the work in ~/tmp/scan but that’s a personal convenience. With this, I get PDF that are smaller than 1MB – while other methods I tried before was producing 5/6MB files for the same content.
Update: now this is provided as general bashrc.d script. It’s included in the -utils package. Now the main command for multiple A4 pages PDF is no longer scan2pdfs but scan2pdf. Its behavior can be changed through variables SCAN2PDF_DIRECTORY (default = ~/tmprm/scan) and SCAN2PDF_DPI (default = 300).
