89 lines
3.1 KiB
Bash
Executable File
89 lines
3.1 KiB
Bash
Executable File
#!/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).jpg"
|
|
printf " [+] Skenuji stranu %03d (300 DPI True Gray)... " "$PAGE"
|
|
|
|
# Execute scan on bazina via USB (native JPEG output for zero-loss lossless packaging)
|
|
ssh bazina "scanimage -d 'brother4:bus1;dev8' --resolution 300 --mode 'True Gray' -x 210 -y 297 --format=jpeg" > "$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=jpeg > "$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 tiskárnu a zkuste to znovu."
|
|
fi
|
|
echo ""
|
|
done
|
|
|
|
TOTAL_PAGES=$(ls -1 "$OUT_DIR"/page_*.jpg 2>/dev/null | wc -l)
|
|
|
|
if [ "$TOTAL_PAGES" -gt 0 ]; then
|
|
echo ""
|
|
echo "[*] Spojuji $TOTAL_PAGES stran do výsledného PDF..."
|
|
img2pdf "$OUT_DIR"/page_*.jpg -o "$FINAL_PDF"
|
|
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
|