Wer kennt das nicht, man hat ein Buch oder eine Sammlung von Seiten und möchte das gerne als PDF speichern? Unter Windows gibt es da einige Lösungen, aber meist sind das kommerzielle Programme oder Beigaben zu speziellen Dokumentenscannern. Un*x dagegen erlaubt es, diese Aufgabe einem simplen Script anzuvertrauen. Das Script ist für Linux geschrieben und benötigt sane, imagemagick, Tools für tiff und ghostscript.
Das Script benötigt als einzige Variable das Backend für den Scanner. Es findet automatisch den ersten USB-Scanner. Die Auflösung von 300dpi reicht für die meisten Vorlagen in einer sehr guten Qualität aus. Optional kann mit -r oder –resolution eine andere Auflösung (50 bis 2400 dpi) gewählt werden. Das Script unterstützt A4, A5, A5 quer, Letter und Legal als Papierformat und die Farbauflösungen Graustufen, s/w, Farbe oder Halbton.
Die Konvertierung der pnm-Bilder sorgt dafür, das sie in ausreichender Qualität verkleinert und in 256 Farben (Graustufen, 8 Bit) vorliegen. tiff2pdf kann nicht mit allen Tiff-Formaten umgehen.
Hinweis: In manchen Situationen kann es dazu kommen, das ein fehlerhafter Scan vorkommt. Dazu dient die auskommentierte Zeile nach scanimage.
scan2pdf
#! /bin/bash # Backend definieren backend=snapscan # Variablen mit dem Default belegen mode=Gray resolution=300 outdir=$HOME x=210 y=297 # Optionen einlesen while [ "$1" != "" ]; do case $1 in -m|--mode) shift for m in color gray lineart halftone ; do if test $m=$1; then mode=$1 break fi done ;; -r|--resolution) shift for r in 50 75 100 150 200 300 400 600 1200 2400 ; do if test $r=$1; then resolution=$1 break fi done ;; -o|--outdir) shift if test -d $outdir; then outdir=$1 fi ;; -p|--pagesize) shift case $1 in a5) x=148 y=210 ;; a5r) x=210 y=148 ;; letter) x=216 y=279 ;; legal) x=216 y=356 ;; *) x=210 y=297 ;; esac ;; *) echo "scan2pdf v1.0.0" echo -e "Licence: GPL, 2008 by Udo Neist\n" echo "Usage: $0" echo -e "\t-m|--mode\tcolor|gray|lineart|halftone (default: color)" echo -e "\t-r|--resolution\t50|75|100|150|200|300|400|600|1200|2400 dpi (default: 300)" echo -e "\t-o|--outdir\tDirectory to save PDF-document (default: $HOME)" echo -e "\t-p|--pagesize\tPagesize a4|a5|a5r|letter|legal (default: a4)" exit 1 ;; esac shift done # Scanner finden libusb=`sane-find-scanner |grep libusb| cut -f 10 --delimiter=' '` if test -z $libusb; then echo "Error: Scanner not found." exit 1 fi # Scan Images scanimage --device=$backend:$libusb -p --batch=/tmp/out%03d.pnm --batch-prompt --resolution=$resolution -y $y -x $x --mode $mode # Delete last image as it is invalid #ls out*.pnm | sort | tail -1 | xargs rm # Create TIFFs if test -f /tmp/out*.pnm; then echo "Creating TIFF images..." for pnm in /tmp/out*.pnm ; do if test -f $pnm ; then convert -colors 256 -resize x1024 -colors 256 -colorspace GRAY -depth 8 $pnm ${pnm/.pnm/.tif} fi done if test -f /tmp/out*.tif; then echo "Combining TIFF images..." tiffcp -c zip /tmp/out*.tif /tmp/document.tif else echo "Error: TIFF-Images not avaible." exit 1 fi else echo "Error: PNM-Images not avaible." exit 1 fi # Create PDF if test -f /tmp/document.tif ; then echo "Creating PDF document..." tiff2pdf /tmp/document.tif -o /tmp/document.pdf if test -f /tmp/document.pdf ; then echo "Optimizing PDF..." pdfopt /tmp/document.pdf $outdir/document_opt.pdf else echo "Error: document.pdf not avaible." exit 1 fi else echo "Error: document.tif not avaible." exit 1 fi echo "Cleaning up..." rm -f /tmp/out*.pnm rm -f /tmp/out*.tif rm -f /tmp/document.tif rm -f /tmp/document.pdf echo "Here you can find your PDF-document: $outdir/document_opt.pdf"
Download: scan2pdf.sh
Falls ihr Probleme mit USB-Scannern habt, so dürfte wohl udev die Ursache sein. Mit einem Patch der Rule 50-udev-default.rules ändert man die Zugriffsrechte.
78c78 < KERNEL=="usbscanner*", MODE="0664" --- > KERNEL=="usbscanner*", MODE="0644"
Teilt man diese Änderung udevd mit einem Reload oder einem Restart mit, so werden die Rechte korrekt gesetzt.
# /etc/init.d/boot.udev reload