• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

[Info] Mehrere Dokumente direkt in PDF scannen

Fisnix

Newbie
Hallo,

weil ich nur einen einfachen Scanner (Canon Lide 30, SANE Backend plustek) besitze aber trotzdem öfter mehrere DIN A4 Papierdokumente in eine einzige PDF Datei archivieren möchte, habe ich hierfür ein kleines Skript geschrieben. Vielleicht hat jemand anderes auch Verwendung dafür. Man benötigt außer einem Scanner mit funktionierendem Backend auch das Konsolenfrontend scanimage sowie das Grafiktool ImageMagick.

scanimage bietet zwar mit der option --batch-prompt und --batch-count die Möglichkeit, mehrere Seiten hintereinander zu scannen und man kann die so erstellten pnm-Dateien genauso weiterbehandeln, wie am Ende meines Skripts, aber ich wollte alles gerne noch etwas individueller gestalten. Deswegen rufe ich scanimage innerhalb einer Schleife auf.

Da ich einen Kernel > 2.6 verwende gibt es bei mir das Modul scanner nicht mehr und libusb kümmert sich um den Scanner. Seltsamerweise erscheint mein Scanner nach jedem Booten entweder unter plustek:libusb:001:005 oder unter plustek:libusb:001:003. Deswegen schneide ich mir zu Beginn des Skripts den gerade gültigen Namen aus der Ausgabe von scanimage -L aus und übergebe diesen dann beim Aufruf von scanimage.

Bestimmt gibt es hierfür noch eine elegantere Lösung.

Wer einen festen Device Eintrag für seinen Scanner hat, kann die entsprechenden Zeilen einfach löschen und SCANNER=/dev/usbscanner oder Ähnliches schreiben.
Nachdem alle Seiten als pnm-Dateien gespeichert wurden, werden diese zur Platzersparnis in jpeg-Dateien umgewandelt und schließlich in ein PDF-Dokument geschrieben. Alle Grafikdateien werden danach wieder gelöscht.

Das Skript legt alle Dateien direkt im Homeverzeichnis an. Dies und die Dateinamen kann man natürlich beliebig anpassen.

Skript scan2pdf:
Code:
#! /bin/bash
clear

#Scanner bestimmen bei Verwendung von libusb 
#Wenn nicht libusb verwendet wird einfach 
#SCANNER="/dev/usbscanner" oder ähnliches setzen.

SCANNERMESSAGE=$(scanimage -L)
START=$(expr index "$SCANNERMESSAGE" \`)
START=$[$START + 1]
ENDE=$(expr index "$SCANNERMESSAGE" \')
INTERVALL=$[$ENDE - $START]
SCANNER=$(expr substr "$SCANNERMESSAGE" $START $INTERVALL)

echo "Mehrere DIN A4 Dokumente in ein PDF scannen"
echo "*******************************************"
echo "Scanner ist $SCANNER"
echo

echo "Auflösungen:"
echo "   [1]  50 ppi" 
echo "   [2] 100 ppi" 
echo "   [3] 150 ppi" 
echo "   [4] 300 ppi" 
echo
echo -n "Bitte Scanauflösung auswählen: "
read AUSWAHL_PPI

case $AUSWAHL_PPI in
 1) RES=50;;
 2) RES=100;;
 3) RES=150;;
 4) RES=300;;
 *) RES=100;;
esac

echo "Scanauflösung wird auf $RES ppi gesetzt"
echo

COUNT=1

echo -n "$COUNT. Seite einlegen und [beliebige Taste] für Scannen oder [b] für Beenden: "
read EINGABE

if [ "$EINGABE" = "b" ]; then
 exit 0
fi

while [ "$EINGABE" != "b" ]
do
 POSTFIX=$(printf "%04d" $COUNT)
 echo "Scanne scan2pdf$POSTFIX.pnm..." 

 scanimage --device=$SCANNER --resolution=$RES -l 0mm -t 0mm -x210mm -y297mm > $HOME/scan2pdf$POSTFIX.pnm
 COUNT=$[$COUNT + 1]
 echo -n "$COUNT. Seite einlegen und [beliebige Taste] für Scannen oder [b] für Beenden: "
 read EINGABE
done


echo "Erzeuge PDF Dokument..."

mogrify -format jpeg $HOME/scan2pdf*.pnm
convert -adjoin $HOME/scan2pdf*.jpeg $HOME/scan2pdf_doc.pdf
echo "Aufräumen..."
rm $HOME/scan2pdf*.pnm
rm $HOME/scan2pdf*.jpeg
 
Oben