feat(scan): Add scan-book interactive CLI for multi-page book scanning
This commit is contained in:
@@ -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
|
||||
Reference in New Issue
Block a user