mirror of
https://codeberg.org/leana8959/.files.git
synced 2026-02-04 07:59:40 +00:00
97 lines
1.7 KiB
Bash
Executable file
97 lines
1.7 KiB
Bash
Executable file
#!/usr/bin/env bash
|
|
# This is here because scanimage's batch mode is broken for my scanner
|
|
|
|
function help() {
|
|
cat <<EOF
|
|
easyscan
|
|
|
|
easyscan wraps scanimage and joins the resulting pdf.
|
|
|
|
Usage:
|
|
easyscan <target_file> [ -- args ]:
|
|
Scan a (multi-page) document to <target_file>, passing args to scanimage
|
|
EOF
|
|
}
|
|
|
|
if [ $# -lt 1 ]; then
|
|
help
|
|
exit 1
|
|
fi
|
|
OUTPUT_FILE="$1.pdf"
|
|
if [ -e "$OUTPUT_FILE" ]; then
|
|
echo "$OUTPUT_FILE" already exists, you are probably making a mistake!
|
|
exit 1
|
|
fi
|
|
shift
|
|
|
|
scanimage_args=(
|
|
"-x" "210"
|
|
"-y" "297"
|
|
"--resolution" "300"
|
|
)
|
|
|
|
while [ $# -gt 0 ]; do
|
|
case $1 in
|
|
--help)
|
|
help
|
|
exit
|
|
;;
|
|
--)
|
|
shift
|
|
scanimage_args+=("$@")
|
|
break
|
|
;;
|
|
*)
|
|
shift
|
|
;;
|
|
esac
|
|
done
|
|
|
|
tempdir="$(mktemp -d)"
|
|
filenames=()
|
|
counter=1
|
|
|
|
function clean() {
|
|
# Make sure I don't remove things other than pdf
|
|
rm "$tempdir/"*.pdf
|
|
rm -d "$tempdir"
|
|
}
|
|
trap clean EXIT
|
|
|
|
while :; do
|
|
ok="true"
|
|
echo "Scanning page $counter"
|
|
|
|
CUR_FNAME="$tempdir/easyscan_$counter.pdf"
|
|
|
|
# If no size is set, the output will be wonky-sized
|
|
# 210,297 is the size of A4
|
|
scanimage "${scanimage_args[@]}" -o "$CUR_FNAME" || ok="false"
|
|
|
|
if $ok; then
|
|
counter=$((counter += 1))
|
|
filenames+=("$CUR_FNAME")
|
|
fi
|
|
|
|
IFS= read -r -p "Continue scanning? [Y/n] " cont
|
|
case "$cont" in
|
|
[nN])
|
|
echo "Exiting..."
|
|
break
|
|
;;
|
|
[yY] | *) ;;
|
|
esac
|
|
done
|
|
|
|
# Multiple files are scanned, join them
|
|
#
|
|
# Note: do NOT use the * glob, because bash orders lexicographically and not
|
|
# numerically, the merged ordering will be wrong.
|
|
merged_filename="$tempdir/easyscan_final.pdf"
|
|
pdfunite "${filenames[@]}" "$merged_filename"
|
|
|
|
# Copy scan to current directory
|
|
mkdir -p "$(dirname "$OUTPUT_FILE")"
|
|
cp "$merged_filename" "$OUTPUT_FILE"
|
|
|
|
clean
|