Login
Newsletter
Werbung

So, 10. April 2005, 00:00

Mehrseitige Dokumente in ein PDF scannen mit scanimage

Letztens hatte ich mir vorgenommen, die Schülerzeitung meiner ehemaligen Schule (der "Maulwurf") zum Download anzubieten. Die bis zu 17 (!) Jahre alten Heftchen wurden noch mit der Schreibmaschine und dem Kopierer "gesetzt" und existieren bisher nicht in digitaler Form. Doch wozu gibt es Scanner und wozu gibt es Linux? Die beiden arbeiten bei solchen Automatisierungsaufgaben vorzüglich zusammen.

Warum gerade Linux? Was ist daran so anders? Unter Linux ist alles nach der guten alten IT-Regel aufgebaut: Teile und Herrsche. Übertragen heißt das: Für jede Aufgabe gibt es kleine Tools, die in einer einzigartigen Vielfalt zu mächtigen Werkzeugen kombiniert werden können. Das wichtigste dabei: Jedes Tool hat genau eine Aufgabe.

Beispiel gefällig? Das Einscannen eines Bildes. Man sollte meinen, dazu nimmt man einfach ein Scan-Programm. Aber was, wenn man Dinge erledigen will, die im Scan-Programm nicht vorgesehen sind? Pech gehabt? Nicht unter Linux. Denn hier gibt es nicht ein Scan-Programm, sondern mehrere Werkzeuge:

  1. ein Scan-Backend (sane-backend), das direkt mit dem Scanner kommuniziert und das Bild im Rohformat zurückliefert. Dieses muss für jeden Scanner extra geschrieben werden.
  2. ein Scan-Frontend (scanimage), welches mit dem Scan-Backend kommuniziert (wenn es sein muss, auch über ein Netz!) und vom Benutzer Parameter wie die Auflösung etc. entgegennimmt. Das Scan-Frontend ist idealerweise ein reines Kommandozeilentool, so dass es auch in Skripten verwendet werden kann, und liefert ein einigermaßen standardisiertes Bildformat zurück.
  3. Mehrere Konverter, die mit den Daten vom Scan-Frontend irgendetwas machen, was sich der Benutzer so vorstellt (z.b. gocr zur Umwandlung von Bild in Text, oder die NetPBM-Bibliothek zur beliebigen Veränderung, Rotation, Skalierung des Bildes)
  4. Die GUI (Graphical User Interface), also das Fensterchen, das der Benutzer dann letztendlich bedient.

Die Vorteile liegen auf der Hand: Volle Automatisierbarkeit, Netzwerktransparenz (ich kann hier zum Beispiel von jedem Rechner aus - auch mit Windows - auf den Scanner zugreifen), Flexibilität. Wenn einem beispielsweise das grafische Interface nicht bunt genug ist, dann schreibt man sich einfach ein neues. Dazu muss man keinen Scanner-Treiber neu erfinden, sondern einfach nur wissen, mit welchen Parametern man scanimage aufrufen muss - und das ist nach Studium des Hilfetextes gar kein Problem.

Für den Endanwender zu kompliziert? Mitnichten. Für reine "User" gibt es Programme wie kooka, quiteinsane, xscanimage, xsane oder die Scanner-Anbindung in gimp. Die machen aber im Hintergrund alle nichts anderes, als scanimage mit den entsprechenden Parametern aufzurufen. :-)

Genug jedoch der Vorrede. Das unten abgedruckte Shell-Skript zum Einlesen mehrseitiger Dokumente in ein PDF macht folgendes:

  1. Die Bilder einzeln mit einem Scanner einlesen (meiner heißt epson:/dev/sg1). Da mein Scanner einen grünen Knopf zum Draufdrücken hat (--wait-for-button), konnte ich den Batch-Betrieb aktivieren (--batch=out%d.pnm), mich bequem daneben setzen, die Seite im Heft umblättern, den Knopf drücken, wieder umblättern, wieder drücken. So hat man das Heft sehr fix eingescannt. scanimage erzeugt dann für jede Seite eine Datei mit Namen out11.pnm, out12.pnm... Ich habe die Zählung bei 11 anfangen lassen (--batch-start=11), damit die Dateien bei sortierter Ausgabe richtig erscheinen (sonst kommt out10 zwar nach out1, aber vor out9). Weitere Parameter wie die zu verwendende Auflösung (--resolution=180) kann man der Anleitung zu scanimage entnehmen. Nach der letzten Seite bricht man zweimal mit Strg-C ab.
  2. Das letzte gescannte Bild löschen. Das ist deshalb nötig, weil dieses ungültig ist (man hat es schließlich mit Strg-C abgebrochen). Jetzt zeigt sich auch, dass es sinnvoll ist, wenn die Dateien sich richtig sortieren.
  3. Aus den pnm-Dateien TIFF-Dateien machen (pnmtotiff). Das hätte man zwar auch mit scanimage direkt machen können, aber da ich die Seiten sowieso noch um -90° drehen muss und das TIFF gerne komprimiert hätte, muss ich die Ausgabe sowieso nochmal anfassen, und so bin ich flexibler. Mit ein bisschen Shell-Magie (sed) erhält man also Dateien mit den Namen tiff11.tif, tiff12.tif, tiff13.tif...
  4. Diese kann man dann mit tiffcp zu einem einzigen, mehrseitigen TIFF zusammenkopieren.
  5. Das fertige TIFF wandelt man mit tiff2pdf in ein PDF um (mit ein paar Parametern für Autor und Titel).
  6. Das PDF schickt man nochmal durch einen Optimizer (pdfopt), damit es "linearisiert" ist, man also beim Anzeigen auf einer Website die ersten Seiten schon betrachten kann, während der Rest noch im Hintergrund heruntergeladen wird.
  7. Danach räumt man noch ein wenig auf und löscht alle Zwischendateien.
  8. Übrig bleibt ein fertiges document_opt.pdf

Kommentare (Insgesamt: 6 || Alle anzeigen )
danke (less, Mo, 8. September 2014)
Re[2]: USb Scanner (tcash, Mo, 27. Juni 2011)
Re: USb Scanner (tcash, Mo, 27. Juni 2011)
USb Scanner (tcash, Mo, 27. Juni 2011)
Re: Fehler (hjb, Fr, 15. April 2011)
Pro-Linux
Pro-Linux @Facebook
Neue Nachrichten
Werbung