aboutsummaryrefslogtreecommitdiffstats
path: root/home-manager/soispha/packages/scripts/apps/con2pdf
diff options
context:
space:
mode:
Diffstat (limited to 'home-manager/soispha/packages/scripts/apps/con2pdf')
-rwxr-xr-xhome-manager/soispha/packages/scripts/apps/con2pdf152
1 files changed, 152 insertions, 0 deletions
diff --git a/home-manager/soispha/packages/scripts/apps/con2pdf b/home-manager/soispha/packages/scripts/apps/con2pdf
new file mode 100755
index 00000000..9cadc376
--- /dev/null
+++ b/home-manager/soispha/packages/scripts/apps/con2pdf
@@ -0,0 +1,152 @@
+#! /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";