Сканируем в многостраничный PDF из командной строки

Я не описывал, как у меня сделано многостраничное сканирование, но это, на самом деле, один простенький скрипт. Всю работу делает scanimage, которая, надо сказать, отлично справляется; скрипт, собственно, нужен в основном для для того, чтоб передать ей параметры…

scanimage не умеет в PDF, зато отлично умеет в многостраничное сканирование. У меня старенький Canon LiDE 20, и то, что есть возможность ожидать нажатия кнопки перед сканированием новой страницы, оказывается очень удобно, без автоподатчика-то.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
#!/bin/bash

if [ -f scanned.page-*.jpg ]; then
        echo "Page exists, terminating."
        exit 1
fi
if [ -f scan.pdf ]; then
        echo "Scan exists, terminating."
        exit 1
fi

scanner=$(sane-find-scanner | grep CanoScan)
scanneraddr="genesys:libusb:"${scanner:(-7)}

scanimage -d "$scanneraddr" --contrast 27 -x 210 -y 297 --mode Color --resolution 300 --format=jpeg --batch-prompt --batch='scanned.page-%d.jpg'
convert scanned.page-*.jpg scan.pdf
rm scanned.page-*.jpg

Что тут происходит? Сначала проверка, существуют ли в текущей директории файлы с именами scanned.page-*.jpg и scan.pdf, и выход с ошибкой, если они есть (иначе скрипт их перезаписал бы). В 12-й строке утилита из комплекта sane находит, где именно на шине USB сегодня висит сканер (он представляется как «CanoScan»); последние 7 символов в этой строчке — как раз адрес на шине вида «xxx:xxx». Драйвер и шина известны (строка 13), можно запускать scanimage в режим многостраничного сканирования с подтверждением каждой страницы. Собственно, 15-я строка это и делает; размеры страницы — A4 (сканирую я обычно именно их), а контраст подобран экспериментально для моего конкретного сканера. Ну а дальше convert из пакета ImageMagick собирает полученные JPEG’и в PDF.

Написав (довольно давно уже) этот скрипт, я дал себе слово, что, буде возникнет необходимость, добавлю возможность указывать опциями командной строки имя файла или, например, размер бумаги и другие параметры. Пока необходимость не возникла…