From 86662baa04634baec8c1f202e44c3eac02df1bb5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A9ana=20=E6=B1=9F?= Date: Fri, 15 Aug 2025 14:49:10 +0200 Subject: [PATCH] packages/easyscan: fix ordering of merged pages --- nix/packages/by-name/easyscan/easyscan.sh | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/nix/packages/by-name/easyscan/easyscan.sh b/nix/packages/by-name/easyscan/easyscan.sh index ee690de3..c9d54dc1 100644 --- a/nix/packages/by-name/easyscan/easyscan.sh +++ b/nix/packages/by-name/easyscan/easyscan.sh @@ -8,37 +8,44 @@ if [ -e "$OUTPUT_FILE" ]; then fi tempdir="$(mktemp -d)" +filenames=() counter=1 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 -x 210 -y 297 --resolution 300 -o "$tempdir/easyscan_$counter.pdf" >/dev/null 2>&1 || + scanimage -x 210 -y 297 --resolution 300 -o "$CUR_FNAME" >/dev/null 2>&1 || { echo "Failed to scan page..." 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] | *) - if $ok; then - counter=$((counter += 1)) - fi - ;; + [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 "$tempdir"/*.pdf "$merged_filename" +pdfunite "${filenames[@]}" "$merged_filename" # Copy scan to current directory mkdir -p "$(dirname "$OUTPUT_FILE")"