blob: 9cadc37613017a9a4779a921dfcfc309769e391d (
plain) (
tree)
|
|
#! /usr/bin/env dash
# shellcheck source=/dev/null
SHELL_LIBRARY_VERSION="1.1.4" . %SHELL_LIBRARY_PATH
# needed for help() and version
# shellcheck disable=2034
AUTHORS="Soispha";
# shellcheck disable=2034
YEARS="2023";
# shellcheck disable=2034
VERSION="1.0.0";
help() {
cat << EOF
Scan images and turn them into a pdf.
Usage:
$NAME [--help|--version|--out-dir|--num-pages|--method] --name --device
Options:
--out-dir | -o
Path to place the generated pdf files (default: ./pdf).
--name | -n
Name for the pdf files (e.g. "\$name"_1.pdf).
--num-pages | -p
Number of pages to merge into one pdf (default: 1).
--device | -d
Device used for scanning.
--method | -m
Method to use for scanning (default: ADF).
--help | -h
Display this help and exit.
--version | -v
Display version and copyright information and exit.
EOF
}
scan() {
number_of_pages="$1";
device="$2";
output_directory="$3";
name="$4";
method="$5";
[ -z "$number_of_pages" ] && die "Parameter 'number_of_pages' is not set!"
[ -z "$device" ] && die "Parameter 'device' is not set!"
[ -z "$output_directory" ] && die "Parameter 'output_directory' is not set!"
[ -z "$name" ] && die "Parameter 'name' is not set!"
[ -z "$method" ] && die "Parameter 'method' is not set!"
tiff_temp_path="$(mktmp -d)";
cd "$tiff_temp_path" || die "Bug"
msg "Started scanning...";
if [ "$method" = "Flatbed" ]; then
do_until_success \
"scanimage --format=tiff --progress --source='$method' --device='$device' --output-file=1.tiff" \
"warn 'Retrying scan, as we assume a network error!'"
else
for i in $(seq "$number_of_pages");do
do_until_success \
"scanimage --format=tiff --progress --source='$method' --device='$device' --batch=%d.tif --batch-increment='$number_of_pages' --batch-start='$i'" \
"warn 'Retrying scan, as we assume a network error!'"
if [ "$number_of_pages" -ne 1 ];then
msg "Finished turn, please change side!";
readp "Press enter to continue" noop
fi
done
fi
msg "Creating output directory...";
mkdir "$output_directory";
cd "$output_directory" || die "Bug"
counter=0;
msg "Converting images to pdfs...";
while read -r scanned_image_a;do
if [ "$number_of_pages" -ne 1 ];then
scanned_image_b_set=false;
if [ -z "$scanned_image_b" ];then
scanned_image_b="$i"
scanned_image_b_set=true;
: $((counter += 1))
fi
if [ -n "$scanned_image_a" ] && [ "$scanned_image_b_set" = false ];then
convert "$scanned_image_b" "$scanned_image_a" -compress jpeg -quality 100 "$name"_"$counter".pdf
fi
else
: $((counter += 1))
convert "$scanned_image_a" -compress jpeg -quality 100 "$name"_"$counter".pdf
fi
done < "$(tmp "fd . '$tiff_temp_path' | sort -n")"
}
for input in "$@"; do
case "$input" in
"--help" | "-h")
help;
exit 0;
;;
"--version" | "-v")
version;
exit 0;
;;
esac
done
number_of_pages="1";
unset device;
output_directory="$(pwd)/pdf";
unset name;
method="ADF";
while [ "$#" -ne 0 ]; do
case "$1" in
"--help" | "-h")
;;
"--version" | "-v")
;;
"--out-dir" | "-o")
shift 1;
output_directory="$1";
;;
"--name" | "-n")
shift 1;
name="$1";
;;
"--num-pages" | "-p")
shift 1;
number_of_pages="$1";
;;
"--device" | "-d")
shift 1;
device="$1";
;;
"--method" | "-m")
shift 1;
method="$1";
;;
*)
die "Command line arg $1 does not exist. See --help for a list.";
;;
esac
shift 1;
done
scan "$number_of_pages" "$device" "$output_directory" "$name" "$method";
|