Durchsuchbare PDFs einscannen

  Prof.P   Lesezeit: 4 Minuten  🗪 19 Kommentare

Dokumente als PDFs einscannen und mittels OCR durchsuchbar machen am Beispiel der Distributionen Manjaro und Arch Linux.

durchsuchbare pdfs einscannen

Mittels des Programms GNOME Simple-Scan (Deutscher Name "Dokument-Scanner") lassen sich Dokumente einscannen und als PDF ablegen (funktioniert auch unter KDE Plasma).

Diese sind aber leider per se nicht nach Text durchsuchbar. Dazu muss mittels OCR eine Text-Erkennungs-Schicht in das Dokument eingebettet werden. GNOME Simple-Scan bringt diese Fähigkeit nicht von Hause aus mit, aber die eingescannten Dokumente lassen sich beim Speichern per optionalen Kommandozeilen-Aufruf an ein Programm zur Nachbearbeitung übergeben, im Artikel wird das Kommandozeilen-Tool OCRmyPDF verwendet.

GNOME Simple-Scan und OCRmyPDF installieren

Das Paket Simple-Scan über die Paketverwaltung aus den Standard-Repositories installieren. Das Paket ocrmypdf kann in Arch und Manjaro aus dem AUR installiert werden. Dazu muss ein AUR-Helper wie YAY oder Paru auf dem System installiert sein. (Genereller Hinweis: Bitte AUR-Sicherheitshinweise bei der Verwendung des AUR beachten.)

In der Shell sieht das so aus:

Manjaro:

pamac install simple-scan
yay ocrmypdf

Arch:

sudo pacman -S simple-scan
yay ocrmypdf

Bei der Installation von ocrmypdf unbedingt die optionale Deutsche OCR-Spracherkennung tesseract-data-deu (und am besten die oft verwendete Sprache Englisch tesseract-data-eng) mitinstallieren lassen!

GNOME Simple-Scan konfigurieren

Unter Einstellungen die Nachbearbeitung einschalten und ein Skript hinterlegen, welches im nächsten Schritt erzeugt wird, z.B. /home/user/.local/bin/ocrmypdf.sh (Name und Ort der Datei sind frei wählbar, sie muss als Shell-Script aber natürlich ausführbar gemacht werden und an dem hier angegebenem Ort mit dem angegebenem Namen erzeugt werden.)

Script zur OCR-Erkennung erstellen

Hier wird das so eben eingescannte Dokument von der GNOME Simple-Scan GUI beim Druck auf "Speichern" an ocrmypdf übergeben. An 4. Stelle der Kommandozeilen-Argumente befindet sich der verwendete Dateiname (dies habe ich nicht dokumentiert gefunden, sondern rausgetraced; wer eine entsprechende Doku findet, gerne Hinweis in den Kommentaren). Wichtig ist ebenfalls die Spezifikation der zu verwendeten Texterkennungs-Sprache, in dem Fall sind das Englisch und Deutsch:

Grob gesagt, ist die Syntax für OCRmyPDF:

ocrmypdf <zu erkennende sprache(n)> <name der zu untersuchenden PDF> <name der zu erzeugenden PDF>

(Weiteres lässt sich mit ocrmypdf --help anzeigen.)

Ergo muss nun eine neue Shell-Script Datei erzeugt werden, z.B. /home/user/.local/bin/ocrmypdf.sh mit folgendem Inhalt:

#!/usr/bin/env bash
/usr/bin/ocrmypdf --LANGUAGE eng+deu "$4" "$4"

In o.g. Beispiel werden Englisch und Deutsch erkannt und die ursprüngliche PDF-Datei wird mit der PDF-Datei ersetzt, die die OCR-Daten enthält (dies könnte entsprechend geändert werden, z.B. in "$4"_output.pdf o.ä.).

Das erzeugte Dokument kann nun im PDF-Betrachter der Wahl nach Text durchsucht werden. (Dies funktioniert z.B. direkt auch in der Content-Suche im Dolphin Dateimanager, andere Dateimanager wurden nicht getestet.)

Quellen:

https://apps.gnome.org/SimpleScan/

https://ocrmypdf.readthedocs.io/en/latest/index.html

Tags

PDF, Scannen, SimpleScan

Michael
Geschrieben von Michael am 24. Oktober 2023 um 11:18

Ich bevorzuge gscan2pdf (https://software.manjaro.org/package/gscan2pdf). Das bringt bereits OCR und viele weitere Funktionen mit.

Prof.P
Geschrieben von Prof.P am 24. Oktober 2023 um 15:51

Danke, werde ich mir anschauen.

Christopher
Geschrieben von Christopher am 24. Oktober 2023 um 20:46

Wollte ich just auch einwerfen wo ich den Artikel gesehen habe. Wenn, dann nutze ich auch gscan2pdf, allerdings fehlt mir die Ausgabe als PDF/A. Vielleicht weiß wer wie ich PDF/A als Output von gscan2pdf erhalten kann. Ansonsten ist das ein Stück spitzen Software die super funktioniert. Eigentlich hatte ich meinen Epson WorkForce ES-580W Dokumenten Scanner so ausgewählt, dass ich ohne Software via Touch auf ein FTP oder SMB Laufwerk scannen kann (funktioniert super), aber diese sind zwar als PDF/A, aber nicht durchsuchbar gescannt. Daher nutze ich ab und an gscan2pdf wenn es durchsuchbar sein soll. Ist aber dann nicht PDF/A. Eine Kröte ist immer zu schlucken. Also wenn wer weiß wie gscan2pdf ein PDF/A am Ende aus gibt, dem wäre ich sehr verbunden.

Klaus
Geschrieben von Klaus am 25. Oktober 2023 um 20:03

Hallo Christopher: Laut dem cookbook zu ocrmypdf auf readthedocs.io (https://ocrmypdf.readthedocs.io/en/latest/cookbook.html) produziert ocrmypdf standardmäßig PDF/A Dokumente. Will man das nicht, muss man einen weiteren Parameter angeben "--output-type pdf" um ein gewöhnliches PDF zu erhalten. Bei meinen Test stand in den Eigenschaften der Doikumente als Format PDF/A - 2b. Simple-Scan/Dcoument Scanner spechert Scans ansonsten im PDF-1.3 Format. Gruß, Klaus

Christopher
Geschrieben von Christopher am 26. Oktober 2023 um 23:36

Das würde aber nur mit Simple Scan und der Weiterleitung funktionieren. gscan2pdf produziert standard mäßig nur PDF files und kein PDF/A. Gibt es also eine Möglichkeit bei gscan2pdf das auch nach ocrmypdf weiter zu leiten oder mit der standard genutzten OCR Engine ein PDF/A zu erzeugen?

Stefan
Geschrieben von Stefan am 25. Oktober 2023 um 21:28

Auch ich suche aktuell nach einer geeigneten Software, um auch OCR mit PDF-A zu handlen. Daher bin ich über den hier vorgestellten Ansatz sehr dankbar und testen ihn. Das Tool ocrmypdf hatte ich vorher bereits getestet, nur nicht das geeignete Scantool, welches dieses aufrufen kann.

Auf meiner Suche bin ich auch über einen sehr interessanten Artikel bzgl ZUGFeRD gestolpert, welchen man sicher auch gut mit ocrmypdf abbilden kann (https://ghostscript.com/blog/zugferd.html).

Der erste Ansatz würde vermutlich in etwas so aussehen: ocrmypdf -l eng+deu --color-conversion-strategy RGB --force-ocr --output-type pdfa-3 scanned.pdf scanned_ocr_pdfa3.pdf

Lg Stefan

Tealk
Geschrieben von Tealk am 24. Oktober 2023 um 11:24

Frage, warum benutzt du hier nicht beides mal yay?

yay -S simple-scan yay ocrmypdf

Prof.P
Geschrieben von Prof.P am 24. Oktober 2023 um 15:51

Weil das AUR potenziell gefährlich ist verwende ich so viel wie möglich aus den offiziellen Repos.

Michael
Geschrieben von Michael am 24. Oktober 2023 um 14:48

Das AUR muss nicht immer benutzt werden, wenn Garuda verwendet wird oder die Paketquelle installiert von Chaotic https://aur.chaotic.cx/ Bei mir hat es den Admin-Aufwand stark reduziert

Prof.P
Geschrieben von Prof.P am 24. Oktober 2023 um 16:36

Ich verwende das chaotix-AUR auch, aber das mag ich nicht in einer Installation von Scanner-Software beschreiben; wäre ein eigener Artikel, magst Du...? Dann würde ich auf drauf verlinken...

kamome
Geschrieben von kamome am 24. Oktober 2023 um 23:51

> funktioniert auch unter KDE Plasma

Oder man verwendet dort skanlite ;)

Prof.P
Geschrieben von Prof.P am 25. Oktober 2023 um 17:59

Skanlite kann kein OCR, oder ich habe es nicht gefunden!? Mit dem verwendeten Scanner (Brother ADS-1700W) hab ich es nicht mal geschafft mehrere Seiten in einem Rutsch einzuscanner. Daher die GNOME/GTK Tools.

Jörg
Geschrieben von Jörg am 25. Oktober 2023 um 09:12

Moin, ich benutze dazu gerne Paperwork (https://www.openpaper.work/de/), ja ist eigentlich eine Dokumentenverwaltung, aber genau dabei brauche ich eben durchsuchbare PDFs.

LG Jörg

Christopher
Geschrieben von Christopher am 25. Oktober 2023 um 12:26

Ja, paperwork habe ich mir auch angeschaut und es macht was es soll. Einen Ticken mehr ist paperless-ngx, dass lässt sich aber nur als Docker wirklich vernünftig installieren. Allerdings steigt mit allen Lösungen wieder der administrative Aufwand. Für mich habe ich erst einmal entschieden alles in einer eigenen Verzeichnis Struktur abzulegen und zu organisieren. Damit bin ich von jeglicher Software unabhängig und habe keinen weiteren administrativen Aufwand. Zumal, fällt eine Software weg (Projekt wird beendet, ...), dann habe ich einen Haufen unsortierter Dokumente. Abhängigkeiten! Wenn die Anzahl der zu verwaltenden Dokumente mehr wird, dann bin ich mir auch sicher, dass ohne eine Dokumenten Verwaltung das sehr schwierig wird. Für zu Hause denke ich aber das es nicht mehr sein muss. Zur Not lassen sich alle meine Dokumente später auch erfassen.

Jörg
Geschrieben von Jörg am 25. Oktober 2023 um 16:43

Ja, da hast du einen Punkt ;-) - ist eine gute Anregung meinen Workflow mal zu überdenken.

seuk
Geschrieben von seuk am 2. November 2023 um 07:46

Du kannst in paperless ngx das Format der Dokumente mittels Platzhaltern definieren, so dass die Ordnerstruktur für dich erstellt wird. Dadurch sollte es keine Probleme geben, wenn in Zukunft ein anderes DMS (oder keins) genutzt werden soll.

https://docs.paperless-ngx.com/advanced_usage/#file-name-handling

Klaus
Geschrieben von Klaus am 25. Oktober 2023 um 19:49

Danke für die Idee, Prof. P! Ich benütze Simple-Scan/Document Scanner sehr viel, da es für meine Bedürfnissee einfach gut funktioniert. Ich habe dein Skript ein bisschen angepasst, so dass es auf meinem System (Xubuntu) läuft und auch ein kleines Problem umseilt, so dass nicht wahllos alle Dateiformate OCRt werden.. Hier das Skript: '''

!/usr/bin/env bash

if [[ $3 == *.pdf ]] then /usr/bin/ocrmypdf -l eng+deu+nld $3 $3 fi ''' $4 hat bei mir nicht funktionert. Bei mir ist der Dateiname der 3. Parmater.
Meine Version checkt erst an Hand der Dateiendung, ob es sich um ein PDF handelt, bevor ocrmypdf aufgerufen wird. Ohne diese Kontrolle waren meine als JPG oder PNG abgespeicherten Scans nicht mehr lesbar.

Patrick
Geschrieben von Patrick am 14. Dezember 2023 um 13:47

Bei mir hat dein Skript nur mit folgender Anpassung funktioniert:

!/bin/bash

if [[ "$3" == *".pdf" ]]; then /usr/bin/ocrmypdf -l eng+deu --force-ocr "$3" "$3" fi

ben
Geschrieben von ben am 16. Dezember 2023 um 02:40

Danke für den Artikel, der mir wichtige Impulse geliefert hat.

Hier der gewünschte Hinweis zur Doku. Dort sieht man welches Argument für die Dateinamen verwendet werden muss und bekommt sogleich einen Test auf PDF mime_type mitgeliefert: https://gitlab.gnome.org/GNOME/simple-scan/-/blob/master/src/simple-scan-postprocessing.sh

Laut OCRmyPDF Doku gibt es kein Argument --LANGUAGE. Es muss "-l" oder "--languages" verwendet werden.