From 515173478659654d067ffcc1bf04440c56fc5d5b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kry=C5=A1tof=20Pe=C5=A1ek=20=28Kof=29?= Date: Fri, 30 Oct 2026 01:44:10 +0100 Subject: [PATCH] feat(scan): Add scan-book interactive CLI for multi-page book scanning --- scan-book | 93 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 93 insertions(+) create mode 100755 scan-book diff --git a/scan-book b/scan-book new file mode 100755 index 0000000..a808dec --- /dev/null +++ b/scan-book @@ -0,0 +1,93 @@ +#!/bin/bash +# SCAN-BOOK // Interactive multi-page book scanning CLI +# Skenování knih po stránkách přes Brother DCP-J4120DW (USB bazina / AirScan) + +set -e + +BOOK_NAME="$1" +if [ -z "$BOOK_NAME" ]; then + BOOK_NAME="kniha_$(date +%Y%m%d_%H%M%S)" +fi +# Strip .pdf extension if user provided it +BOOK_NAME="${BOOK_NAME%.pdf}" + +OUT_DIR="$HOME/Downloads/$BOOK_NAME" +mkdir -p "$OUT_DIR" +FINAL_PDF="$HOME/Downloads/${BOOK_NAME}.pdf" + +echo "======================================================================" +echo " KNIŽNÍ SKENER // BROTHER DCP-J4120DW (BAZINA USB)" +echo "======================================================================" +echo " Kniha : $BOOK_NAME" +echo " Složka: $OUT_DIR" +echo " Výstup: $FINAL_PDF" +echo "" +echo " Ovládání:" +echo " [ENTER] = Naskenovat aktuální stranu" +echo " r = Znovu naskenovat poslední stranu (oprava posunu)" +echo " q = Dokončit knihu a spojit do jednoho PDF" +echo "======================================================================" +echo "" + +PAGE=1 + +while true; do + printf "[Strana %03d] Položte knihu na sklo a stiskněte [ENTER] (nebo 'q' pro konec): " "$PAGE" + read -r cmd + + if [[ "$cmd" == "q" || "$cmd" == "done" || "$cmd" == "exit" ]]; then + break + fi + + if [[ "$cmd" == "r" ]]; then + if [ $PAGE -gt 1 ]; then + PAGE=$((PAGE - 1)) + echo "[-] Opakuji sken strany $PAGE..." + else + echo "[-] Ještě nebyla naskenována žádná strana." + continue + fi + fi + + PAGE_FILE="$OUT_DIR/page_$(printf '%04d' $PAGE).pdf" + printf " [+] Skenuji stranu %03d (300 DPI True Gray)... " "$PAGE" + + # Execute scan on bazina via USB + ssh bazina "scanimage -d 'brother4:bus1;dev8' --resolution 300 --mode 'True Gray' -x 210 -y 297 --format=pdf" > "$PAGE_FILE" 2>/dev/null || { + # Fallback to network airscan if USB re-enumerated + scanimage -d "airscan:w0:Brother DCP-J4120DW" --resolution 300 --mode "Gray" -x 210 -y 297 --format=pdf > "$PAGE_FILE" 2>/dev/null + } + + if [ -s "$PAGE_FILE" ]; then + echo "OK ($(du -h "$PAGE_FILE" | cut -f1))" + PAGE=$((PAGE + 1)) + else + echo "CHYBA: Sken se nezdařil. Zkontrolujte připojení tiskárny a zkuste to znovu." + fi + echo "" +done + +TOTAL_PAGES=$(ls -1 "$OUT_DIR"/page_*.pdf 2>/dev/null | wc -l) + +if [ "$TOTAL_PAGES" -gt 0 ]; then + echo "" + echo "[*] Spojuji $TOTAL_PAGES stran do výsledného PDF..." + if command -v pdfunite >/dev/null 2>&1; then + pdfunite "$OUT_DIR"/page_*.pdf "$FINAL_PDF" + else + convert "$OUT_DIR"/page_*.pdf "$FINAL_PDF" + fi + + ln -sf "$FINAL_PDF" "$HOME/Downloads/kniha.pdf" + + echo "======================================================================" + echo " [✓] KNIHA DOKONČENA!" + echo " Počet stran: $TOTAL_PAGES" + echo " Soubor : $FINAL_PDF" + echo " Odkaz : ~/Downloads/kniha.pdf" + echo " Velikost : $(du -h "$FINAL_PDF" | cut -f1)" + echo "======================================================================" + notify-send "Kniha naskenována" "$TOTAL_PAGES stran v $FINAL_PDF" 2>/dev/null || true +else + echo "[-] Nebyla naskenována žádná strana. Kniha nebyla vytvořena." +fi