Benutzer-Werkzeuge

Webseiten-Werkzeuge


Writing /srv/www/htdocs/udo/singollo.de/linux.singollo.de/public_html/data/cache/0/0a7dcb63d10aec3eef8780dc2ea5c77f.metadata failed
scan:scannen_nach:pdf

Inhaltsverzeichnis

scan2pdf

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.

Script

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

Patch zu udev

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
scan/scannen_nach/pdf.txt · Zuletzt geändert: 07.10.2012 18:31 (Externe Bearbeitung)