A few months ago I wrote a post about using a Pixma scanner on Linux to create PDF documents from hard copies. The script has been greatly enhanced and now has a few more features:
- Select scanner resolution
- Select page size
- Option to not pause between pages
- Option to send PDF as e-mail
The code is released under the Eclipse Public License version 1.0 which means that you can pretty much do what you want with it.
#!/bin/bash
#-----------------------------------------------------------------------------
# pixma2pdf.sh version 2.0
#
# Copyright (c) 2009 Torkild U. Resheim - torkildr@gmail.com
# Released under the Eclipse Public License version 1.0
#-----------------------------------------------------------------------------
title="Canon Pixma - Scan to PDF"
dialog --title "$title" --checklist "Scan options" 10 50 10
mail "Send document in e-mail" on
pause "Confirm between pages" on 2>/tmp/dialog
if [ $? == 1 ] ; then
exit 0
fi
options=$(cat /tmp/dialog)
if [[ "$options" =~ "mail" ]] ; then
address=$(cat /tmp/pixma2pdf)
dialog --title "$title" --inputbox "The address to mail to" 8 40 $address 2>/tmp/pixma2pdf
address=$(cat /tmp/pixma2pdf)
fi
dialog --title "$title" --radiolist "Scanner resolution" 10 40 10
75 "75dpi Screen" off
150 "150dpi" off
300 "300dpi Print" on
600 "600dpi" off 2>/tmp/dialog
if [ $? == 1 ] ; then
exit 0
fi
resolution=$(cat /tmp/dialog)
dialog --title "$title" --radiolist "Page size" 10 40 10
a4 "A4" on
a5 "A5" off
b5 "B5" off
letter "Letter" off 2>/tmp/dialog
if [ $? == 1 ] ; then
exit 0
fi
paperSize=$(cat /tmp/dialog)
dialog --title "$title" --inputbox "The number of pages to scan" 8 40 1 2>/tmp/dialog
if [ $? != 1 ]
then
pages=$(cat /tmp/dialog)
for i in `seq $pages` ; do
if [[ "$options" =~ "pause" ]] ; then
dialog --title "$title" --msgbox "Preparing to scan page $i" 8 40
fi
# Perform the scan
sudo pixma_scan -a -r $resolution -v 0 -o scan_$i.pnm
# Exit if there was an error
if [ $? -ne 0 ] ; then
exit $?
fi
# Attempt to crop the image
pnmcrop -left -right -top -bottom -sides scan_$i.pnm > cropped_$i.pnm
# Remove the original image
sudo rm scan_$i.pnm
# Convert to PostScript
pnmtops -equalpixels -dpi=$resolution cropped_$i.pnm > scan_$i.ps
rm cropped_$i.pnm
done
if [ $pages -gt 1 ] ; then
# Merge the PostScript files to one
gs -q -sPAPERSIZE=$paperSize -dNOPAUSE -sDEVICE=pswrite -dBATCH -sOutputFile=scan.ps *.ps
# Remove the temporary postscript files
for i in `seq $pages` ; do
rm scan_$i.ps
done
else
mv scan_1.ps scan.ps
fi
# Create the PDF file
ps2pdf -sPAPERSIZE=$paperSize scan.ps scan.pdf
# Clean up
rm scan.ps
if [[ "$options" =~ "mail" ]] ; then
echo "Your scanned document is attached" | mutt -s "Scanned document" -a scan.pdf $address
fi
fi
rm /tmp/dialog