#!/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