ubuntuusers.de

OCRmyPDF über Nautilus-Menü ausführen

Status: Gelöst | Ubuntu-Version: Ubuntu 24.10 (Oracular Oriole)
Antworten |

19feet

Anmeldungsdatum:
24. Oktober 2010

Beiträge: 168

Dieses Script dient dazu, das Tool „ocrmypdf“ unter Ubuntu automatisch einzurichten und ein Nautilus-Skript zu erstellen, mit dem sich PDF-Dokumente schnell und einfach durchsuchbar machen lassen. Dabei wird zunächst überprüft, ob „ocrmypdf“ bereits installiert ist; falls nicht, wird es zusammen mit dem deutschen Tesseract-Sprachpaket (tesseract-ocr-deu) über die Paketverwaltung installiert. Anschließend wird im Ordner „~/.local/share/nautilus/scripts“ ein Skript erzeugt, das im Rechtsklick-Menü von Nautilus auftaucht, sobald man eine PDF-Datei ausgewählt hat. Wird es ausgeführt, wandelt „ocrmypdf“ die ausgewählte PDF mithilfe der deutschen Texterkennung (-l deu) durchsuchbar um und richtet dabei schief eingescannte Seiten automatisch aus (-d). Nach Abschluss der OCR kann man wählen, ob die ursprüngliche Datei überschrieben oder eine neue Datei mit dem Zusatz „_ocr“ angelegt werden soll. Damit vereinfacht das Skript den täglichen Umgang mit gescannten Dokumenten, da sie bequem per Mausklick durchsuchbar gemacht werden können.

#!/usr/bin/env bash

# Dieses Skript installiert falls nötig ocrmypdf, prüft ob das deutsche Sprachpaket
# für Tesseract vorhanden ist und legt das Nautilus-Skripte-Verzeichnis an.
# Anschließend erstellt es ein Skript, das über das Nautilus-Kontextmenü aufgerufen
# werden kann, um PDFs mittels OCR durchsuchbar zu machen.

# 1. Prüfung auf ocrmypdf
if ! command -v ocrmypdf &> /dev/null
then
    echo "ocrmypdf ist nicht installiert. Installation wird durchgeführt..."
    sudo apt-get update && sudo apt-get install -y ocrmypdf
    if [ $? -ne 0 ]; then
        echo "Die Installation von ocrmypdf ist fehlgeschlagen."
        exit 1
    fi
else
    echo "ocrmypdf ist bereits installiert."
fi

# 2. Prüfung, ob die deutsche Sprache (deu) für Tesseract installiert ist
#    Das zugehörige Paket heißt in Ubuntu: tesseract-ocr-deu
#    Man könnte alternativ auch prüfen, ob 'deu.traineddata' in tessdata vorhanden ist.
if ! dpkg -s tesseract-ocr-deu &>/dev/null
then
    echo "Das deutsche Tesseract-Sprachpaket (tesseract-ocr-deu) ist nicht installiert. Installation wird durchgeführt..."
    sudo apt-get update && sudo apt-get install -y tesseract-ocr-deu
    if [ $? -ne 0 ]; then
        echo "Die Installation des deutschen Tesseract-Sprachpakets ist fehlgeschlagen."
        exit 1
    fi
else
    echo "Das deutsche Tesseract-Sprachpaket (tesseract-ocr-deu) ist bereits installiert."
fi

# 3. Nautilus Skripte Verzeichnis erstellen, falls nicht vorhanden
SCRIPT_DIR="$HOME/.local/share/nautilus/scripts"
if [ ! -d "$SCRIPT_DIR" ]; then
    echo "Erstelle Nautilus-Skripte-Verzeichnis unter: $SCRIPT_DIR"
    mkdir -p "$SCRIPT_DIR"
else
    echo "Nautilus-Skripte-Verzeichnis existiert bereits."
fi

# 4. Skriptdatei erstellen
SCRIPT_FILE="$SCRIPT_DIR/PDF_durchsuchbar_machen"
echo "Erstelle Skriptdatei: $SCRIPT_FILE"

cat > "$SCRIPT_FILE" << 'EOF'
#!/usr/bin/env bash
# Dieses Skript macht eine ausgewählte PDF mittels ocrmypdf durchsuchbar.
# Nach erfolgreicher OCR-Umwandlung fragt es, ob die Originaldatei überschrieben
# oder eine neue Datei erstellt werden soll. Bei Erstellung einer neuen Datei
# wird der Zusatz "_ocr" an den Basisnamen angehängt.

inputfile="$1"
tempfile="/tmp/ocr_$$.pdf"

# Ausführen von ocrmypdf mit deutscher Texterkennung (-l deu) und Deskew (-d)
ocrmypdf -l deu -d "$inputfile" "$tempfile"
if [ $? -ne 0 ]; then
    # Bei Fehlern temporäre Datei entfernen
    rm -f "$tempfile"
    zenity --error --text="Die OCR-Umwandlung ist fehlgeschlagen."
    exit 1
fi

# Wenn erfolgreich, Nutzer fragen, ob die Datei überschrieben oder eine neue Datei erstellt werden soll
zenity --question \
  --text="Die OCR-Umwandlung war erfolgreich.\nMöchten Sie die Originaldatei überschreiben oder eine neue Datei erstellen?" \
  --ok-label="Überschreiben" \
  --cancel-label="Neue Datei erstellen"

if [ $? -eq 0 ]; then
    # Nutzer hat 'Überschreiben' ausgewählt
    mv "$tempfile" "$inputfile"
    zenity --info --text="Die Originaldatei wurde erfolgreich durchsuchbar gemacht."
else
    # Nutzer hat 'Neue Datei erstellen' ausgewählt
    
    basename="$(basename "$inputfile")"
    dirname="$(dirname "$inputfile")"
    extension="${basename##*.}"
    filename_without_ext="${basename%.*}"

    # Neuer Dateiname mit _ocr
    newfile="${dirname}/${filename_without_ext}_ocr.${extension}"

    # Falls es bereits eine Datei mit diesem Namen gibt, hänge eine Zahl an
    counter=1
    while [ -e "$newfile" ]; do
        newfile="${dirname}/${filename_without_ext}_ocr_${counter}.${extension}"
        counter=$((counter+1))
    done

    mv "$tempfile" "$newfile"
    zenity --info --text="Eine neue durchsuchbare Datei wurde erstellt:\n\n$newfile"
fi
EOF

# Skript ausführbar machen
chmod +x "$SCRIPT_FILE"
echo "Skript erfolgreich erstellt und ausführbar gemacht."

echo "Die Installation ist abgeschlossen. Bitte starten Sie Nautilus ggf. neu."
echo "Über Rechtsklick auf eine PDF -> Skripte -> 'PDF_durchsuchbar_machen' können Sie das Skript aufrufen."

Moderiert von sebix:

Thema in einen passenden Forenbereich verschoben, da keine Supportfrage erkennbar ist. Bitte beachte die als wichtig markierten Themen („Welche Themen gehören hier her und welche nicht?“) in jedem Forenbereich. Danke.

Berlin_1946 Team-Icon

Supporter, Wikiteam

Anmeldungsdatum:
18. September 2009

Beiträge: 10111

Hallo 19feet

Das ist keine keine Supportanfrage, damit dein "Beitrag" erhalten bleibt, erstelle bitte ein Howto.

Hier werden diese Dinge behandelt:

  • Bedienung von Programmen

  • Konfiguration von Programmen

  • Suche nach Programmen für einen vorgegebenen Zweck

19feet

(Themenstarter)

Anmeldungsdatum:
24. Oktober 2010

Beiträge: 168

Berlin_1946 schrieb:

Hallo 19feet

Das ist keine keine Supportanfrage, damit dein "Beitrag" erhalten bleibt, erstelle bitte ein Howto.

Hier werden diese Dinge behandelt:

  • Bedienung von Programmen

  • Konfiguration von Programmen

  • Suche nach Programmen für einen vorgegebenen Zweck

Vielen Dank für den Hinweis. Ich habe es ausprobiert. Beste Grüße, 19feet

Antworten |