scan-cli/scanpage
2024-02-11 23:13:52 +01:00

97 lines
2.2 KiB
Bash
Executable file
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bin/env zsh
###
: '
Scans a single page using sanes `scanimage` and converts it to PDF using
ImageMagicks `convert`.
'
###
# find your device URI by doing `lpstat -s`!
# (mine is an HP network printer connected through HPLIP)
_device="hpaio:/net/DeskJet_3630_series?hostname=drucker.vandenhorz.de"
# change this to your preferred PDF viewer
_viewer="zathura"
###
trap _ctrlc INT
function _cleanup() {
# clean up _tmpdir, if created earlier
if [ ! -z $_tmpdir ] ; then rm -rf $_tmpdir; fi
}
function _ctrlc() {
echo "cancelled by SIGINT/^C"
_cleanup
exit 1
}
_cmd=""
_file=""
_landscape=false
_silent=false
_tmpdir=""
usage () {
echo 'Scans a single page using sanes `scanimage` and converts it to PDF using ImageMagicks convert and opens it in Evince.
options:
-h, --help
prints this message
-l, --landscape
rotates the page 90° left for landscape scans
-o, --outfile FILE
silently writes the scan to FILE instead of using a temporary file
implies -s
-r, --rotate
same as -l
-s, --silent
silently write output file, dont open it
--viewer CMD
uses CMD as PDF viewer instead of Evince'
}
###~begin option parsing
zparseopts -A _OPTS -D -E -- h l o: r s -help -outfile: -landscape -rotate -silent -viewer
if [ ! -z "$@" ] ; then
usage
exit 1
fi
for opt in "${(@k)_OPTS}"; do
case $opt in
-h|--help)
usage
exit 0
;;
-l|-r|--landscape|--rotate)
_landscape=true
;;
-o|--outfile)
_file="$_OPTS[$opt]"
_silent=true
;;
-s|--silent)
_silent=true
;;
--viewer)
_viewer="$_OPTS[$opt]"
;;
esac
done
###~end option parsing
# check file ending if outfile is specified (and add it), else use tmpfile
# skip when silent (e.g. invoked by `scanmultipage`)
if [ ! -z $_file ] ; then
if [[ ! "$_file" =~ ".*\.pdf" ]] ; then ( $_silent ) || _file="${_file}.pdf"; fi
else
_tmpdir=`mktemp -d`
_file="${_tmpdir}/$(date +%Y-%m-%d).pdf"
fi
scanimage -d "$_device" -p --resolution 300 --mode Color -x 210 -y 297 --format=png | convert $( ( $_landscape ) && print "\-rotate \-90 ")- $_file && \
( $_silent ) || $_viewer $_file >/dev/null 2>/dev/null
_cleanup