Ich scanne noch nicht ein aber verschiebe bereits auf Rechner gespeicherte PDF Dokumente nach Paperless CONSUME
Problem: Einige frühere PDF Versionen werden von Paperless nicht importiert und enden mit Fehlermeldun und Exceptions im Log
paperless import aus CONSUME Ordner kommt es zu Fehlern
File "/usr/local/lib/python3.12/site-packages/ocrmypdf/builtin_plugins/ghostscript.py", line 131, in generate_pdfa
ghostscript.generate_pdfa(
File "/usr/local/lib/python3.12/site-packages/ocrmypdf/_exec/ghostscript.py", line 312, in generate_pdfa
raise SubprocessOutputError('Ghostscript PDF/A rendering failed') from e
ocrmypdf.exceptions.SubprocessOutputError: Ghostscript PDF/A rendering failed
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/usr/local/lib/python3.12/site-packages/asgiref/sync.py", line 327, in main_wrap
raise exc_info[1]
File "/usr/src/paperless/src/documents/consumer.py", line 493, in run
document_parser.parse(self.working_copy, mime_type, self.filename)
File "/usr/src/paperless/src/paperless_tesseract/parsers.py", line 406, in parse
raise ParseError(
documents.parsers.ParseError: SubprocessOutputError: Ghostscript PDF/A rendering failed. See logs for more information.
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/usr/src/paperless/src/documents/tasks.py", line 179, in consume_file
msg = plugin.run()
File "/usr/src/paperless/src/documents/consumer.py", line 525, in run
self._fail(
File "/usr/src/paperless/src/documents/consumer.py", line 152, in _fail
raise ConsumerError(f"{self.filename}: {log_message or message}") from exception
documents.consumer.ConsumerError: Jahreskontoauszug_2023_21367323.pdf: Error occurred while consuming document Jahreskontoauszug_2023_21367323.pdf: SubprocessOutputError: Ghostscript PDF/A rendering failed. See logs for more information.
Abhilfe schafft ein NEU Konvertieren zu einer PDF/A Norm
ich habs mit Tools probiert aber ich will doch nicht jede Datei einzeln behandeln
BASH Script
abgelegt im paperless-office faule_pdfs_konvertieren.sh und ausführbar gemacht mit
chmod +x faule_pdfs_konvertieren.sh
Die bockigen PDF Dateien habe ich im Ordner pdf-block abgelegt.
Probiert es erstmal mit nur einem PDF. Ich habe 10 auf einmal durchprobiert und es ging.
paperless-office
|-- consume
|-- pdf-block
Ok, das Script tut folgendes
Nimmt sich jedes PDF Datei im Ordner PDF-Block
Konvertiert es zu einem PDF/A Format was auch Paperless versteht (nutzt dabei das Tool ocrmypdf im laufenden Paperless Webserver Container)
Kopiert die neue Version mit gleichem Dateinamen in das Consume Verzeichnis und Paperless startet den automatischen Import
Löscht alte Datei und temporär angelegtes Verzeichnis
# Bacardi, Version 1.0 April 2025
# Problem: Einige PDF Dateien (z.B. bei Bank Kontoauszügen) können von Paperless nicht richtig PDF/A konvertiert werden
# Was das Script macht:
# - Nimmt die PDF Dateien aus dem Verzeichnis CONSUME/PDF-BLOCK
# - Nutzt das Tool ocrmypdf im laufenden Paperless Webserver Container und
# - konvertiert diese mit dem Tool ocrmypdf und legt die konvertierte Version mit gleichen Namen in das CONSUME Verzeichnis wo Paperless automatisch seine Arbeit aufnimmt
# - löscht die Datei im PDF-BLOCK Verzeichnis und auch das temporär angelegte Tmp Verzeichnis
# - Voraussetung: Script funktioniert nur wenn Paperless Container laufen!
#!/bin/bash
# === Konfiguration ===
WATCH_DIR="/volume1/docker/paperless-office/consume/pdf-block/" # Reales Verzeichnis auf der NAS
CONTAINER_NAME="paperless-office-webserver" # Name Eures Paperless Webserver Containers
CONTAINER_CONSUME_DIR="/usr/src/paperless/consume" # Name des Consume Ordners im Container
# === Prüfung, ob das Quellverzeichnis existiert ===
if [ ! -d "$WATCH_DIR" ]; then
echo "[FEHLER] Quellordner existiert nicht: $WATCH_DIR"
exit 1
fi
echo "[OK] Starte Verarbeitung der PDF-Dateien im Verzeichnis: $WATCH_DIR"
# === Initialisierung der Zähler ===
SUCCESS=0
FAILED=0
# === Verarbeitung jeder PDF-Datei ===
for FILE in "$WATCH_DIR"*.pdf; do
[ -e "$FILE" ] || continue
FILENAME=$(basename "$FILE")
# Temporäres Verzeichnisanlegen unter consume/pdf-block
TEMP_DIR=$(mktemp -d -p "$WATCH_DIR" tmp.XXXXXXXXXX)
# Bei Script Abbrucgh oder am Ende wird das Temp Verzeichnis gelöscht
trap 'rm -rf "$TEMP_DIR"' EXIT
cp "$FILE" "$TEMP_DIR/$FILENAME"
# Temporäres Verzeichnis in den Container kopieren
docker cp "$TEMP_DIR" "$CONTAINER_NAME:/tmp/ocr_temp"
# OCR-Verarbeitung im Container durchführen
docker exec "$CONTAINER_NAME" ocrmypdf --force-ocr --output-type pdfa "/tmp/ocr_temp/$FILENAME" "/tmp/ocr_temp/ocr_$FILENAME"
if [ $? -eq 0 ]; then
# Konvertierte Datei aus dem Container zurückkopieren
docker cp "$CONTAINER_NAME:/tmp/ocr_temp/ocr_$FILENAME" "$WATCH_DIR$FILENAME"
# Datei in das consume-Verzeichnis verschieben
docker cp "$WATCH_DIR$FILENAME" "$CONTAINER_NAME:$CONTAINER_CONSUME_DIR/$FILENAME"
# Temporäres Verzeichnis im Container entfernen
docker exec "$CONTAINER_NAME" rm -rf "/tmp/ocr_temp"
# Tmp Verzeichnis und alte PDF löschen
rm -rf "$TEMP_DIR"
rm "$FILE"
echo "[OK] Erfolgreich verarbeitet: $FILENAME"
((SUCCESS++))
else
echo "[FEHLER] Fehler bei der Verarbeitung von: $FILENAME"
((FAILED++))
fi
done
# === Finale Message ===
echo
if [ "$FAILED" -eq 0 ]; then
echo "[FERTIG] Alle $SUCCESS PDF-Dateien wurden erfolgreich verarbeitet."
else
echo "[WARNUNG] $SUCCESS PDF-Dateien erfolgreich verarbeitet, $FAILED mit Fehlern. Details siehe oben."
fi
Ich habe es nur auf der Synology NAS ausprobiert aber eigentlich müßte es überall gehen wo sich Bash Scripte ausführen lassen. Müßt Ihr probieren.
Wie immer: Anregungen jeder Art sind willkommen.
Vielleicht geht es auch ganz anders? Ihr müßt doch auch schon einmal auf diese Art von PDF Problemen gestoßen sein oder scannt Ihr wirklich nur ein?
Gutes Gelingen!
EDIT:
Was zum Gucken - ich jage gerade 10 weitere faule PDF’s durch die Neukonvertierung. NAS CPU am Anschlag
Ich kann dir meine Gründe nennen - entscheiden muss du selber:
Ich mache seit rund 14 Jahren Papierloses Dokumentenverwaltung zuhause, also ist da einiges zusammen gekommen.
Ich hab alleine 2 Abende intensiv dran gesessen, nur meine Gehaltsabrechnung in PaperlessNGX zu importieren und richtig zu taggen, der hat z.b. das Datum immer falsch gesetzt - da hab ich dann aufgehört, weil ich längst nicht alle hatte. Einige hat der garnicht erst importiert.
Der Aufwand der Nachbearbeitet rechtfertig keinen Mehrwert der Software für mich.
Ich bennene alle Dokumente eindeutig, die Ordnerstruktur, wo die abgelegt sind, ich ähnlich wie bei Aktenordner im Regal.
Die finde ich bei Bedarf in kurzer Zeit manuell jedes Dokument und wenn ich z.b. die Rechnung vom Handy brauche, findet der MacOS-Finder die in 1 Sekunde, so schnell hab ich PaperlessNGX nicht mal geöffnet.
Und der wichtigste Punkt ist, was ist, wenn jemand auf meine Unterlagen zugreifen muss, falls mir was zustösst. Der braucht keine Extra-Software, der hängt die Backup-Festplatte an seinen Rechner, egal ob Mac oder Windows oder Linux und kann direkt auf alles zugreifen.
Das war em Ende der Killer für sämtliche Programme.
Nicht das wir uns falsch verstehen, PaperlessNGX ist ne klasse Software, genauso wie z.b Devonthink auf Apple und andere DMS-Software - aber für mich im Hausgebraucht vollkommen oversized und unnötig.
Danke für die Erfahrung selbst wenn sie etwas ernüchternd ist.
Darüber habe ich wirklich auch nachgedacht zumal ich selbst nach 40 Jahren klassische Papierordner Struktur auch damit brechen will und die wenigen Originale nach ASN Nummern ablegen.
Meine Frau ist noch nicht sehr IT affine und wie soll sie dann was finden? Ich sprach mehrfach mit ihr mit deutlichen Worten wenn mir etwas passiert und war sehr erstaunt, sie will es immer noch.
Ich werde am Ende aber unsere Notfall Doku erweitern. Mit Hilfe eines Fachmanns kommt sie dann an alles.
ich glaube, dass das ein Problem mit Ghostscript ist, da muss, glaube ich, nur eine Einstellung in paperless-ngx gemacht werden, da ich heute aber den ganzen Tag am Autofahren und Wohnung vom Stiefsohn einrichten war, habe ich keine Lust mehr nachzuschauen.
“Newer versions of OCRmyPDF will fail if it encounters errors during processing. This is intentional as the output archive file may differ in unexpected or undesired ways from the original. As the logs indicate, if you encounter this error you can set PAPERLESS_OCR_USER_ARGS: '{"continue_on_soft_render_error": true}' to try to ‘force’ processing documents with this issue.”
Docker gestoppt, Parameter eingetragen, Docker gestartet, 2 bockige PDF nach Consume kopiert und … sie wurden importiert
Danke
EDIT
Ich find meine Script Idee auch geil aber der bessere Ansatz soll gewinnen. Du hast eine Lösung mehr … obwohl das in Deinem Stadium wahrscheinlich keine Rolle mehr spielt. Danke nochmal
Danke für die Blumen, ich hab ja schon öfter gesagt, ich lese viel, sehr viel, da wird viel in dem kleinen grauen Kasten abgespeichert und manche Sachen schwemmen, ohne danach zu suchen, an die Oberfläche, wie diese Erinnerung, andere muss ich aber auch erst in den ganzen Windungen meines Gehirns suchen, das kann dauern, weil ja immer neue Sachen hereinkommen.
PAPERLESS_SECRET_KEY=geheim
#PAPERLESS_URL=https://example.com
#PAPERLESS_CSRF_TRUSTED_ORIGINS=https://example.com # can be set using PAPERLESS_URL
#PAPERLESS_ALLOWED_HOSTS=example.com,www.example.com # can be set using PAPERLESS_URL
#PAPERLESS_CORS_ALLOWED_HOSTS=https://localhost:8080,https://example.com # can be set using PAPERLESS_URL
#PAPERLESS_FORCE_SCRIPT_NAME=
#PAPERLESS_STATIC_URL=/static/
#PAPERLESS_AUTO_LOGIN_USERNAME=
#PAPERLESS_COOKIE_PREFIX=
#PAPERLESS_ENABLE_HTTP_REMOTE_USER=false
# OCR settings
#PAPERLESS_OCR_LANGUAGE=eng
#PAPERLESS_OCR_MODE=skip
#PAPERLESS_OCR_SKIP_ARCHIVE_FILE=never
#PAPERLESS_OCR_OUTPUT_TYPE=pdfa
#PAPERLESS_OCR_PAGES=1
#PAPERLESS_OCR_IMAGE_DPI=300
#PAPERLESS_OCR_CLEAN=clean
#PAPERLESS_OCR_DESKEW=true
#PAPERLESS_OCR_ROTATE_PAGES=true
#PAPERLESS_OCR_ROTATE_PAGES_THRESHOLD=12.0
#PAPERLESS_OCR_USER_ARGS={}
#PAPERLESS_CONVERT_MEMORY_LIMIT=0
#PAPERLESS_CONVERT_TMPDIR=/var/tmp/paperless
PAPERLESS_OCR_USER_ARGS: '{"continue_on_soft_render_error": true}'
# Software tweaks
#PAPERLESS_TASK_WORKERS=1
Dadurch, dass du da die {} in Anführungszeichen setzt, wird dieser String nicht beachtet, oder so ähnlich und kein : sondern ein = und keine Leerzeichen, nach dem =
Du bist nicht in einem ENV File oder in einem compose.yaml sondern in dem paperless.conf File
Siehst Du den Unterschied
ja da wird auch das Environment angepasst, da ist das so auch ok.
Wenn Du aber die Konfiguration, direkt anpassen möchtest, dann ist die Syntax halt anders.